diff --git a/.circleci/run.sh b/.circleci/run.sh index 873de6f1903..b0e6946e640 100755 --- a/.circleci/run.sh +++ b/.circleci/run.sh @@ -96,17 +96,17 @@ setup_repos() # run unittest with coverage coverage() { - make -f posix.mak clean + make clean # remove all existing coverage files (just in case) find . -name "*.lst" -type f -delete # Coverage information of the test runner can be missing for some template instatiations. # https://issues.dlang.org/show_bug.cgi?id=16397 - # ENABLE_COVERAGE="1" make -j"$N" -f posix.mak MODEL=$MODEL unittest-debug + # ENABLE_COVERAGE="1" make -j"$N" MODEL=$MODEL unittest-debug # So instead we run all tests individually (hoping that that doesn't break any tests). # -cov is enabled by the %.test target itself - make -j"$N" -f posix.mak BUILD=$BUILD $(find std etc -name "*.d" | sed "s/[.]d$/.test/") + make -j"$N" BUILD=$BUILD $(find std etc -name "*.d" | sed "s/[.]d$/.test/") # Remove coverage information from lines with non-deterministic coverage. # These lines are annotated with a comment containing "nocoverage". @@ -124,12 +124,12 @@ publictests() { source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash ~/dlang/install.sh dmd-$HOST_DMD_VER --activate)" - make -f posix.mak -j"$N" publictests DUB="$DUB" BUILD=$BUILD - make -f posix.mak -j"$N" publictests DUB="$DUB" BUILD=$BUILD NO_BOUNDSCHECKS=1 + make -j"$N" publictests DUB="$DUB" BUILD=$BUILD + make -j"$N" publictests DUB="$DUB" BUILD=$BUILD NO_BOUNDSCHECKS=1 # run -betterC tests - make -f posix.mak test_extractor # build in single-threaded mode - make -f posix.mak -j"$N" betterc + make test_extractor # build in single-threaded mode + make -j"$N" betterc } # test stdx dub package diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index 8ed1c029d54..00000000000 --- a/.cirrus.yml +++ /dev/null @@ -1,81 +0,0 @@ -common_steps_template: &COMMON_STEPS_TEMPLATE - clone_dmd_script: | - set -uexo pipefail - git clone --branch "${CIRRUS_BASE_BRANCH:-$CIRRUS_BRANCH}" --depth 1 https://github.com/dlang/dmd.git ../dmd - install_prerequisites_script: cd ../dmd && ./ci/cirrusci.sh - install_host_compiler_script: cd ../dmd && ./ci/run.sh install_host_compiler - setup_repos_script: | - set -uexo pipefail - ln -s $CIRRUS_WORKING_DIR ../phobos - cd ../dmd && ./ci/run.sh setup_repos "${CIRRUS_BASE_BRANCH:-$CIRRUS_BRANCH}" - build_script: cd ../dmd && ./ci/run.sh build - test_dmd_script: cd ../dmd && ./ci/run.sh test_dmd - test_druntime_script: cd ../dmd && ./ci/run.sh test_druntime - test_phobos_script: cd ../dmd && ./ci/run.sh test_phobos - -environment: - CIRRUS_CLONE_DEPTH: 1 - # for ci/run.sh: - MODEL: 64 - HOST_DMD: dmd - N: 4 - OS_NAME: linux - FULL_BUILD: false - -# Linux -linux_task: - name: Ubuntu 18.04 $TASK_NAME_SUFFIX - container: - image: ubuntu:18.04 - cpu: 4 - memory: 8G - timeout_in: 60m - environment: - matrix: - - TASK_NAME_SUFFIX: x86 - MODEL: 32 - - TASK_NAME_SUFFIX: x64 - install_git_script: apt-get -q update && apt-get install -yq git-core - << : *COMMON_STEPS_TEMPLATE - -# Mac -macos_task: - name: macOS 12.x x64 (M1) - macos_instance: - image: ghcr.io/cirruslabs/macos-monterey-xcode:latest - timeout_in: 60m - environment: - OS_NAME: darwin - # override Cirrus default OS (`darwin`) - OS: osx - << : *COMMON_STEPS_TEMPLATE - -# FreeBSD -freebsd13_task: - name: FreeBSD 13.0 x64 - freebsd_instance: - image_family: freebsd-13-0 - cpu: 4 - memory: 8G - timeout_in: 60m - environment: - OS_NAME: freebsd - CI_DFLAGS: -version=TARGET_FREEBSD13 - install_bash_and_git_script: pkg install -y bash git - << : *COMMON_STEPS_TEMPLATE - -freebsd12_task: - name: FreeBSD 12.3 x64 - freebsd_instance: - image_family: freebsd-12-3 - cpu: 4 - memory: 8G - timeout_in: 60m - environment: - OS_NAME: freebsd - HOST_DMD: dmd-2.095.0 - CI_DFLAGS: -version=TARGET_FREEBSD12 - install_bash_and_git_script: | - sed -i '' -e 's|pkg.FreeBSD.org|mirrors.xtom.com/freebsd-pkg|' /etc/pkg/FreeBSD.conf - pkg install -y bash git - << : *COMMON_STEPS_TEMPLATE diff --git a/.dscanner.ini b/.dscanner.ini index fa434b0cc82..83db68f6e67 100644 --- a/.dscanner.ini +++ b/.dscanner.ini @@ -52,7 +52,7 @@ comma_expression_check="enabled" ; Checks for local imports that are too broad local_import_check="skip-unittest" ; Checks for variables that could be declared immutable -could_be_immutable_check="enabled" +could_be_immutable_check="skip-unittest" ; Checks for redundant expressions in if statements redundant_if_check="enabled" ; Checks for redundant parenthesis @@ -116,7 +116,7 @@ trust_too_much="enabled" ; For more details, please see https://github.com/dlang/phobos/pull/5501 [analysis.config.ModuleFilters] ; Check for uses of the old-style alias syntax -alias_syntax_check="-std.traits,-std.typecons" +alias_syntax_check="-etc.c.odbc.sql,-etc.c.odbc.sqlext,-etc.c.odbc.sqltypes,-etc.c.odbc.sqlucode,-std.traits,-std.typecons" ; Check allman brace style allman_braces_check="+disabled" ; Checks for confusing code in inline asm statements @@ -220,6 +220,9 @@ function_attribute_check="-std.algorithm.iteration,-std.concurrency,-std.conv,-s has_public_example="-etc.c.curl,\ -etc.c.sqlite3,\ -etc.c.zlib,\ +-etc.c.odbc.sql,\ +-etc.c.odbc.sqlext,\ +-etc.c.odbc.sqlucode,\ -std.complex,\ -std.concurrency,\ -std.container.array,\ @@ -252,6 +255,7 @@ has_public_example="-etc.c.curl,\ -std.internal.math.gammafunction,\ -std.internal.scopebuffer,\ -std.internal.test.dummyrange,\ +-std.internal.unicode_tables,\ -std.int128,\ -std.json,\ -std.mathspecial,\ @@ -274,7 +278,7 @@ has_public_example="-etc.c.curl,\ imports_sortedness="+disabled" ;imports_sortedness="-etc.c.curl,-std.algorithm.comparison,-std.algorithm.internal,-std.algorithm.iteration,-std.algorithm.mutation,-std.algorithm.searching,-std.algorithm.setops,-std.algorithm.sorting,-std.array,-std.bigint,-std.bitmanip,-std.c.freebsd.socket,-std.c.linux.pthread,-std.c.process,-std.complex,-std.concurrency,-std.container.array,-std.container.binaryheap,-std.container.dlist,-std.container.rbtree,-std.container.slist,-std.container.util,-std.conv,-std.datetime,-std.datetime.date,-std.datetime.interval,-std.datetime.systime,-std.datetime.timezone,-std.digest,-std.digest.hmac,-std.exception,-std.experimental.allocator,-std.experimental.allocator.building_blocks,-std.experimental.allocator.building_blocks.affix_allocator,-std.experimental.allocator.building_blocks.allocator_list,-std.experimental.allocator.building_blocks.free_list,-std.experimental.allocator.building_blocks.free_tree,-std.experimental.allocator.building_blocks.kernighan_ritchie,-std.experimental.allocator.building_blocks.region,-std.experimental.allocator.common,-std.experimental.allocator.mallocator,-std.experimental.allocator.mmap_allocator,-std.experimental.allocator.showcase,-std.experimental.allocator.typed,-std.experimental.checkedint,-std.logger.core,-std.file,-std.format,-std.functional,-std.getopt,-std.internal.math.biguintcore,-std.internal.test.dummyrange,-std.json,-std.math,-std.meta,-std.mmfile,-std.net.curl,-std.net.isemail,-std.numeric,-std.outbuffer,-std.parallelism,-std.path,-std.process,-std.random,-std.range,-std.range.primitives,-std.regex,-std.regex.internal.backtracking,-std.regex.internal.generator,-std.regex.internal.kickstart,-std.regex.internal.parser,-std.regex.internal.tests,-std.signals,-std.socket,-std.stdio,-std.string,-std.uni,-std.utf,-std.uuid,-std.variant,-std.windows.charset,-std.windows.registry,-std.windows.syserror,-std.zip" ; Checks for labels with the same name as variables -label_var_same_name_check="-std.algorithm.iteration,-std.algorithm.sorting,-std.array,-std.bigint,-std.bitmanip,-std.conv,-std.encoding,-std.experimental.allocator.building_blocks.segregator,-std.internal.digest.sha_SSSE3,-std.parallelism,-std.process,-std.typecons,-std.utf,-std.traits" +label_var_same_name_check="-std.algorithm.iteration,-std.algorithm.sorting,-std.array,-std.bigint,-std.bitmanip,-std.conv,-std.encoding,-std.experimental.allocator.building_blocks.segregator,-std.internal.digest.sha_SSSE3,-std.parallelism,-std.process,-std.range.primitives,-std.typecons,-std.utf,-std.traits" ; Checks for subtraction from .length properties length_subtraction_check="+disabled" ;length_subtraction_check="-std.algorithm.internal,-std.algorithm.iteration,-std.algorithm.mutation,-std.algorithm.searching,-std.algorithm.sorting,-std.array,-std.concurrency,-std.container.array,-std.container.binaryheap,-std.conv,-std.datetime.timezone,-std.experimental.allocator.building_blocks.segregator,-std.logger.core,-std.file,-std.format,-std.getopt,-std.internal.math.biguintcore,-std.internal.math.biguintnoasm,-std.internal.math.biguintx86,-std.internal.scopebuffer,-std.math,-std.net.curl,-std.net.isemail,-std.numeric,-std.parallelism,-std.path,-std.process,-std.range,-std.regex,-std.regex.internal.parser,-std.regex.internal.tests,-std.string,-std.uni,-std.windows.charset,-std.windows.registry,-std.zip" @@ -297,6 +301,7 @@ opequals_tohash_check="-std.complex,-std.container.array,-std.container.dlist,-s ; Note: DScanner doesn't understand documenting parameters of IFTI/eponymous templates. properly_documented_public_functions="-etc.c.odbc.sql,\ -etc.c.odbc.sqlext,\ +-etc.c.odbc.sqlucode,\ -etc.c.zlib,\ -std.algorithm.comparison,\ -std.algorithm.mutation,\ @@ -399,7 +404,7 @@ redundant_attributes_check="-std.concurrency,-std.digest.md,-std.digest.ripemd,- style_check="+disabled" ;style_check="-etc.c.curl,-etc.c.odbc.sqlext,-etc.c.odbc.sqltypes,-etc.c.odbc.sqlucode,-etc.c.sqlite3,-etc.c.zlib,-std.algorithm.comparison,-std.algorithm.internal,-std.algorithm.iteration,-std.algorithm.mutation,-std.algorithm.sorting,-std.array,-std.base64,-std.bitmanip,-std.c.linux.linux,-std.compiler,-std.container.array,-std.conv,-std.datetime.date,-std.datetime.interval,-std.datetime.systime,-std.digest,-std.digest.murmurhash,-std.digest.sha,-std.encoding,-std.exception,-std.experimental.allocator,-std.experimental.allocator.building_blocks.affix_allocator,-std.experimental.allocator.building_blocks.allocator_list,-std.experimental.allocator.building_blocks.bucketizer,-std.experimental.allocator.building_blocks.fallback_allocator,-std.experimental.allocator.building_blocks.free_list,-std.experimental.allocator.building_blocks.free_tree,-std.experimental.allocator.building_blocks.null_allocator,-std.experimental.allocator.building_blocks.region,-std.experimental.allocator.building_blocks.segregator,-std.experimental.allocator.common,-std.experimental.allocator.gc_allocator,-std.experimental.allocator.mallocator,-std.experimental.allocator.mmap_allocator,-std.experimental.checkedint,-std.format,-std.functional,-std.getopt,-std.internal.digest.sha_SSSE3,-std.internal.math.errorfunction,-std.internal.math.gammafunction,-std.internal.test.dummyrange,-std.internal.unicode_tables,-std.json,-std.math,-std.meta,-std.numeric,-std.parallelism,-std.path,-std.process,-std.random,-std.range,-std.range.primitives,-std.regex,-std.regex.internal.ir,-std.regex.internal.kickstart,-std.signals,-std.socket,-std.stdio,-std.string,-std.uni,-std.uri,-std.utf,-std.uuid,-std.variant,-std.zlib" ; Checks for undocumented public declarations -undocumented_declaration_check="-etc.c.curl,-etc.c.odbc.sql,-etc.c.odbc.sqlext,-etc.c.odbc.sqltypes,-etc.c.odbc.sqlucode,-etc.c.sqlite3,-etc.c.zlib,-std.algorithm.sorting,-std.array,-std.ascii,-std.base64,-std.bitmanip,-std.c.linux.linux,-std.c.linux.socket,-std.c.osx.socket,-std.c.process,-std.compiler,-std.complex,-std.concurrency,-std.container,-std.container.array,-std.container.binaryheap,-std.container.dlist,-std.container.rbtree,-std.container.slist,-std.conv,-std.csv,-std.datetime,-std.datetime.date,-std.digest,-std.digest.hmac,-std.digest.md,-std.digest.murmurhash,-std.digest.ripemd,-std.digest.sha,-std.encoding,-std.exception,-std.experimental.allocator,-std.experimental.allocator.building_blocks.affix_allocator,-std.experimental.allocator.building_blocks.allocator_list,-std.experimental.allocator.building_blocks.bitmapped_block,-std.experimental.allocator.building_blocks.fallback_allocator,-std.experimental.allocator.building_blocks.free_list,-std.experimental.allocator.building_blocks.free_tree,-std.experimental.allocator.building_blocks.kernighan_ritchie,-std.experimental.allocator.building_blocks.quantizer,-std.experimental.allocator.building_blocks.region,-std.experimental.allocator.building_blocks.segregator,-std.experimental.allocator.building_blocks.stats_collector,-std.experimental.allocator.gc_allocator,-std.experimental.allocator.mallocator,-std.experimental.checkedint,-std.logger.core,-std.file,-std.format,-std.functional,-std.internal.digest.sha_SSSE3,-std.internal.math.biguintcore,-std.internal.math.biguintnoasm,-std.internal.math.biguintx86,-std.internal.math.errorfunction,-std.internal.math.gammafunction,-std.internal.test.dummyrange,-std.internal.test.uda,-std.internal.windows.advapi32,-std.json,-std.math,-std.mmfile,-std.numeric,-std.outbuffer,-std.parallelism,-std.path,-std.process,-std.regex,-std.regex.internal.parser,-std.signals,-std.socket,-std.stdio,-std.string,-std.system,-std.traits,-std.uni,-std.utf,-std.variant,-std.windows.charset,-std.windows.registry,-std.windows.syserror,-std.zip,-std.zlib,-std.int128" +undocumented_declaration_check="-etc.c.curl,-etc.c.odbc.sql,-etc.c.odbc.sqlext,-etc.c.odbc.sqltypes,-etc.c.odbc.sqlucode,-etc.c.sqlite3,-etc.c.zlib,-std.algorithm.sorting,-std.array,-std.ascii,-std.base64,-std.bitmanip,-std.c.linux.linux,-std.c.linux.socket,-std.c.osx.socket,-std.c.process,-std.compiler,-std.complex,-std.concurrency,-std.container,-std.container.array,-std.container.binaryheap,-std.container.dlist,-std.container.rbtree,-std.container.slist,-std.conv,-std.csv,-std.datetime,-std.datetime.date,-std.digest,-std.digest.hmac,-std.digest.md,-std.digest.murmurhash,-std.digest.ripemd,-std.digest.sha,-std.encoding,-std.exception,-std.experimental.allocator,-std.experimental.allocator.building_blocks.affix_allocator,-std.experimental.allocator.building_blocks.allocator_list,-std.experimental.allocator.building_blocks.bitmapped_block,-std.experimental.allocator.building_blocks.fallback_allocator,-std.experimental.allocator.building_blocks.free_list,-std.experimental.allocator.building_blocks.free_tree,-std.experimental.allocator.building_blocks.kernighan_ritchie,-std.experimental.allocator.building_blocks.quantizer,-std.experimental.allocator.building_blocks.region,-std.experimental.allocator.building_blocks.segregator,-std.experimental.allocator.building_blocks.stats_collector,-std.experimental.allocator.gc_allocator,-std.experimental.allocator.mallocator,-std.experimental.checkedint,-std.logger.core,-std.file,-std.format,-std.functional,-std.internal.digest.sha_SSSE3,-std.internal.math.biguintcore,-std.internal.math.biguintnoasm,-std.internal.math.biguintx86,-std.internal.math.errorfunction,-std.internal.math.gammafunction,-std.internal.test.dummyrange,-std.internal.test.sumtype_example_overloads,-std.internal.test.uda,-std.internal.windows.advapi32,-std.json,-std.math,-std.mmfile,-std.numeric,-std.outbuffer,-std.parallelism,-std.path,-std.process,-std.regex,-std.regex.internal.parser,-std.signals,-std.socket,-std.stdio,-std.string,-std.system,-std.traits,-std.uni,-std.utf,-std.variant,-std.windows.charset,-std.windows.registry,-std.windows.syserror,-std.zip,-std.zlib,-std.int128,-std.range" ; Checks for unused labels unused_label_check="-std.conv,-std.internal.math.biguintx86,-std.regex.internal.thompson,-std.signals,-std.uni" ; Checks for unused function parameters @@ -513,4 +518,4 @@ trust_too_much="-std.regex,-std.stdio,-std.uni,-std.internal.cstring" ; Temporarily disable until https://github.com/dlang-community/D-Scanner/issues/593 is fixed if_else_same_check="-std.typecons" ; Disable checks for generated unicode tables -long_line_check="-std.internal.unicode_decomp,-std.internal.unicode_comp,-std.internal.unicode_grapheme,-std.internal.unicode_norm,-std.internal.unicode_tables" \ No newline at end of file +long_line_check="-etc.c.odbc.sql,-etc.c.odbc.sqlext,-etc.c.odbc.sqltypes,-etc.c.odbc.sqlucode,-std.internal.unicode_decomp,-std.internal.unicode_comp,-std.internal.unicode_grapheme,-std.internal.unicode_norm,-std.internal.unicode_tables" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000000..ed27c241e60 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,205 @@ +# very similar to the DMD script: https://github.com/dlang/dmd/blob/master/.github/workflows/main.yml + +name: Main +on: + - pull_request # without merge conflicts + - push # branch or tag + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + main: + strategy: + fail-fast: false + matrix: + include: + # Linux + - job_name: Ubuntu 22.04 x64 + os: ubuntu-22.04 + - job_name: Ubuntu 22.04 x86 + os: ubuntu-22.04 + model: 32 + # macOS + - job_name: macOS 13 x64 + os: macos-13 + - job_name: macOS 12 x64 + os: macos-12 + # Windows + - job_name: Windows x64 + os: windows-2022 + - job_name: Windows x86 + os: windows-2022 + model: 32 + name: ${{ matrix.job_name }} + runs-on: ${{ matrix.os }} + timeout-minutes: 40 + env: + # for ci/run.sh: + OS_NAME: ${{ startsWith(matrix.os, 'ubuntu') && 'linux' || (startsWith(matrix.os, 'macos') && 'osx' || (startsWith(matrix.os, 'windows') && 'windows' || '')) }} + MODEL: ${{ matrix.model || '64' }} + HOST_DMD: dmd + # N is set dynamically below + FULL_BUILD: false + # work around https://issues.dlang.org/show_bug.cgi?id=23517 + MACOSX_DEPLOYMENT_TARGET: '11' + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 50 + - name: Clone DMD + run: | + set -uexo pipefail + + ref='${{ github.ref }}' + if [[ "$ref" =~ ^refs/pull/ ]]; then + # PR: clone the DMD head with the same name as this Phobos PR's target branch + # e.g., DMD stable when targeting Phobos stable + REPO_BRANCH="$GITHUB_BASE_REF" + elif [[ "$ref" =~ ^refs/(heads|tags)/(.*)$ ]]; then + # no PR: clone the DMD head with the same name as this Phobos head + # e.g., DMD stable for a push to Phobos stable, or DMD v2.105.2 for Phobos tag v2.105.2 + REPO_BRANCH="${BASH_REMATCH[2]}" + else + echo "Error: unexpected GitHub ref '$ref'" >&2 + exit 1 + fi + + git clone --branch "$REPO_BRANCH" --depth 1 https://github.com/dlang/dmd.git ../dmd + + - name: Set environment variable N (parallelism) + run: echo "N=$(${{ runner.os == 'macOS' && 'sysctl -n hw.logicalcpu' || 'nproc' }})" >> $GITHUB_ENV + + - name: 'Posix: Install prerequisites' + if: runner.os != 'Windows' + run: cd ../dmd && ${{ runner.os == 'macOS' && 'ci/cirrusci.sh' || 'sudo -E ci/cirrusci.sh' }} + - name: 'Windows: Set up MSVC environment' + if: runner.os == 'Windows' + uses: seanmiddleditch/gha-setup-vsdevenv@v4 + with: + arch: ${{ env.MODEL == '64' && 'x64' || 'x86' }} + + # NOTE: Linker ICEs with Xcode 15.0.1 (default version on macos-13) + # * https://issues.dlang.org/show_bug.cgi?id=24407 + # Remove this step if the default gets changed to 15.1 in actions/runner-images. + - name: 'macOS 13: Switch to Xcode v15.1' + if: matrix.os == 'macos-13' + run: sudo xcode-select -switch /Applications/Xcode_15.1.app + + - name: 'Posix: Install host compiler' + if: runner.os != 'Windows' + run: cd ../dmd && ci/run.sh install_host_compiler + - name: 'Windows: Install host compiler' + if: runner.os == 'Windows' + uses: dlang-community/setup-dlang@v1.3.0 + with: + compiler: ldc-latest + + - name: Build + run: cd ../dmd && ci/run.sh build + env: + # on Windows, `ci/run.sh build` expects the DMD env var to be set to the DMD-CLI-compatible host compiler + DMD: ${{ runner.os == 'Windows' && 'ldmd2' || '' }} + # work around the LDC host compiler on Windows assuming the first link.exe in PATH is the MSVC one + # (VSINSTALLDIR is set, but GHA uses Git's bin\bash.exe for `shell: bash`, which prepends Git's usr\bin to PATH, with GNU link.exe) + LDC_VSDIR_FORCE: ${{ runner.os == 'Windows' && '1' || '' }} + - name: Test dmd + run: cd ../dmd && ci/run.sh test_dmd + - name: Test druntime + run: cd ../dmd && ci/run.sh test_druntime + - name: 'Windows x86: Add 32-bit libcurl.dll to PATH (required for Phobos unittests)' + if: runner.os == 'Windows' && env.MODEL == '32' + run: echo "$(dirname "$(which $DC)")/../lib32" >> $GITHUB_PATH + - name: Test phobos + run: cd ../dmd && ci/run.sh test_phobos + + freebsd-vm: + strategy: + fail-fast: false + matrix: + include: + - job_name: FreeBSD 13.2 x64 + freebsd_version: '13.2' + name: ${{ matrix.job_name }} + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 50 + - name: Run in VM + uses: cross-platform-actions/action@v0.23.0 + with: + operating_system: freebsd + hypervisor: qemu + memory: 12G + cpu_count: 4 + sync_files: runner-to-vm + version: ${{ matrix.freebsd_version }} + shell: bash + run: | + set -uexo pipefail + + freebsd_version='${{ matrix.freebsd_version }}' + freebsd_major="${freebsd_version:0:2}" + + export OS_NAME=freebsd + export MODEL=64 + export HOST_DMD=dmd + export N="$(nproc)" + export FULL_BUILD=false + export CI_DFLAGS="-version=TARGET_FREEBSD${freebsd_major}" + + #if [[ "$freebsd_major" == 12 ]]; then + # sudo sed -i '' -e 's|pkg.FreeBSD.org|mirrors.xtom.com/freebsd-pkg|' /etc/pkg/FreeBSD.conf + #fi + + bash --version + + echo '::group::Install git' + sudo pkg install -y git + echo '::endgroup::' + + echo '::group::Clone DMD' + ref='${{ github.ref }}' + if [[ "$ref" =~ ^refs/pull/ ]]; then + REPO_BRANCH="$GITHUB_BASE_REF" + elif [[ "$ref" =~ ^refs/(heads|tags)/(.*)$ ]]; then + REPO_BRANCH="${BASH_REMATCH[2]}" + else + echo "Error: unexpected GitHub ref '$ref'" >&2 + exit 1 + fi + + git clone --branch "$REPO_BRANCH" --depth 1 https://github.com/dlang/dmd.git ../dmd + echo '::endgroup::' + + cd ../dmd + + echo '::group::Install prerequisites' + sudo -E ci/cirrusci.sh + echo '::endgroup::' + + echo '::group::Install host compiler' + ci/run.sh install_host_compiler + echo '::endgroup::' + + echo '::group::Build' + ci/run.sh build + echo '::endgroup::' + + echo '::group::Test dmd' + ci/run.sh test_dmd + echo '::endgroup::' + + echo '::group::Test druntime' + ci/run.sh test_druntime + echo '::endgroup::' + + echo '::group::Test phobos' + ci/run.sh test_phobos + echo '::endgroup::' diff --git a/.gitignore b/.gitignore index efcbaa7d841..23c73906d3b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,10 @@ /phobos.json generated +generated-lib GNUmakefile .DS_Store .*.sw* -Makefile *.lst temp/ @@ -19,9 +19,18 @@ obj/ # Rule for VS Code config folder .vscode - +dub.selections.json *.html .dub/ libphobos_* source/ + +tools/ucd* + +# Build specific exclusions +*.o +*.a +*.obj +*.exe +unittest \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bcfcf463eba..40104226b8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,5 +12,5 @@ More Links * Use our [Bugzilla bug tracker](https://issues.dlang.org) * Follow the [D style](http://dlang.org/dstyle.html) * Participate in [our forum](http://forum.dlang.org/) -* Ask questions on our `#d` IRC channel on freenode.org ([web interface](https://kiwiirc.com/client/irc.freenode.net/d)) +* Ask questions on our `#d` IRC channel on libera.chat ([web interface](https://kiwiirc.com/client/irc.libera.chat/d)) * Review Phobos additions in the [Review Queue](http://wiki.dlang.org/Review_Queue). diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..7a0f73e2e65 --- /dev/null +++ b/Makefile @@ -0,0 +1,731 @@ +# This makefile is designed to be run by gnu make. +# - Windows: you may download a prebuilt zipped .exe from https://github.com/dlang/dmd/releases/download/nightly/gnumake-4.4-win64.zip. +# You also need a Git for Windows installation, for bash and common GNU tools like cp,mkdir,mv,rm,touch,which. +# - FreeBSD: the default make program on FreeBSD is not gnu make; to install gnu make: +# pkg install gmake +# and then run as gmake rather than make. +# +# make => makes release build of the library +# +# make clean => removes all targets built by the makefile +# +# make zip => creates a zip file of all the sources (not targets) +# referred to by the makefile, including the makefile +# +# make BUILD=debug => makes debug build of the library +# +# make unittest => builds all unittests (for debug AND release) and runs them +# make std/somemodule.test => only builds and unittests std.somemodule +# make std/somepackage.test => only builds and unittests modules in std.somepackage +# make unittest/std/somemodule.run => run std.somemodule unittest +# +# make BUILD=debug unittest => builds all unittests (for debug) and runs them +# +# make DEBUGGER=ddd std/XXXXX.debug => builds the module XXXXX and executes it +# in the debugger ddd +# +# make build-html => makes html documentation +# +# make install => copies library to /usr/lib +# +################################################################################ +# Configurable stuff, usually from the command line +# +# OS can be linux, windows, win32wine, osx, freebsd, netbsd or dragonflybsd. +# The system will be determined by using uname + +QUIET:=@ + +DEBUGGER=gdb +GIT_HOME=https://github.com/dlang +DMD_DIR=../dmd + +include $(DMD_DIR)/compiler/src/osmodel.mak + +ifeq (windows,$(OS)) + DOTEXE:=.exe + DOTOBJ:=.obj +else + DOTEXE:= + DOTOBJ:=.o +endif + +ifeq (osx,$(OS)) + export MACOSX_DEPLOYMENT_TARGET=10.9 +endif + +# Default to a release build, override with BUILD=debug +ifeq (,$(BUILD)) +BUILD_WAS_SPECIFIED=0 +BUILD=release +else +BUILD_WAS_SPECIFIED=1 +endif + +ifneq ($(BUILD),release) + ifneq ($(BUILD),debug) + $(error Unrecognized BUILD=$(BUILD), must be 'debug' or 'release') + endif +endif + +# default to PIC, use PIC=1/0 to en-/disable PIC. +# Note that shared libraries and C files are always compiled with PIC. +ifeq ($(PIC),) + PIC:=$(if $(findstring win,$(OS)),,1) +endif +ifeq ($(PIC),1) + override PIC:=-fPIC +else + override PIC:= +endif + +# default to compiling the C parts (zlib) with DMD via importC; override with USE_IMPORTC=1/0 +USE_IMPORTC:=1 + +# FreeBSD 14 can't use importC for zlib thanks to asm in stdlib.h, which dmd can't handle. +# https://issues.dlang.org/show_bug.cgi?id=24389 +ifeq (freebsd,$(OS)) + USE_IMPORTC=0 +endif + +# Configurable stuff that's rarely edited +INSTALL_DIR = ../install +DRUNTIME_PATH = $(DMD_DIR)/druntime +DLANG_ORG_DIR = ../dlang.org +ZIPFILE = phobos.zip +ROOT_OF_THEM_ALL = generated +ROOT = $(ROOT_OF_THEM_ALL)/$(OS)/$(BUILD)/$(MODEL) +DUB=dub +TOOLS_DIR=../tools +DSCANNER_HASH=5a53c538d0aa832f03840840271b6631fbbfc53d +DSCANNER_DIR=$(ROOT_OF_THEM_ALL)/dscanner-$(DSCANNER_HASH) + +# Set DRUNTIME name and full path +ifneq (,$(DRUNTIME)) + CUSTOM_DRUNTIME=1 +endif +ifeq (,$(findstring win,$(OS))) + DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/libdruntime.a + DRUNTIMESO = $(basename $(DRUNTIME)).so.a +else + DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/druntime.lib +endif + +# Set DMD +ifeq ($(OS),win32wine) + DMD = wine dmd.exe + RUN = wine +else + DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd$(DOTEXE) + RUN = +endif + +# Set NODEFAULTLIB and CPPFLAGS (for the C preprocessor) +NODEFAULTLIB:=-defaultlib= -debuglib= +CPPFLAGS:= +ifeq (,$(findstring win,$(OS))) + CPPFLAGS := -DHAVE_UNISTD_H +# Bundled with the system library on OSX, and doesn't work with >= MacOS 11 + ifneq (osx,$(OS)) + NODEFAULTLIB += -L-lpthread -L-lm + endif +endif + +# Set CC, CC_OUTFILEFLAG and CFLAGS unless using importC +ifneq ($(USE_IMPORTC),1) + CC := cc + CC_OUTFILEFLAG := -o + + ifeq ($(OS),win32wine) + CC := wine dmc.exe + CFLAGS := $(if $(findstring $(BUILD),debug),-g,-O) + else ifeq ($(OS),windows) + CC := cl + CC_OUTFILEFLAG := /Fo + CFLAGS := /nologo /Zl /GS- $(if $(findstring $(BUILD),debug),/Z7,/O2) + else # Posix + CFLAGS := $(MODEL_FLAG) -fPIC -std=c11 $(if $(findstring $(BUILD),debug),-g,-O3) + ifeq (osx64,$(OS)$(MODEL)) + CFLAGS += --target=x86_64-darwin-apple # ARM cpu is not supported by dmd + endif + endif +endif + + +# Set DFLAGS +DFLAGS= +override DFLAGS+=-conf= -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) -w -preview=dip1000 -preview=dtorfields -preview=fieldwise $(MODEL_FLAG) $(PIC) +ifeq ($(BUILD),debug) +override DFLAGS += -g -debug +else +override DFLAGS += -O -release +endif + +ifdef ENABLE_COVERAGE +override DFLAGS += -cov=ctfe +endif + +ifdef NO_BOUNDSCHECKS +override DFLAGS += -boundscheck=off +endif + +ifdef NO_AUTODECODE +override DFLAGS += -version=NoAutodecodeStrings +endif + +UDFLAGS=-unittest -version=StdUnittest + +LINKDL:=$(if $(findstring $(OS),linux),-L-ldl,) + +# use timelimit to avoid deadlocks if available +TIMELIMIT:=$(if $(shell which timelimit 2>/dev/null || true),timelimit -t 90 ,) + +# Set VERSION, where the file is that contains the version string +VERSION=$(DMD_DIR)/VERSION + +# Set LIB, the ultimate target +ifeq (,$(findstring win,$(OS))) + LIB:=$(ROOT)/libphobos2.a + # 2.064.2 => libphobos2.so.0.64.2 + # 2.065 => libphobos2.so.0.65.0 + # MAJOR version is 0 for now, which means the ABI is still unstable + MAJOR:=0 + MINOR:=$(shell awk -F. '{ print int($$2) }' $(VERSION)) + PATCH:=$(shell awk -F. '{ print int($$3) }' $(VERSION)) + # SONAME doesn't use patch level (ABI compatible) + SONAME:=libphobos2.so.$(MAJOR).$(MINOR) + LIBSO:=$(ROOT)/$(SONAME).$(PATCH) +else + ifeq ($(MODEL),32) + LIB:=phobos32mscoff.lib + else + LIB:=phobos$(MODEL).lib + endif +endif + +################################################################################ +MAIN = $(ROOT)/emptymain.d + +# Given one or more packages, returns the modules they contain +P2MODULES=$(foreach P,$1,$(addprefix $P/,$(PACKAGE_$(subst /,_,$P)))) + +# Packages in std. Just mention the package name here. The contents of package +# xy/zz is in variable PACKAGE_xy_zz. This allows automation in iterating +# packages and their modules. +STD_PACKAGES = std $(addprefix std/,\ + algorithm container datetime digest experimental/allocator \ + experimental/allocator/building_blocks experimental/logger \ + format logger math net uni \ + experimental range regex windows) + +# Modules broken down per package + +PACKAGE_std = array ascii base64 bigint bitmanip checkedint compiler complex concurrency \ + conv csv demangle encoding exception file \ + functional getopt int128 json mathspecial meta mmfile numeric \ + outbuffer package parallelism path process random signals socket stdint \ + stdio string sumtype system traits typecons \ + uri utf uuid variant zip zlib +PACKAGE_std_experimental = checkedint +PACKAGE_std_algorithm = comparison iteration mutation package searching setops \ + sorting +PACKAGE_std_container = array binaryheap dlist package rbtree slist util +PACKAGE_std_datetime = date interval package stopwatch systime timezone +PACKAGE_std_digest = crc hmac md murmurhash package ripemd sha +PACKAGE_std_experimental_logger = core filelogger \ + nulllogger multilogger package +PACKAGE_std_experimental_allocator = \ + common gc_allocator mallocator mmap_allocator package showcase typed +PACKAGE_std_experimental_allocator_building_blocks = \ + affix_allocator aligned_block_list allocator_list ascending_page_allocator \ + bucketizer fallback_allocator free_list free_tree bitmapped_block \ + kernighan_ritchie null_allocator package quantizer \ + region scoped_allocator segregator stats_collector +PACKAGE_std_format = package read spec write $(addprefix internal/, floats read write) +PACKAGE_std_math = algebraic constants exponential hardware operations \ + package remainder rounding traits trigonometry +PACKAGE_std_net = curl isemail +PACKAGE_std_range = interfaces package primitives +PACKAGE_std_regex = package $(addprefix internal/,generator ir parser \ + backtracking tests tests2 thompson kickstart) +PACKAGE_std_uni = package +PACKAGE_std_windows = charset registry syserror +PACKAGE_std_logger = core filelogger \ + nulllogger multilogger package + +# Modules in std (including those in packages) +STD_MODULES=$(call P2MODULES,$(STD_PACKAGES)) + +# NoAutodecode test modules. +# List all modules whose unittests are known to work without autodecode enabled. +NO_AUTODECODE_MODULES= std/utf + +# Other D modules that aren't under std/ +EXTRA_MODULES_COMMON := $(addprefix etc/c/,curl odbc/sql odbc/sqlext \ + odbc/sqltypes odbc/sqlucode sqlite3 zlib) + +EXTRA_DOCUMENTABLES := $(EXTRA_MODULES_COMMON) + +EXTRA_MODULES_INTERNAL := $(addprefix std/, \ + algorithm/internal \ + $(addprefix internal/, \ + cstring memory digest/sha_SSSE3 \ + $(addprefix math/, biguintcore biguintnoasm biguintx86 \ + errorfunction gammafunction ) \ + scopebuffer test/dummyrange test/range \ + test/sumtype_example_overloads \ + $(addprefix unicode_, comp decomp grapheme norm tables) \ + windows/advapi32 \ + ) \ + typetuple \ +) + +EXTRA_MODULES += $(EXTRA_DOCUMENTABLES) $(EXTRA_MODULES_INTERNAL) + +# Aggregate all D modules relevant to this build +D_MODULES = $(STD_MODULES) $(EXTRA_MODULES) + +# Add the .d suffix to the module names +D_FILES = $(addsuffix .d,$(D_MODULES)) +# Aggregate all D modules over all OSs (this is for the zip file) +ALL_D_FILES = $(addsuffix .d, $(STD_MODULES) $(EXTRA_MODULES_COMMON) \ + $(EXTRA_MODULES_LINUX) $(EXTRA_MODULES_OSX) $(EXTRA_MODULES_FREEBSD) \ + $(EXTRA_MODULES_WIN32) $(EXTRA_MODULES_INTERNAL)) + +# C files to be part of the build +C_MODULES := $(addprefix etc/c/zlib/, adler32 compress crc32 deflate \ + gzclose gzlib gzread gzwrite infback inffast inflate inftrees trees uncompr zutil) +C_FILES := $(addsuffix .c, $(C_MODULES)) + +ifeq ($(USE_IMPORTC),1) + C_OBJS := $(ROOT)/zlib$(DOTOBJ) +else + C_OBJS := $(addprefix $(ROOT)/, $(addsuffix $(DOTOBJ), $(C_MODULES))) +endif + +# build with shared library support (defaults to true on supported platforms) +SHARED=$(if $(findstring $(OS),linux freebsd),1,) + +TESTS_EXTRACTOR=$(ROOT)/tests_extractor$(DOTEXE) +PUBLICTESTS_DIR=$(ROOT)/publictests +BETTERCTESTS_DIR=$(ROOT)/betterctests + +################################################################################ +# Rules begin here +################################################################################ + +# Main target (builds the dll on linux, too) +ifeq (1,$(SHARED)) +all : lib dll +else +all : lib +endif + +ifneq (,$(findstring Darwin_64_32, $(PWD))) +install: + echo "Darwin_64_32_disabled" +else +install : + $(MAKE) OS=$(OS) MODEL=$(MODEL) BUILD=release INSTALL_DIR=$(INSTALL_DIR) \ + DMD=$(DMD) install2 +endif + +.PHONY : unittest +ifeq (1,$(BUILD_WAS_SPECIFIED)) +unittest : $(addsuffix .run,$(addprefix unittest/,$(D_MODULES))) +else +unittest : unittest-debug unittest-release +unittest-%: + $(MAKE) unittest OS=$(OS) MODEL=$(MODEL) DMD=$(DMD) BUILD=$* +endif + +################################################################################ +# Patterns begin here +################################################################################ + +.PHONY: lib dll +lib: $(LIB) +dll: $(ROOT)/libphobos2.so + +ifeq ($(USE_IMPORTC),1) +# the druntime dependency makes sure DMD has been built +$(ROOT)/zlib$(DOTOBJ): $(C_FILES) $(DRUNTIME) + $(DMD) -c $(DFLAGS) $(addprefix -P=,$(CPPFLAGS) -Ietc/c/zlib) -of$@ $(C_FILES) +else +$(ROOT)/%$(DOTOBJ): %.c + @[ -d $(dir $@) ] || mkdir -p $(dir $@) || [ -d $(dir $@) ] + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< $(CC_OUTFILEFLAG)$@ +endif + +$(LIB): $(C_OBJS) $(ALL_D_FILES) $(DRUNTIME) + $(DMD) $(DFLAGS) -lib -of$@ $(DRUNTIME) $(D_FILES) $(C_OBJS) + +$(ROOT)/libphobos2.so: $(ROOT)/$(SONAME) + ln -sf $(notdir $(LIBSO)) $@ + +$(ROOT)/$(SONAME): $(LIBSO) + ln -sf $(notdir $(LIBSO)) $@ + +$(LIBSO): override PIC:=-fPIC +$(LIBSO): $(C_OBJS) $(ALL_D_FILES) $(DRUNTIMESO) + $(DMD) $(DFLAGS) -shared $(NODEFAULTLIB) -of$@ -L-soname=$(SONAME) $(DRUNTIMESO) $(LINKDL) $(D_FILES) $(C_OBJS) + +ifeq (osx,$(OS)) +# Build fat library that combines the 32 bit and the 64 bit libraries +libphobos2.a: $(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a +$(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a: + $(MAKE) OS=$(OS) MODEL=32 BUILD=release + $(MAKE) OS=$(OS) MODEL=64 BUILD=release + lipo $(ROOT_OF_THEM_ALL)/osx/release/32/libphobos2.a \ + $(ROOT_OF_THEM_ALL)/osx/release/64/libphobos2.a \ + -create -output $@ +endif + +################################################################################ +# Unittests +################################################################################ + +DISABLED_TESTS = +ifeq ($(OS),freebsd) + ifeq ($(MODEL),32) + # Curl tests for FreeBSD 32-bit are temporarily disabled. + # https://github.com/braddr/d-tester/issues/70 + # https://issues.dlang.org/show_bug.cgi?id=18519 + DISABLED_TESTS += std/net/curl + endif +endif + +$(addsuffix .run,$(addprefix unittest/,$(DISABLED_TESTS))) : + @echo Testing $@ - disabled + +UT_D_OBJS:=$(addprefix $(ROOT)/unittest/,$(addsuffix $(DOTOBJ),$(D_MODULES))) +# need to recompile all unittest objects whenever sth. changes +$(UT_D_OBJS): $(ALL_D_FILES) +$(UT_D_OBJS): $(ROOT)/unittest/%$(DOTOBJ): %.d + @mkdir -p $(dir $@) + $(DMD) $(DFLAGS) $(UDFLAGS) -c -of$@ $< + +ifneq (1,$(SHARED)) + +$(UT_D_OBJS): $(DRUNTIME) + +$(ROOT)/unittest/test_runner$(DOTEXE): $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(C_OBJS) $(DRUNTIME) + $(DMD) $(DFLAGS) $(UDFLAGS) -of$@ $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(C_OBJS) $(DRUNTIME) $(LINKDL) $(NODEFAULTLIB) + +else + +UT_LIBSO:=$(ROOT)/unittest/libphobos2-ut.so + +$(UT_D_OBJS): $(DRUNTIMESO) + +$(UT_LIBSO): override PIC:=-fPIC +$(UT_LIBSO): $(UT_D_OBJS) $(C_OBJS) $(DRUNTIMESO) + $(DMD) $(DFLAGS) -shared $(UDFLAGS) -of$@ $(UT_D_OBJS) $(C_OBJS) $(DRUNTIMESO) $(LINKDL) $(NODEFAULTLIB) + +$(ROOT)/unittest/test_runner$(DOTEXE): $(DRUNTIME_PATH)/src/test_runner.d $(UT_LIBSO) + $(DMD) $(DFLAGS) -of$@ $< -L$(UT_LIBSO) $(NODEFAULTLIB) + +endif + +# macro that returns the module name given the src path +moduleName=$(subst /,.,$(1)) + +# target for batch unittests (using shared phobos library and test_runner) +unittest/%.run : $(ROOT)/unittest/test_runner$(DOTEXE) + $(QUIET)$(TIMELIMIT)$(RUN) $< $(call moduleName,$*) + +# Target for quickly running a single unittest (using static phobos library). +# For example: "make std/algorithm/mutation.test" +# The mktemp business is needed so .o files don't clash in concurrent unittesting. +%.test : %.d $(LIB) + T=`mktemp -d /tmp/.dmd-run-test.XXXXXX` && \ + ( \ + $(DMD) -od$$T $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) -cov=ctfe -run $< ; \ + RET=$$? ; rm -rf $$T ; exit $$RET \ + ) + +# Target for quickly unittesting all modules and packages within a package, +# transitively. For example: "make std/algorithm.test" +%.test : $(LIB) + $(MAKE) $(addsuffix .test,$(patsubst %.d,%,$(wildcard $*/*))) + +# Recursive target for %.debug +# It has to be recursive as %.debug depends on $(LIB) and we don't want to +# force the user to call make with BUILD=debug. +# Therefore we call %.debug_with_debugger and pass BUILD=debug from %.debug +# This forces all of phobos to have debug symbols, which we need as we don't +# know where debugging is leading us. +%.debug_with_debugger : %.d $(LIB) + $(DMD) $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) $< + $(DEBUGGER) ./$(basename $(notdir $<)) + +# Target for quickly debugging a single module +# For example: make DEBUGGER=ddd std/format.debug +# ddd in this case is a graphical frontend to gdb +%.debug : %.d + BUILD=debug $(MAKE) $(basename $<).debug_with_debugger + +################################################################################ +# More stuff +################################################################################ + +# Disable implicit rule +%$(DOTEXE) : %$(DOTOBJ) + +%/.directory : + mkdir -p $* || exists $* + touch $@ + +clean : + rm -rf $(ROOT_OF_THEM_ALL) $(ZIPFILE) $(LIB) + +gitzip: + git archive --format=zip HEAD > $(ZIPFILE) + +zip : + -rm -f $(ZIPFILE) + zip -r $(ZIPFILE) . -x .git\* -x generated\* + +install2 : all + $(eval lib_dir=$(if $(filter $(OS),osx), lib, lib$(MODEL))) + mkdir -p $(INSTALL_DIR)/$(OS)/$(lib_dir) + cp $(LIB) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ +ifeq (1,$(SHARED)) + cp -P $(LIBSO) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ + cp -P $(ROOT)/$(SONAME) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ + cp -P $(ROOT)/libphobos2.so $(INSTALL_DIR)/$(OS)/$(lib_dir)/ +endif + mkdir -p $(INSTALL_DIR)/src/phobos/etc + mkdir -p $(INSTALL_DIR)/src/phobos/std + cp -r std/* $(INSTALL_DIR)/src/phobos/std/ + cp -r etc/* $(INSTALL_DIR)/src/phobos/etc/ + cp LICENSE_1_0.txt $(INSTALL_DIR)/phobos-LICENSE.txt + +ifeq (1,$(CUSTOM_DRUNTIME)) +# We consider a custom-set DRUNTIME a sign they build druntime themselves +else +# This rule additionally produces $(DRUNTIMESO). Add a fake dependency +# to always invoke druntime's make. Use FORCE instead of .PHONY to +# avoid rebuilding phobos when $(DRUNTIME) didn't change. +$(DRUNTIME): FORCE + $(MAKE) -C $(DRUNTIME_PATH) MODEL=$(MODEL) DMD=$(abspath $(DMD)) OS=$(OS) BUILD=$(BUILD) + +ifeq (,$(findstring win,$(OS))) +$(DRUNTIMESO): $(DRUNTIME) +endif + +FORCE: + +endif + +JSON = phobos.json +json : $(JSON) +$(JSON) : $(ALL_D_FILES) + $(DMD) $(DFLAGS) -o- -Xf$@ $^ + +########################################################### +# HTML documentation +# the following variables will be set by dlang.org: +# DOC_OUTPUT_DIR, STDDOC +########################################################### +SRC_DOCUMENTABLES = index.dd $(addsuffix .d,$(STD_MODULES) $(EXTRA_DOCUMENTABLES)) +# Set DDOC, the documentation generator +DDOC=$(DMD) -conf= $(MODEL_FLAG) -w -c -o- -version=StdDdoc \ + -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) + +# D file to html, e.g. std/conv.d -> std_conv.html +# But "package.d" is special cased: std/range/package.d -> std_range.html +D2HTML=$(foreach p,$1,$(if $(subst package.d,,$(notdir $p)),$(subst /,_,$(subst .d,.html,$(subst .dd,.html,$p))),$(subst /,_,$(subst /package.d,.html,$p)))) + +HTMLS=$(addprefix $(DOC_OUTPUT_DIR)/, \ + $(call D2HTML, $(SRC_DOCUMENTABLES))) + +$(DOC_OUTPUT_DIR)/. : + mkdir -p $@ + +# For each module, define a rule e.g.: +# ../web/phobos/std_conv.html : std/conv.d $(STDDOC) ; ... +$(foreach p,$(SRC_DOCUMENTABLES),$(eval \ +$(DOC_OUTPUT_DIR)/$(call D2HTML,$p) : $p $(STDDOC) ;\ + $(DDOC) project.ddoc $(STDDOC) -Df$$@ $$<)) + +# this target is called by dlang.org +html : $(DOC_OUTPUT_DIR)/. $(HTMLS) + +build-html: + ${MAKE} -C $(DLANG_ORG_DIR) -f posix.mak phobos-prerelease + +################################################################################ +# Automatically create dlang/tools repository if non-existent +################################################################################ + +${TOOLS_DIR}: + git clone --depth=1 ${GIT_HOME}/$(@F) $@ + +$(TOOLS_DIR)/checkwhitespace.d: | $(TOOLS_DIR) +$(TOOLS_DIR)/tests_extractor.d: | $(TOOLS_DIR) + +#################### test for undesired white spaces ########################## +CWS_TOCHECK = Makefile +CWS_TOCHECK += $(ALL_D_FILES) index.dd + +checkwhitespace: $(LIB) $(TOOLS_DIR)/checkwhitespace.d + $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -run $(TOOLS_DIR)/checkwhitespace.d $(CWS_TOCHECK) + +############################# +# Submission to Phobos are required to conform to the DStyle +# The tests below automate some, but not all parts of the DStyle guidelines. +# See also: http://dlang.org/dstyle.html +############################# + +$(DSCANNER_DIR): + git clone https://github.com/dlang-community/Dscanner $@ + git -C $@ checkout $(DSCANNER_HASH) + git -C $@ submodule update --init --recursive + +$(DSCANNER_DIR)/dsc: | $(DSCANNER_DIR) $(DMD) $(LIB) + # debug build is faster, but disable 'missing import' messages (missing core from druntime) + sed 's/dparse_verbose/StdLoggerDisableWarning/' $(DSCANNER_DIR)/makefile > $(DSCANNER_DIR)/dscanner_makefile_tmp + mv $(DSCANNER_DIR)/dscanner_makefile_tmp $(DSCANNER_DIR)/makefile + DC=$(abspath $(DMD)) DFLAGS="$(DFLAGS) -defaultlib=$(LIB)" $(MAKE) -C $(DSCANNER_DIR) githash debug + +style: style_lint publictests + +# runs static code analysis with Dscanner +dscanner: $(LIB) + @# The dscanner target is without dependencies to avoid constant rebuilds of Phobos (`make` always rebuilds order-only dependencies) + @# However, we still need to ensure that the DScanner binary is built once + @[ -f $(DSCANNER_DIR)/dsc ] || ${MAKE} $(DSCANNER_DIR)/dsc + @echo "Running DScanner" + $(DSCANNER_DIR)/dsc --config .dscanner.ini -I $(DRUNTIME_PATH)/src/ --styleCheck etc std -I. + +style_lint_shellcmds: + @echo "Check for trailing whitespace" + grep -nr '[[:blank:]]$$' $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Enforce whitespace before opening parenthesis" + grep -nrE "\<(for|foreach|foreach_reverse|if|while|switch|catch|version)\(" $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce no whitespace after opening parenthesis" + grep -nrE "\<(version) \( " $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce whitespace between colon(:) for import statements (doesn't catch everything)" + grep -nr 'import [^/,=]*:.*;' $$(find etc std -name '*.d') | grep -vE "import ([^ ]+) :\s"; test $$? -eq 1 + + @echo "Check for package wide std.algorithm imports" + grep -nr 'import std.algorithm : ' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce Allman style" + grep -nrE '(if|for|foreach|foreach_reverse|while|unittest|switch|else|version) .*{$$' $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Enforce do { to be in Allman style" + grep -nr 'do *{$$' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce no space between assert and the opening brace, i.e. assert(" + grep -nrE 'assert +\(' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce space after cast(...)" + grep -nrE '[^"]cast\([^)]*?\)[[:alnum:]]' $$(find etc std -name '*.d') ; test $$? -eq 1 + + @echo "Enforce space between a .. b" + grep -nrE '[[:alnum:]][.][.][[:alnum:]]|[[:alnum:]] [.][.][[:alnum:]]|[[:alnum:]][.][.] [[:alnum:]]' $$(find etc std -name '*.d' | grep -vE 'std/string.d|std/uni/package.d') ; test $$? -eq 1 + + @echo "Enforce space between binary operators" + grep -nrE "[[:alnum:]](==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]] (==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]](==|!=|<=|<<|>>|>>>|^^) [[:alnum:]]" $$(find etc std -name '*.d'); test $$? -eq 1 + + @echo "Validate changelog files (Do _not_ use REF in the title!)" + @for file in $$(find changelog -name '*.dd') ; do \ + cat $$file | head -n1 | grep -nqE '\$$\((REF|LINK2|HTTP|MREF)' && \ + { echo "$$file: The title line can't contain links - it's already a link" && exit 1; } ;\ + cat $$file | head -n2 | tail -n1 | grep -q '^$$' || \ + { echo "$$file: After the title line an empty, separating line is expected" && exit 1; } ;\ + cat $$file | head -n3 | tail -n1 | grep -nqE '^.{1,}$$' || \ + { echo "$$file: The title is supposed to be followed by a long description" && exit 1; } ;\ + done + +style_lint: style_lint_shellcmds dscanner + @echo "Check that Ddoc runs without errors" + $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -w -D -Df/dev/null -main -c -o- $$(find etc std -type f -name '*.d') 2>&1 + +################################################################################ +# Build the test extractor. +# - extracts and runs public unittest examples to checks for missing imports +# - extracts and runs @betterC unittests +################################################################################ + +$(TESTS_EXTRACTOR): $(TOOLS_DIR)/tests_extractor.d | $(LIB) + DFLAGS="$(DFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL)" $(DUB) build --force --compiler=$(abspath $(DMD)) --single $< + mv $(TOOLS_DIR)/tests_extractor$(DOTEXE) $@ + +test_extractor: $(TESTS_EXTRACTOR) + +################################################################################ +# Extract public tests of a module and test them in an separate file (i.e. without its module) +# This is done to check for potentially missing imports in the examples, e.g. +# make std/format.publictests +################################################################################ + +publictests: $(addsuffix .publictests,$(D_MODULES)) + +%.publictests: %.d $(LIB) $(TESTS_EXTRACTOR) | $(PUBLICTESTS_DIR)/.directory + @$(TESTS_EXTRACTOR) --inputdir $< --outputdir $(PUBLICTESTS_DIR) + @$(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -main -unittest -run $(PUBLICTESTS_DIR)/$(subst /,_,$<) + +################################################################################ +# Check and run @betterC tests +# ---------------------------- +# +# Extract @betterC tests of a module and run them in -betterC +# +# make std/format.betterc +################################################################################ + +betterc-phobos-tests: $(addsuffix .betterc,$(D_MODULES)) +betterc: betterc-phobos-tests + +%.betterc: %.d | $(BETTERCTESTS_DIR)/.directory + @# Due to the FORCE rule on druntime, make will always try to rebuild Phobos (even as an order-only dependency) + @# However, we still need to ensure that the test_extractor is built once + @[ -f "$(TESTS_EXTRACTOR)" ] || ${MAKE} "$(TESTS_EXTRACTOR)" + $(TESTS_EXTRACTOR) --betterC --attributes betterC \ + --inputdir $< --outputdir $(BETTERCTESTS_DIR) + $(DMD) $(DFLAGS) $(NODEFAULTLIB) -betterC -unittest -run $(BETTERCTESTS_DIR)/$(subst /,_,$<) + + +################################################################################ +# Full-module BetterC tests +# ------------------------- +# +# Test full modules with -betterC. Edit BETTERC_MODULES and +# test/betterc_module_tests.d to add new modules to the list. +# +# make betterc-module-tests +################################################################################ + +BETTERC_MODULES=std/sumtype + +betterc: betterc-module-tests + +betterc-module-tests: $(ROOT)/betterctests/betterc_module_tests + $(ROOT)/betterctests/betterc_module_tests + +$(ROOT)/betterctests/betterc_module_tests: test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) + $(DMD) $(DFLAGS) $(NODEFAULTLIB) -of=$(ROOT)/betterctests/betterc_module_tests -betterC -unittest test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) + +################################################################################ + +.PHONY : auto-tester-build +auto-tester-build: + echo "Auto-Tester has been disabled" + +.PHONY : auto-tester-test +auto-tester-test: + echo "Auto-Tester has been disabled" + +.PHONY: buildkite-test +buildkite-test: unittest betterc + +.PHONY: autodecode-test +autodecode-test: $(addsuffix .test,$(NO_AUTODECODE_MODULES)) + +.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index b85fdb494f7..00000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,80 +0,0 @@ -# Learn more: https://aka.ms/yaml - -variables: - DMD_BRANCH: $[ coalesce(variables['System.PullRequest.TargetBranch'], variables['Build.SourceBranchName'], 'master') ] - VSINSTALLDIR: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\ - -jobs: - - job: Windows - timeoutInMinutes: 60 - pool: - vmImage: 'windows-2019' - variables: - D_COMPILER: dmd - HOST_DMD_VERSION: LATEST - strategy: - matrix: - x64: - OS: Win_64 - MODEL: 64 - ARCH: x64 - x86-OMF: - OS: Win_32 - MODEL: 32omf - ARCH: x86 - steps: - - checkout: self - fetchDepth: 1 - - script: set - displayName: Print environment variables - - script: systeminfo - displayName: Print system info - - task: CopyFiles@2 - inputs: - sourceFolder: '$(Build.SourcesDirectory)' - contents: '**/*' - TargetFolder: '$(Build.SourcesDirectory)/../phobos' - - script: git clone --branch $(DMD_BRANCH) --depth 1 https://github.com/dlang/dmd.git ../dmd - displayName: Clone DMD repo - - script: | - call "%VSINSTALLDIR%\VC\Auxiliary\Build\vcvarsall.bat" %ARCH% - cd ../dmd && sh --login .azure-pipelines/windows.sh - displayName: Build and test - - - job: Windows_VisualD - timeoutInMinutes: 60 - pool: - vmImage: 'windows-2019' - variables: - D_COMPILER: ldc - VISUALD_VER: v0.49.0 - LDC_VERSION: 1.23.0 - strategy: - matrix: - x86-mscoff: - OS: Win_32 - MODEL: 32mscoff - ARCH: x86 - x86-mscoff_MinGW: - OS: Win_32 - MODEL: 32mscoff - ARCH: x86 - C_RUNTIME: mingw - steps: - - checkout: self - fetchDepth: 1 - - script: set - displayName: Print environment variables - - script: systeminfo - displayName: Print system info - - task: CopyFiles@2 - inputs: - sourceFolder: '$(Build.SourcesDirectory)' - contents: '**/*' - TargetFolder: '$(Build.SourcesDirectory)/../phobos' - - script: git clone --branch $(DMD_BRANCH) --depth 1 https://github.com/dlang/dmd.git ../dmd - displayName: Clone DMD repo - - script: cd ../dmd && sh --login .azure-pipelines/windows-visual-studio.sh - displayName: Download required binaries - - script: cd ../dmd && call .azure-pipelines/windows-msbuild.bat - displayName: Build and test diff --git a/build_v3.d b/build_v3.d new file mode 100755 index 00000000000..83c9be57bcd --- /dev/null +++ b/build_v3.d @@ -0,0 +1,140 @@ +#!/usr/bin/env rdmd +/** +Phobos V3 Build Script + +Usage: + ./build_v3.d [debug,release,unittest] +*/ + +import std.conv; +import std.datetime; +import std.file; +import std.path; +import std.process; +import std.stdio; +import std.string; + +int main(string[] args) +{ + int result = 0; + + bool buildUnittest = false; + bool buildRelease = false; + if (args.length > 1) + { + buildUnittest = args[1] == "unittest"; + buildRelease = args[1] == "release"; + } + + string argFilePath = buildNormalizedPath(getcwd(), "phobosbuildargs.txt"); + auto dFiles = dirEntries(buildNormalizedPath(getcwd(), "phobos"), "*.d", SpanMode.breadth); + auto argFile = File(argFilePath, "w"); + + version(Windows) + { + string unittestExecutable = buildNormalizedPath(getcwd(), "unittest.exe"); + } + else + { + string unittestExecutable = buildNormalizedPath(getcwd(), "unittest"); + } + + scope(exit) + { + argFile.close(); + remove(argFilePath); + + if (exists(unittestExecutable)) remove(unittestExecutable); + } + + result = runCommand("dmd --version", getcwd()); + if (result != 0) + { + writeln("Compiler Failure."); + return result; + } + + writeln("Source files:"); + //Add source file list to args file. + foreach(dFile; dFiles) + { + if (dFile.isDir()) continue; + argFile.writeln(dFile.name); + writeln(dFile.name); + } + + //Add appropriate DMD arguments to the args file. + argFile.writeln("-od=./lib"); + if (buildUnittest) + { + argFile.writeln("-main"); + argFile.writeln("-unittest"); + argFile.writeln("-debug"); + + version(Windows) + { + argFile.writeln("-of=unittest.exe"); + } + else + { + argFile.writeln("-of=unittest"); + } + } + else if (buildRelease) + { + argFile.writeln("-release -O"); + argFile.writeln("-lib"); + argFile.writeln("-of=libphobos3"); + } + else + { + argFile.writeln("-debug"); + argFile.writeln("-lib"); + argFile.writeln("-of=libphobos3-debug"); + } + + argFile.flush(); + argFile.close(); + + //Run the build. + result = runCommand("dmd @\"" ~ argFilePath ~ "\"", getcwd()); + if (result != 0) + { + writeln("Build failed."); + return result; + } + else + { + writeln("Build successful."); + writeln(); + } + + //Run unittests if built. + if (buildUnittest) + { + writeln("Running tests..."); + result = runCommand(unittestExecutable, getcwd()); + + if (result != 0) + { + writeln("Tests failed."); + return result; + } + else + { + writeln("Tests successful."); + } + } + + return result; +} + +private int runCommand(string command, string workDir) +{ + auto pid = pipeShell(command, Redirect.all, null, Config.none, workDir); + int result = wait(pid.pid); + foreach (line; pid.stdout.byLine) writeln(line); + foreach (line; pid.stderr.byLine) writeln(line); + writeln(); + return result; +} diff --git a/changelog/grapheme_walker_update.dd b/changelog/grapheme_walker_update.dd deleted file mode 100644 index 490a3085896..00000000000 --- a/changelog/grapheme_walker_update.dd +++ /dev/null @@ -1,8 +0,0 @@ -Unicode grapheme walking updated to conform to Unicode version 15 - -Up until now `graphemeStride`, `byGrapheme` and `decodeGrapheme` functions in -`std.uni` have used obsolete rules from earlier Unicode standards. - -This release brings grapheme breaking rules up to date with Unicode version 15. -This means Phobos functions now recognise extended pictogram sequences and -prepend characters. diff --git a/changelog/joiner_assert_message.dd b/changelog/joiner_assert_message.dd deleted file mode 100644 index a638ba623b3..00000000000 --- a/changelog/joiner_assert_message.dd +++ /dev/null @@ -1,8 +0,0 @@ -Better static assert messages for `std.algorithm.iteration.joiner` - -Up until now `filter` used a template constraint to check if the passed Data -could be used. If it were not, it was very tedious to figure out why. - -As the template constraint is not used to overload the symbol template -function, the constrains are move into static asserts with expressive error -messages. diff --git a/changelog/pop-grapheme.dd b/changelog/pop-grapheme.dd new file mode 100644 index 00000000000..48c93d6fc88 --- /dev/null +++ b/changelog/pop-grapheme.dd @@ -0,0 +1,38 @@ +Added popGrapheme function to std.uni. + +The new function is a cross between the existing $(REF graphemeStride, std, +uni) and $(REF decodeGrapheme, std, uni) functions. The new function both +supports `@safe pure nothrow @nogc` like `graphemeStride` does as long as you +don't rely on autodecoding (side node: `@nogc` support for `graphemeStride` +added in this release), and works with any non-array ranges just like +`decodeGrapheme` does. + +Example: + +------- +import std.uni; + +// Two Union Jacks of the Great Britain in each +string s = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; +wstring ws = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; +dstring ds = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; + +// String pop length in code units, not points. +assert(s.popGrapheme() == 8); +assert(ws.popGrapheme() == 4); +assert(ds.popGrapheme() == 2); + +assert(s == "\U0001F1EC\U0001F1E7"); +assert(ws == "\U0001F1EC\U0001F1E7"); +assert(ds == "\U0001F1EC\U0001F1E7"); + +import std.algorithm.comparison : equal; +import std.algorithm.iteration : filter; + +// Also works for non-random access ranges as long as the +// character type is 32-bit. +auto testPiece = "\r\nhello!"d.filter!(x => !x.isAlpha); +// Windows-style line ending is two code point in a single grapheme. +assert(testPiece.popGrapheme() == 2); +assert(testPiece.equal("!"d)); +------- diff --git a/changelog/sort_assert_messaged.dd b/changelog/sort_assert_messaged.dd deleted file mode 100644 index c80f33f7abd..00000000000 --- a/changelog/sort_assert_messaged.dd +++ /dev/null @@ -1,8 +0,0 @@ -Better static assert messages for `std.algorithm.sorting.sort` - -Up until now `sort` used a template constraint to check if the passed Range -could be used. If it were not, it was very tedious to figure out why. - -As the template constraint is not used to overload the symbol template -function, the constrains are move into static asserts with expressive error -messages. diff --git a/changelog/unicode-16.dd b/changelog/unicode-16.dd new file mode 100644 index 00000000000..84455fb93fe --- /dev/null +++ b/changelog/unicode-16.dd @@ -0,0 +1,16 @@ +std.uni has been upgraded from Unicode 15.1.0 to 16.0.0 + +This Unicode update was released September 10, 2024, and adds new blocks with characters. +See: https://www.unicode.org/versions/Unicode16.0.0/ + +``` +import std; + +void main() +{ + const alphaCount = iota(0, dchar.max).filter!(std.uni.isAlpha).walkLength; + writeln(alphaCount); + // formerly: 138387 + // now: 142759 +} +``` diff --git a/dub.sdl b/dub.sdl deleted file mode 100644 index bcaf2ef06ca..00000000000 --- a/dub.sdl +++ /dev/null @@ -1,55 +0,0 @@ -name "phobos" -license "BSL-1.0" -description "D Standard Library" -authors "DLang Community" -copyright "Copyright © 1999-2018, The D Language Foundation" - -targetType "library" -sourcePaths "std" "etc" -targetPath "generated" - -subPackage { - name "checkedint" - targetType "library" - preGenerateCommands `rdmd --eval=' - auto pkgDir = environment.get("DUB_PACKAGE_DIR"); - auto destDir = pkgDir.buildPath("source", "stdx"); - mkdirRecurse(destDir); - pkgDir.buildPath("std", "checkedint.d") - .readText - .replace("std.checkedint", "stdx.checkedint") - .toFile(destDir.buildPath("checkedint.d"));'` - sourceFiles "source/stdx/checkedint.d" - importPaths "source" -} - -// This meta package is needed because dub searches for the source files _before_ it evaluates preGenerateCommands -// However, it does run its dependencies _before_ searching through its source paths -subPackage { - name "allocator-generator" - targetType "none" - preGenerateCommands `rdmd --eval=' - auto pkgDir = environment.get("DUB_PACKAGE_DIR"); - auto destDir = pkgDir.buildPath("source", "stdx", "allocator"); - auto srcDir = pkgDir.buildPath("std", "experimental", "allocator"); - foreach (file; srcDir.dirEntries("*.d", SpanMode.depth)) { - auto destFile = file.replace(srcDir, destDir); - destFile.dirName.mkdirRecurse; - file.readText.replace("std.experimental.allocator", "stdx.allocator") - .replace("std.conv", "stdx.allocator.conv") - .toFile(destFile); - } - pkgDir.buildPath("std", "conv.d") - .readText - .replace("std.conv", "stdx.allocator.conv") - .toFile(destDir.buildPath("conv.d")); - '` -} - -subPackage { - name "allocator" - targetType "library" - dependency "phobos:allocator-generator" version="*" - sourcePaths "source/stdx/allocator" - importPaths "source" -} diff --git a/etc/c/odbc/sql.d b/etc/c/odbc/sql.d index 750377e8b46..c931de2245b 100644 --- a/etc/c/odbc/sql.d +++ b/etc/c/odbc/sql.d @@ -1,16 +1,441 @@ -// @@@DEPRECATED_2.106@@@ - /** -$(RED Warning: - This module is deprecated. It will be removed in 2.106. - Use `core.sys.windows.sql` instead.) + * Windows API header module + * + * Translated from MinGW Windows headers + * + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) + * Source: $(PHOBOSSRC etc/c/odbc/_sql.d) Declarations for interfacing with the ODBC library. See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference, - ODBC API Reference on MSN Online) + ODBC API Reference on MSDN) */ -deprecated("Import core.sys.windows.sql instead") module etc.c.odbc.sql; -public import core.sys.windows.sql; +public import etc.c.odbc.sqltypes; + +enum ODBCVER = 0x0351; + +enum SQL_ACCESSIBLE_PROCEDURES=20; +enum SQL_ACCESSIBLE_TABLES=19; +enum SQL_ALL_TYPES=0; +enum SQL_ALTER_TABLE=86; +enum SQL_API_SQLALLOCCONNECT=1; +enum SQL_API_SQLALLOCENV=2; +enum SQL_API_SQLALLOCSTMT=3; +enum SQL_API_SQLBINDCOL=4; +enum SQL_API_SQLCANCEL=5; +enum SQL_API_SQLCOLUMNS=40; +enum SQL_API_SQLCONNECT=7; +enum SQL_API_SQLDATASOURCES=57; +enum SQL_API_SQLDESCRIBECOL=8; +enum SQL_API_SQLDISCONNECT=9; +enum SQL_API_SQLERROR=10; +enum SQL_API_SQLEXECDIRECT=11; +enum SQL_API_SQLEXECUTE=12; +enum SQL_API_SQLFETCH=13; +enum SQL_API_SQLFREECONNECT=14; +enum SQL_API_SQLFREEENV=15; +enum SQL_API_SQLFREESTMT=16; +enum SQL_API_SQLGETCONNECTOPTION=42; +enum SQL_API_SQLGETCURSORNAME=17; +enum SQL_API_SQLGETDATA=43; +enum SQL_API_SQLGETFUNCTIONS=44; +enum SQL_API_SQLGETINFO=45; +enum SQL_API_SQLGETSTMTOPTION=46; +enum SQL_API_SQLGETTYPEINFO=47; +enum SQL_API_SQLNUMRESULTCOLS=18; +enum SQL_API_SQLPARAMDATA=48; +enum SQL_API_SQLPREPARE=19; +enum SQL_API_SQLPUTDATA=49; +enum SQL_API_SQLROWCOUNT=20; +enum SQL_API_SQLSETCONNECTOPTION=50; +enum SQL_API_SQLSETCURSORNAME=21; +enum SQL_API_SQLSETPARAM=22; +enum SQL_API_SQLSETSTMTOPTION=51; +enum SQL_API_SQLSPECIALCOLUMNS=52; +enum SQL_API_SQLSTATISTICS=53; +enum SQL_API_SQLTABLES=54; +enum SQL_API_SQLTRANSACT=23; + +enum SQL_CB_DELETE=0; +enum SQL_CB_CLOSE=1; +enum SQL_CB_PRESERVE=2; + +enum SQL_CHAR=1; +enum SQL_CLOSE=0; +enum SQL_COMMIT=0; +enum SQL_CURSOR_COMMIT_BEHAVIOR=23; +enum SQL_DATA_AT_EXEC=-2; +enum SQL_DATA_SOURCE_NAME=2; +enum SQL_DATA_SOURCE_READ_ONLY=25; +enum SQL_DBMS_NAME=17; +enum SQL_DBMS_VER=18; +enum SQL_DECIMAL=3; +enum SQL_DEFAULT_TXN_ISOLATION=26; +enum SQL_DOUBLE=8; +enum SQL_DROP=1; +enum SQL_ERROR=-1; + +enum SQL_FD_FETCH_NEXT=1; +enum SQL_FD_FETCH_FIRST=2; +enum SQL_FD_FETCH_LAST=4; +enum SQL_FD_FETCH_PRIOR=8; +enum SQL_FD_FETCH_ABSOLUTE=16; +enum SQL_FD_FETCH_RELATIVE=32; + +enum SQL_FETCH_ABSOLUTE=5; +enum SQL_FETCH_DIRECTION=8; +enum SQL_FETCH_FIRST=2; +enum SQL_FETCH_LAST=3; +enum SQL_FETCH_NEXT=1; +enum SQL_FETCH_PRIOR=4; +enum SQL_FETCH_RELATIVE=6; +enum SQL_FLOAT=6; +enum SQL_GD_ANY_COLUMN=1; +enum SQL_GD_ANY_ORDER=2; +enum SQL_GETDATA_EXTENSIONS=81; +enum SQL_IC_LOWER=2; +enum SQL_IC_MIXED=4; +enum SQL_IC_SENSITIVE=3; +enum SQL_IC_UPPER=1; +enum SQL_IDENTIFIER_CASE=28; +enum SQL_IDENTIFIER_QUOTE_CHAR=29; + +enum SQL_INDEX_ALL=1; +enum SQL_INDEX_CLUSTERED=1; +enum SQL_INDEX_HASHED=2; +enum SQL_INDEX_OTHER=3; +enum SQL_INDEX_UNIQUE=0; + +enum SQL_INTEGER=4; +enum SQL_INTEGRITY=73; +enum SQL_INVALID_HANDLE=-2; + +enum SQL_MAX_CATALOG_NAME_LEN=34; +enum SQL_MAX_COLUMN_NAME_LEN=30; +enum SQL_MAX_COLUMNS_IN_GROUP_BY=97; +enum SQL_MAX_COLUMNS_IN_INDEX=98; +enum SQL_MAX_COLUMNS_IN_ORDER_BY=99; +enum SQL_MAX_COLUMNS_IN_SELECT=100; +enum SQL_MAX_COLUMNS_IN_TABLE=101; +enum SQL_MAX_CURSOR_NAME_LEN=31; +enum SQL_MAX_INDEX_SIZE=102; +enum SQL_MAX_MESSAGE_LENGTH=512; +enum SQL_MAX_ROW_SIZE=104; +enum SQL_MAX_SCHEMA_NAME_LEN=32; +enum SQL_MAX_STATEMENT_LEN=105; +enum SQL_MAX_TABLE_NAME_LEN=35; +enum SQL_MAX_TABLES_IN_SELECT=106; +enum SQL_MAX_USER_NAME_LEN=107; + +enum SQL_MAXIMUM_CATALOG_NAME_LENGTH=SQL_MAX_CATALOG_NAME_LEN; +enum SQL_MAXIMUM_COLUMN_NAME_LENGTH=SQL_MAX_COLUMN_NAME_LEN; +enum SQL_MAXIMUM_COLUMNS_IN_GROUP_BY=SQL_MAX_COLUMNS_IN_GROUP_BY; +enum SQL_MAXIMUM_COLUMNS_IN_INDEX=SQL_MAX_COLUMNS_IN_INDEX; +enum SQL_MAXIMUM_COLUMNS_IN_ORDER_BY=SQL_MAX_COLUMNS_IN_ORDER_BY; +enum SQL_MAXIMUM_COLUMNS_IN_SELECT=SQL_MAX_COLUMNS_IN_SELECT; +enum SQL_MAXIMUM_CURSOR_NAME_LENGTH=SQL_MAX_CURSOR_NAME_LEN; +enum SQL_MAXIMUM_INDEX_SIZE=SQL_MAX_INDEX_SIZE; +enum SQL_MAXIMUM_ROW_SIZE=SQL_MAX_ROW_SIZE; +enum SQL_MAXIMUM_SCHEMA_NAME_LENGTH=SQL_MAX_SCHEMA_NAME_LEN; +enum SQL_MAXIMUM_STATEMENT_LENGTH=SQL_MAX_STATEMENT_LEN; +enum SQL_MAXIMUM_TABLES_IN_SELECT=SQL_MAX_TABLES_IN_SELECT; +enum SQL_MAXIMUM_USER_NAME_LENGTH=SQL_MAX_USER_NAME_LEN; + +enum SQL_NC_HIGH=0; +enum SQL_NC_LOW=1; +enum SQL_NEED_DATA=99; +enum SQL_NO_NULLS=0; +enum SQL_NTS=-3; +enum LONG SQL_NTSL=-3; +enum SQL_NULL_COLLATION=85; +enum SQL_NULL_DATA=-1; +enum SQL_NULL_HDBC=0; +enum SQL_NULL_HENV=0; +enum SQL_NULL_HSTMT=0; +enum SQL_NULLABLE=1; +enum SQL_NULLABLE_UNKNOWN=2; +enum SQL_NUMERIC=2; +enum SQL_ORDER_BY_COLUMNS_IN_SELECT=90; +enum SQL_PC_PSEUDO=2; +enum SQL_PC_UNKNOWN=0; +enum SQL_REAL=7; +enum SQL_RESET_PARAMS=3; +enum SQL_ROLLBACK=1; +enum SQL_SCCO_LOCK=2; +enum SQL_SCCO_OPT_ROWVER=4; +enum SQL_SCCO_OPT_VALUES=8; +enum SQL_SCCO_READ_ONLY=1; +enum SQL_SCOPE_CURROW=0; +enum SQL_SCOPE_SESSION=2; +enum SQL_SCOPE_TRANSACTION=1; +enum SQL_SCROLL_CONCURRENCY=43; +enum SQL_SEARCH_PATTERN_ESCAPE=14; +enum SQL_SERVER_NAME=13; +enum SQL_SMALLINT=5; +enum SQL_SPECIAL_CHARACTERS=94; +enum SQL_STILL_EXECUTING=2; +//MACRO #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) + +enum SQL_SUCCESS=0; +enum SQL_SUCCESS_WITH_INFO=1; + +enum SQL_TC_ALL=2; +enum SQL_TC_DDL_COMMIT=3; +enum SQL_TC_DDL_IGNORE=4; +enum SQL_TC_DML=1; +enum SQL_TC_NONE=0; + + +enum SQL_TXN_CAPABLE=46; +enum SQL_TXN_ISOLATION_OPTION=72; +enum SQL_TXN_READ_COMMITTED=2; +enum SQL_TXN_READ_UNCOMMITTED=1; +enum SQL_TXN_REPEATABLE_READ=4; +enum SQL_TXN_SERIALIZABLE=8; + +enum SQL_TRANSACTION_CAPABLE=SQL_TXN_CAPABLE; +enum SQL_TRANSACTION_ISOLATION_OPTION=SQL_TXN_ISOLATION_OPTION; +enum SQL_TRANSACTION_READ_COMMITTED=SQL_TXN_READ_COMMITTED; +enum SQL_TRANSACTION_READ_UNCOMMITTED=SQL_TXN_READ_UNCOMMITTED; +enum SQL_TRANSACTION_REPEATABLE_READ=SQL_TXN_REPEATABLE_READ; +enum SQL_TRANSACTION_SERIALIZABLE=SQL_TXN_SERIALIZABLE; + +enum SQL_UNBIND=2; +enum SQL_UNKNOWN_TYPE=0; +enum SQL_USER_NAME=47; +enum SQL_VARCHAR=12; + +static if (ODBCVER >= 0x0200) +{ +enum SQL_AT_ADD_COLUMN = 1; +enum SQL_AT_DROP_COLUMN = 2; +} + +static if (ODBCVER >= 0x0201) +{ +enum SQL_OJ_LEFT = 1; +enum SQL_OJ_RIGHT = 2; +enum SQL_OJ_FULL = 4; +enum SQL_OJ_NESTED = 8; +enum SQL_OJ_NOT_ORDERED = 16; +enum SQL_OJ_INNER = 32; +enum SQL_OJ_ALL_COMPARISON_OPS = 64; +} + +static if (ODBCVER >= 0x0300) +{ +enum SQL_AM_CONNECTION=1; +enum SQL_AM_NONE=0; +enum SQL_AM_STATEMENT=2; +enum SQL_API_SQLALLOCHANDLE=1001; +enum SQL_API_SQLBINDPARAM=1002; +enum SQL_API_SQLCLOSECURSOR=1003; +enum SQL_API_SQLCOLATTRIBUTE=6; +enum SQL_API_SQLCOPYDESC=1004; +enum SQL_API_SQLENDTRAN=1005; +enum SQL_API_SQLFETCHSCROLL=1021; +enum SQL_API_SQLFREEHANDLE=1006; +enum SQL_API_SQLGETCONNECTATTR=1007; +enum SQL_API_SQLGETDESCFIELD=1008; +enum SQL_API_SQLGETDESCREC=1009; +enum SQL_API_SQLGETDIAGFIELD=1010; +enum SQL_API_SQLGETDIAGREC=1011; +enum SQL_API_SQLGETENVATTR=1012; +enum SQL_API_SQLGETSTMTATTR=1014; +enum SQL_API_SQLSETCONNECTATTR=1016; +enum SQL_API_SQLSETDESCFIELD=1017; +enum SQL_API_SQLSETDESCREC=1018; +enum SQL_API_SQLSETENVATTR=1019; +enum SQL_API_SQLSETSTMTATTR=1020; +enum SQL_ARD_TYPE=-99; +enum SQL_AT_ADD_CONSTRAINT=8; +enum SQL_ATTR_APP_PARAM_DESC=10011; +enum SQL_ATTR_APP_ROW_DESC=10010; +enum SQL_ATTR_AUTO_IPD=10001; +enum SQL_ATTR_CURSOR_SCROLLABLE=-1; +enum SQL_ATTR_CURSOR_SENSITIVITY=-2; +enum SQL_ATTR_IMP_PARAM_DESC=10013; +enum SQL_ATTR_IMP_ROW_DESC=10012; +enum SQL_ATTR_METADATA_ID=10014; +enum SQL_ATTR_OUTPUT_NTS=10001; +enum SQL_CATALOG_NAME=10003; +enum SQL_CODE_DATE=1; +enum SQL_CODE_TIME=2; +enum SQL_CODE_TIMESTAMP=3; +enum SQL_COLLATION_SEQ=10004; +enum SQL_CURSOR_SENSITIVITY=10001; +enum SQL_DATE_LEN=10; +enum SQL_DATETIME=9; +enum SQL_DEFAULT=99; + +enum SQL_DESC_ALLOC_AUTO=1; +enum SQL_DESC_ALLOC_USER=2; +enum SQL_DESC_ALLOC_TYPE=1099; +enum SQL_DESC_COUNT=1001; +enum SQL_DESC_TYPE=1002; +enum SQL_DESC_LENGTH=1003; +enum SQL_DESC_OCTET_LENGTH_PTR=1004; +enum SQL_DESC_PRECISION=1005; +enum SQL_DESC_SCALE=1006; +enum SQL_DESC_DATETIME_INTERVAL_CODE=1007; +enum SQL_DESC_NULLABLE=1008; +enum SQL_DESC_INDICATOR_PTR=1009; +enum SQL_DESC_DATA_PTR=1010; +enum SQL_DESC_NAME=1011; +enum SQL_DESC_UNNAMED=1012; +enum SQL_DESC_OCTET_LENGTH=1013; + +enum SQL_DESCRIBE_PARAMETER=10002; + +enum SQL_DIAG_ALTER_DOMAIN=3; +enum SQL_DIAG_ALTER_TABLE=4; +enum SQL_DIAG_CALL=7; +enum SQL_DIAG_CLASS_ORIGIN=8; +enum SQL_DIAG_CONNECTION_NAME=10; +enum SQL_DIAG_CREATE_ASSERTION=6; +enum SQL_DIAG_CREATE_CHARACTER_SET=8; +enum SQL_DIAG_CREATE_COLLATION=10; +enum SQL_DIAG_CREATE_DOMAIN=23; +enum SQL_DIAG_CREATE_INDEX=-1; +enum SQL_DIAG_CREATE_SCHEMA=64; +enum SQL_DIAG_CREATE_TABLE=77; +enum SQL_DIAG_CREATE_TRANSLATION=79; +enum SQL_DIAG_CREATE_VIEW=84; +enum SQL_DIAG_DELETE_WHERE=19; +enum SQL_DIAG_DROP_ASSERTION=24; +enum SQL_DIAG_DROP_CHARACTER_SET=25; +enum SQL_DIAG_DROP_COLLATION=26; +enum SQL_DIAG_DROP_DOMAIN=27; +enum SQL_DIAG_DROP_INDEX=(-2); +enum SQL_DIAG_DROP_SCHEMA=31; +enum SQL_DIAG_DROP_TABLE=32; +enum SQL_DIAG_DROP_TRANSLATION=33; +enum SQL_DIAG_DROP_VIEW=36; +enum SQL_DIAG_DYNAMIC_DELETE_CURSOR=38; +enum SQL_DIAG_DYNAMIC_FUNCTION=7; +enum SQL_DIAG_DYNAMIC_FUNCTION_CODE=12; +enum SQL_DIAG_DYNAMIC_UPDATE_CURSOR=81; +enum SQL_DIAG_GRANT=48; +enum SQL_DIAG_INSERT=50; +enum SQL_DIAG_MESSAGE_TEXT=6; +enum SQL_DIAG_NATIVE=5; +enum SQL_DIAG_NUMBER=2; +enum SQL_DIAG_RETURNCODE=1; +enum SQL_DIAG_REVOKE=59; +enum SQL_DIAG_ROW_COUNT=3; +enum SQL_DIAG_SELECT_CURSOR=85; +enum SQL_DIAG_SERVER_NAME=11; +enum SQL_DIAG_SQLSTATE=4; +enum SQL_DIAG_SUBCLASS_ORIGIN=9; +enum SQL_DIAG_UNKNOWN_STATEMENT=0; +enum SQL_DIAG_UPDATE_WHERE=82; + +enum SQL_FALSE=0; +enum SQL_HANDLE_DBC=2; +enum SQL_HANDLE_DESC=4; +enum SQL_HANDLE_ENV=1; +enum SQL_HANDLE_STMT=3; +enum SQL_INSENSITIVE=1; +enum SQL_MAX_CONCURRENT_ACTIVITIES=1; +enum SQL_MAX_DRIVER_CONNECTIONS=0; +enum SQL_MAX_IDENTIFIER_LEN=10005; +enum SQL_MAXIMUM_CONCURRENT_ACTIVITIES=SQL_MAX_CONCURRENT_ACTIVITIES; +enum SQL_MAXIMUM_DRIVER_CONNECTIONS=SQL_MAX_DRIVER_CONNECTIONS; +enum SQL_MAXIMUM_IDENTIFIER_LENGTH=SQL_MAX_IDENTIFIER_LEN; +enum SQL_NAMED=0; +enum SQL_NO_DATA=100; +enum SQL_NONSCROLLABLE=0; +enum SQL_NULL_HANDLE=0L; +enum SQL_NULL_HDESC=0; +enum SQL_OJ_CAPABILITIES=115; +enum SQL_OUTER_JOIN_CAPABILITIES=SQL_OJ_CAPABILITIES; +enum SQL_PC_NON_PSEUDO=1; + +enum SQL_PRED_NONE=0; +enum SQL_PRED_CHAR=1; +enum SQL_PRED_BASIC=2; + +enum SQL_ROW_IDENTIFIER=1; +enum SQL_SCROLLABLE=1; +enum SQL_SENSITIVE=2; +enum SQL_TIME_LEN=8; +enum SQL_TIMESTAMP_LEN=19; +enum SQL_TRUE=1; +enum SQL_TYPE_DATE=91; +enum SQL_TYPE_TIME=92; +enum SQL_TYPE_TIMESTAMP=93; +enum SQL_UNNAMED=1; +enum SQL_UNSPECIFIED=0; +enum SQL_XOPEN_CLI_YEAR=10000; +}//#endif /* ODBCVER >= 0x0300 */ + +extern (System) { + deprecated { + SQLRETURN SQLAllocConnect(SQLHENV, SQLHDBC*); + SQLRETURN SQLAllocEnv(SQLHENV*); + SQLRETURN SQLAllocStmt(SQLHDBC, SQLHSTMT*); + SQLRETURN SQLError(SQLHENV, SQLHDBC, SQLHSTMT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLFreeConnect(SQLHDBC); + SQLRETURN SQLFreeEnv(SQLHENV); + SQLRETURN SQLSetParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN*); + SQLRETURN SQLGetConnectOption(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetStmtOption(SQLHSTMT, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLSetConnectOption(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetStmtOption(SQLHSTMT, SQLUSMALLINT, SQLROWCOUNT); + } + SQLRETURN SQLBindCol(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLCancel(SQLHSTMT); + SQLRETURN SQLConnect(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDescribeCol(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDisconnect(SQLHDBC); + SQLRETURN SQLExecDirect(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLExecute(SQLHSTMT); + SQLRETURN SQLFetch(SQLHSTMT); + SQLRETURN SQLFreeStmt(SQLHSTMT, SQLUSMALLINT); + SQLRETURN SQLGetCursorName(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLNumResultCols(SQLHSTMT, SQLSMALLINT*); + SQLRETURN SQLPrepare(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLRowCount(SQLHSTMT, SQLLEN*); + SQLRETURN SQLSetCursorName(SQLHSTMT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTransact(SQLHENV, SQLHDBC, SQLUSMALLINT); + SQLRETURN SQLColumns(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLGetData(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLGetFunctions(SQLHDBC, SQLUSMALLINT, SQLUSMALLINT*); + SQLRETURN SQLGetInfo(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetTypeInfo(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLParamData(SQLHSTMT, SQLPOINTER*); + SQLRETURN SQLPutData(SQLHSTMT, SQLPOINTER, SQLLEN); + SQLRETURN SQLSpecialColumns(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatistics(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTables(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDataSources(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + + static if (ODBCVER >= 0x0300) + { + SQLRETURN SQLAllocHandle(SQLSMALLINT, SQLHANDLE, SQLHANDLE*); + SQLRETURN SQLBindParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN*); + SQLRETURN SQLCloseCursor(SQLHSTMT); + SQLRETURN SQLColAttribute(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLCopyDesc(SQLHDESC, SQLHDESC); + SQLRETURN SQLEndTran(SQLSMALLINT, SQLHANDLE, SQLSMALLINT); + SQLRETURN SQLFetchScroll(SQLHSTMT, SQLSMALLINT, SQLROWOFFSET); + SQLRETURN SQLFreeHandle(SQLSMALLINT, SQLHANDLE); + SQLRETURN SQLGetConnectAttr(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescField(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescRec(SQLHDESC, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, + SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDiagField(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRec(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetEnvAttr(SQLHENV, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetStmtAttr(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetConnectAttr(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescField(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescRec(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLLEN, SQLSMALLINT, + SQLSMALLINT, SQLPOINTER, SQLLEN*, SQLLEN*); + SQLRETURN SQLSetEnvAttr(SQLHENV, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetStmtAttr(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + }/* (ODBCVER >= 0x0300) */ +} diff --git a/etc/c/odbc/sqlext.d b/etc/c/odbc/sqlext.d index 39a64aa00e6..7bec9eba271 100644 --- a/etc/c/odbc/sqlext.d +++ b/etc/c/odbc/sqlext.d @@ -1,16 +1,1306 @@ -// @@@DEPRECATED_2.106@@@ - /** -$(RED Warning: - This module is deprecated. It will be removed in 2.106. - Use `core.sys.windows.sqlext` instead.) - -Declarations for interfacing with the ODBC library. + * Windows API header module + * + * Translated from MinGW Windows headers + * + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) + * Source: $(PHOBOSSRC etc/c/odbc/_sqlext.d) See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference, - ODBC API Reference on MSN Online) + ODBC API Reference on MSDN) */ -deprecated("Import core.sys.windows.sqlext instead") module etc.c.odbc.sqlext; -public import core.sys.windows.sqlext; +/* Conversion notes: + The MinGW file was a horrible mess. All of the #defines were sorted alphabetically, + which is crazy. This file needs a lot of work. + In MinGW, sqlext #includes sqlucode, but sqlucode #includes sqlext, + creating a circular dependency! +*/ + +public import etc.c.odbc.sql; + +enum SQL_SPEC_MAJOR = 3; +enum SQL_SPEC_MINOR = 51; +const char[] SQL_SPEC_STRING = "03.51"; +enum SQL_ACCESS_MODE = 101; +enum SQL_ACTIVE_CONNECTIONS = 0; +enum SQL_ACTIVE_STATEMENTS = 1; + +enum SQL_DATE = 9; +enum SQL_TIME = 10; +enum SQL_SIGNED_OFFSET = -20; +enum SQL_TINYINT = -6; +enum SQL_TIMESTAMP = 11; +enum SQL_UNSIGNED_OFFSET = -22; + +enum SQL_ADD = 4; +enum SQL_ALL_EXCEPT_LIKE = 2; + +enum SQL_API_ALL_FUNCTIONS = 0; +enum SQL_API_SQLCOLATTRIBUTES = 6; +enum SQL_API_SQLDRIVERCONNECT = 41; +enum SQL_API_SQLBROWSECONNECT = 55; +enum SQL_API_SQLCOLUMNPRIVILEGES = 56; +enum SQL_API_SQLDESCRIBEPARAM = 58; +enum SQL_API_SQLEXTENDEDFETCH = 59; +enum SQL_API_SQLFOREIGNKEYS = 60; +enum SQL_API_SQLMORERESULTS = 61; +enum SQL_API_SQLNATIVESQL = 62; +enum SQL_API_SQLNUMPARAMS = 63; +enum SQL_API_SQLPARAMOPTIONS = 64; +enum SQL_API_SQLPRIMARYKEYS = 65; +enum SQL_API_SQLPROCEDURECOLUMNS = 66; +enum SQL_API_SQLPROCEDURES = 67; +enum SQL_API_SQLSETPOS = 68; +enum SQL_API_SQLSETSCROLLOPTIONS = 69; +enum SQL_API_SQLTABLEPRIVILEGES = 70; +enum SQL_API_SQLDRIVERS = 71; +enum SQL_API_SQLBINDPARAMETER = 72; +enum SQL_API_LOADBYORDINAL = 199; + +enum SQL_ASYNC_ENABLE = 4; +enum SQL_ASYNC_ENABLE_OFF = 0UL; +enum SQL_ASYNC_ENABLE_ON = 1UL; +enum SQL_ASYNC_ENABLE_DEFAULT = SQL_ASYNC_ENABLE_OFF; + +enum SQL_ATTR_CONNECTION_DEAD = 1209; +enum SQL_ATTR_READONLY = 0; +enum SQL_ATTR_READWRITE_UNKNOWN = 2; +enum SQL_ATTR_WRITE = 1; + +enum SQL_AUTOCOMMIT = 102; +enum SQL_AUTOCOMMIT_OFF = 0UL; +enum SQL_AUTOCOMMIT_ON = 1UL; +enum SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON; +enum SQL_BEST_ROWID = 1; +enum SQL_BIGINT = -5; +enum SQL_BINARY = -2; +enum SQL_BIND_BY_COLUMN = 0UL; +enum SQL_BIND_TYPE = 5; +enum SQL_BIND_TYPE_DEFAULT = SQL_BIND_BY_COLUMN; +enum SQL_BIT = -7; + +enum SQL_BOOKMARK_PERSISTENCE = 82; + +// for BOOKMARK_PERSISTENCE +enum SQL_BP_CLOSE = 1; +enum SQL_BP_DELETE = 2; +enum SQL_BP_DROP = 4; +enum SQL_BP_TRANSACTION = 8; +enum SQL_BP_UPDATE = 16; +enum SQL_BP_OTHER_HSTMT = 32; +enum SQL_BP_SCROLL = 64; + +enum SQL_C_BINARY = SQL_BINARY; +enum SQL_C_BIT = SQL_BIT; +enum SQL_C_CHAR = SQL_CHAR; +enum SQL_C_DATE = SQL_DATE; +enum SQL_C_DOUBLE = SQL_DOUBLE; +enum SQL_C_FLOAT = SQL_REAL; +enum SQL_C_LONG = SQL_INTEGER; +enum SQL_C_SHORT = SQL_SMALLINT; +enum SQL_C_SLONG = SQL_C_LONG+SQL_SIGNED_OFFSET; +enum SQL_C_SSHORT = SQL_C_SHORT+SQL_SIGNED_OFFSET; +enum SQL_C_STINYINT = SQL_TINYINT+SQL_SIGNED_OFFSET; +enum SQL_C_TIME = SQL_TIME; +enum SQL_C_TIMESTAMP = SQL_TIMESTAMP; +enum SQL_C_TINYINT = SQL_TINYINT; +enum SQL_C_ULONG = SQL_C_LONG+SQL_UNSIGNED_OFFSET; +enum SQL_C_USHORT = SQL_C_SHORT+SQL_UNSIGNED_OFFSET; +enum SQL_C_UTINYINT = SQL_TINYINT+SQL_UNSIGNED_OFFSET; +enum SQL_C_BOOKMARK = SQL_C_ULONG; +enum SQL_C_DEFAULT = 99; + +enum SQL_CASCADE = 0; +enum SQL_CB_NON_NULL = 1; +enum SQL_CB_NULL = 0; +deprecated { +enum SQL_CC_CLOSE = SQL_CB_CLOSE;/* deprecated */ +enum SQL_CC_DELETE = SQL_CB_DELETE;/* deprecated */ +enum SQL_CC_PRESERVE = SQL_CB_PRESERVE;/* deprecated */ +} +enum SQL_CD_FALSE = 0L; +enum SQL_CD_TRUE = 1L; + +enum SQL_CN_ANY = 2; +enum SQL_CN_DIFFERENT = 1; +enum SQL_CN_NONE = 0; + +enum SQL_COLUMN_ALIAS = 87; + +enum SQL_COLUMN_COUNT = 0; +enum SQL_COLUMN_NAME = 1; +enum SQL_COLUMN_DISPLAY_SIZE = 6; +enum SQL_COLUMN_LABEL = 18; +enum SQL_COLUMN_LENGTH = 3; +enum SQL_COLUMN_MONEY = 9; +enum SQL_COLUMN_NULLABLE = 7; +enum SQL_COLUMN_OWNER_NAME = 16; +enum SQL_COLUMN_PRECISION = 4; +enum SQL_COLUMN_QUALIFIER_NAME = 17; +enum SQL_COLUMN_SCALE = 5; +enum SQL_COLUMN_UNSIGNED = 8; +enum SQL_COLUMN_UPDATABLE = 10; +enum SQL_COLUMN_AUTO_INCREMENT = 11; +enum SQL_COLUMN_CASE_SENSITIVE = 12; +enum SQL_COLUMN_SEARCHABLE = 13; +enum SQL_COLUMN_TYPE = 2; +enum SQL_COLUMN_TYPE_NAME = 14; +enum SQL_COLUMN_TABLE_NAME = 15; + +enum SQL_CONCAT_NULL_BEHAVIOR = 22; + +enum SQL_CONCUR_READ_ONLY = 1; +enum SQL_CONCUR_DEFAULT = SQL_CONCUR_READ_ONLY; +enum SQL_CONCUR_LOCK = 2; +enum SQL_CONCUR_ROWVER = 3; +enum SQL_CONCUR_TIMESTAMP = SQL_CONCUR_ROWVER;/* deprecated */ +enum SQL_CONCUR_VALUES = 4; + +enum SQL_CONCURRENCY = 7; +enum SQL_CONVERT_BIGINT = 53; +enum SQL_CONVERT_BINARY = 54; +enum SQL_CONVERT_BIT = 55; +enum SQL_CONVERT_CHAR = 56; +enum SQL_CONVERT_DATE = 57; +enum SQL_CONVERT_DECIMAL = 58; +enum SQL_CONVERT_DOUBLE = 59; +enum SQL_CONVERT_FLOAT = 60; +enum SQL_CONVERT_FUNCTIONS = 48; +enum SQL_CONVERT_INTEGER = 61; +enum SQL_CONVERT_LONGVARBINARY = 71; +enum SQL_CONVERT_LONGVARCHAR = 62; +enum SQL_CONVERT_NUMERIC = 63; +enum SQL_CONVERT_REAL = 64; +enum SQL_CONVERT_SMALLINT = 65; +enum SQL_CONVERT_TIME = 66; +enum SQL_CONVERT_TIMESTAMP = 67; +enum SQL_CONVERT_TINYINT = 68; +enum SQL_CONVERT_VARBINARY = 69; +enum SQL_CONVERT_VARCHAR = 70; +enum SQL_CORRELATION_NAME = 74; +enum SQL_CR_CLOSE = SQL_CB_CLOSE;/* deprecated */ +enum SQL_CR_DELETE = SQL_CB_DELETE;/* deprecated */ +enum SQL_CR_PRESERVE = SQL_CB_PRESERVE;/* deprecated */ + +enum : ULONG { + SQL_CUR_USE_IF_NEEDED = 0, + SQL_CUR_USE_ODBC, + SQL_CUR_USE_DRIVER, + SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER +} + +enum SQL_CURRENT_QUALIFIER = 109; +enum SQL_CURSOR_DYNAMIC = 2UL; +enum SQL_CURSOR_FORWARD_ONLY = 0UL; +enum SQL_CURSOR_KEYSET_DRIVEN = 1UL; +enum SQL_CURSOR_ROLLBACK_BEHAVIOR = 24; +enum SQL_CURSOR_STATIC = 3UL; +enum SQL_CURSOR_TYPE = 6; +enum SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY; + +enum SQL_CV_CASCADED = 0x00000004L; +enum SQL_CV_CHECK_OPTION = 0x00000002L; +enum SQL_CV_CREATE_VIEW = 0x00000001L; +enum SQL_CV_LOCAL = 0x00000008L; +enum SQL_CVT_BIGINT = 0x00004000L; +enum SQL_CVT_BINARY = 0x00000400L; +enum SQL_CVT_BIT = 0x00001000L; +enum SQL_CVT_CHAR = 0x00000001L; +enum SQL_CVT_DATE = 0x00008000L; +enum SQL_CVT_DECIMAL = 0x00000004L; +enum SQL_CVT_DOUBLE = 0x00000080L; +enum SQL_CVT_FLOAT = 0x00000020L; +enum SQL_CVT_INTEGER = 0x00000008L; +enum SQL_CVT_LONGVARBINARY = 0x00040000L; +enum SQL_CVT_LONGVARCHAR = 0x00000200L; +enum SQL_CVT_NUMERIC = 0x00000002L; +enum SQL_CVT_REAL = 0x00000040L; +enum SQL_CVT_SMALLINT = 0x00000010L; +enum SQL_CVT_TIME = 0x00010000L; +enum SQL_CVT_TIMESTAMP = 0x00020000L; +enum SQL_CVT_TINYINT = 0x00002000L; +enum SQL_CVT_VARBINARY = 0x00000800L; +enum SQL_CVT_VARCHAR = 0x00000100L; +enum SQL_DATABASE_NAME = 16;/* deprecated */ + +enum SQL_DEFAULT_PARAM = -5; +enum SQL_DELETE = 3; + +enum SQL_DRIVER_COMPLETE = 1; +enum SQL_DRIVER_COMPLETE_REQUIRED = 3; +enum SQL_DRIVER_HDBC = 3; +enum SQL_DRIVER_HENV = 4; +enum SQL_DRIVER_HLIB = 76; +enum SQL_DRIVER_HSTMT = 5; +enum SQL_DRIVER_NAME = 6; +enum SQL_DRIVER_NOPROMPT = 0; +enum SQL_DRIVER_ODBC_VER = 77; +enum SQL_DRIVER_PROMPT = 2; +enum SQL_DRIVER_VER = 7; + +enum SQL_DTC_ENLIST_EXPENSIVE = 1; +enum SQL_DTC_UNENLIST_EXPENSIVE = 2; +enum SQL_DTC_TRANSITION_COST = 1750; +enum SQL_ENSURE = 1; +enum SQL_ENTIRE_ROWSET = 0; +enum SQL_EXPRESSIONS_IN_ORDERBY = 27; +enum SQL_FD_FETCH_BOOKMARK = 128; +enum SQL_FD_FETCH_PREV = SQL_FD_FETCH_PRIOR;/* deprecated */ +enum SQL_FD_FETCH_RESUME = 64; +enum SQL_FETCH_BOOKMARK = 8; +enum SQL_FETCH_PREV = SQL_FETCH_PRIOR;/* deprecated */ +enum SQL_FETCH_RESUME = 7;/* deprecated */ + +enum SQL_FILE_NOT_SUPPORTED = 0x0000; +enum SQL_FILE_TABLE = 0x0001; +enum SQL_FILE_QUALIFIER = 0x0002; +enum SQL_FILE_CATALOG = SQL_FILE_QUALIFIER; +enum SQL_FILE_USAGE = 84; + +enum SQL_FN_CVT_CONVERT = 0x00000001L; +enum SQL_FN_NUM_ABS = 0x00000001L; +enum SQL_FN_NUM_ACOS = 0x00000002L; +enum SQL_FN_NUM_ASIN = 0x00000004L; +enum SQL_FN_NUM_ATAN = 0x00000008L; +enum SQL_FN_NUM_ATAN2 = 0x00000010L; +enum SQL_FN_NUM_CEILING = 0x00000020L; +enum SQL_FN_NUM_COS = 0x00000040L; +enum SQL_FN_NUM_COT = 0x00000080L; +enum SQL_FN_NUM_DEGREES = 0x00040000L; +enum SQL_FN_NUM_EXP = 0x00000100L; +enum SQL_FN_NUM_FLOOR = 0x00000200L; +enum SQL_FN_NUM_LOG = 0x00000400L; +enum SQL_FN_NUM_LOG10 = 0x00080000L; +enum SQL_FN_NUM_MOD = 0x00000800L; +enum SQL_FN_NUM_PI = 0x00010000L; +enum SQL_FN_NUM_POWER = 0x00100000L; +enum SQL_FN_NUM_RADIANS = 0x00200000L; +enum SQL_FN_NUM_RAND = 0x00020000L; +enum SQL_FN_NUM_ROUND = 0x00400000L; +enum SQL_FN_NUM_SIGN = 0x00001000L; +enum SQL_FN_NUM_SIN = 0x00002000L; +enum SQL_FN_NUM_SQRT = 0x00004000L; +enum SQL_FN_NUM_TAN = 0x00008000L; +enum SQL_FN_NUM_TRUNCATE = 0x00800000L; +enum SQL_FN_STR_ASCII = 0x00002000L; +enum SQL_FN_STR_CHAR = 0x00004000L; +enum SQL_FN_STR_CONCAT = 0x00000001L; +enum SQL_FN_STR_DIFFERENCE = 0x00008000L; +enum SQL_FN_STR_INSERT = 0x00000002L; +enum SQL_FN_STR_LCASE = 0x00000040L; +enum SQL_FN_STR_LEFT = 0x00000004L; +enum SQL_FN_STR_LENGTH = 0x00000010L; +enum SQL_FN_STR_LOCATE = 0x00000020L; +enum SQL_FN_STR_LOCATE_2 = 0x00010000L; +enum SQL_FN_STR_LTRIM = 0x00000008L; +enum SQL_FN_STR_REPEAT = 0x00000080L; +enum SQL_FN_STR_REPLACE = 0x00000100L; +enum SQL_FN_STR_RIGHT = 0x00000200L; +enum SQL_FN_STR_RTRIM = 0x00000400L; +enum SQL_FN_STR_SOUNDEX = 0x00020000L; +enum SQL_FN_STR_SPACE = 0x00040000L; +enum SQL_FN_STR_SUBSTRING = 0x00000800L; +enum SQL_FN_STR_UCASE = 0x00001000L; +enum SQL_FN_SYS_DBNAME = 0x00000002L; +enum SQL_FN_SYS_IFNULL = 0x00000004L; +enum SQL_FN_SYS_USERNAME = 0x00000001L; +enum SQL_FN_TD_CURDATE = 0x00000002L; +enum SQL_FN_TD_CURTIME = 0x00000200L; +enum SQL_FN_TD_DAYNAME = 0x00008000L; +enum SQL_FN_TD_DAYOFMONTH = 0x00000004L; +enum SQL_FN_TD_DAYOFWEEK = 0x00000008L; +enum SQL_FN_TD_DAYOFYEAR = 0x00000010L; +enum SQL_FN_TD_HOUR = 0x00000400L; +enum SQL_FN_TD_MINUTE = 0x00000800L; +enum SQL_FN_TD_MONTH = 0x00000020L; +enum SQL_FN_TD_MONTHNAME = 0x00010000L; +enum SQL_FN_TD_NOW = 0x00000001L; +enum SQL_FN_TD_QUARTER = 0x00000040L; +enum SQL_FN_TD_SECOND = 0x00001000L; +enum SQL_FN_TD_TIMESTAMPADD = 0x00002000L; +enum SQL_FN_TD_TIMESTAMPDIFF = 0x00004000L; +enum SQL_FN_TD_WEEK = 0x00000080L; +enum SQL_FN_TD_YEAR = 0x00000100L; +enum SQL_FN_TSI_DAY = 0x00000010L; +enum SQL_FN_TSI_FRAC_SECOND = 0x00000001L; +enum SQL_FN_TSI_HOUR = 0x00000008L; +enum SQL_FN_TSI_MINUTE = 0x00000004L; +enum SQL_FN_TSI_MONTH = 0x00000040L; +enum SQL_FN_TSI_QUARTER = 0x00000080L; +enum SQL_FN_TSI_SECOND = 0x00000002L; +enum SQL_FN_TSI_WEEK = 0x00000020L; +enum SQL_FN_TSI_YEAR = 0x00000100L; +enum SQL_GB_GROUP_BY_CONTAINS_SELECT = 2; +enum SQL_GB_GROUP_BY_EQUALS_SELECT = 1; +enum SQL_GB_NO_RELATION = 3; +enum SQL_GB_NOT_SUPPORTED = 0; +enum SQL_GD_BLOCK = 4; +enum SQL_GD_BOUND = 8; +enum SQL_GET_BOOKMARK = 13; +enum SQL_GROUP_BY = 88; +enum SQL_IGNORE = -6; +enum SQL_INFO_FIRST = 0; +enum SQL_KEYSET_SIZE = 8; +enum SQL_KEYSET_SIZE_DEFAULT = 0UL; +enum SQL_KEYWORDS = 89; +enum SQL_LCK_EXCLUSIVE = 2; +enum SQL_LCK_NO_CHANGE = 1; +enum SQL_LCK_UNLOCK = 4; + +enum SQL_LEN_BINARY_ATTR_OFFSET = -100; +enum SQL_LEN_DATA_AT_EXEC_OFFSET = -100; +//MACRO #define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET) +//MACRO #define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET) + +enum SQL_LIKE_ESCAPE_CLAUSE = 113; +enum SQL_LIKE_ONLY = 1; +enum SQL_LOCK_EXCLUSIVE = 1; +enum SQL_LOCK_NO_CHANGE = 0; +enum SQL_LOCK_TYPES = 78; +enum SQL_LOCK_UNLOCK = 2; +enum SQL_LOGIN_TIMEOUT = 103; +enum SQL_LOGIN_TIMEOUT_DEFAULT = 15UL; +enum SQL_LONGVARBINARY = -4; +enum SQL_LONGVARCHAR = -1; +enum SQL_MAX_BINARY_LITERAL_LEN = 112; +enum SQL_MAX_CHAR_LITERAL_LEN = 108; +enum SQL_MAX_DSN_LENGTH = 32; +enum SQL_MAX_LENGTH = 3; +enum SQL_MAX_LENGTH_DEFAULT = 0UL; +enum SQL_MAX_OPTION_STRING_LENGTH = 256; +enum SQL_MAX_OWNER_NAME_LEN = 32; +enum SQL_MAX_PROCEDURE_NAME_LEN = 33; +enum SQL_MAX_QUALIFIER_NAME_LEN = 34; +enum SQL_MAX_ROW_SIZE_INCLUDES_LONG = 103; +enum SQL_MAX_ROWS = 1; +enum SQL_MAX_ROWS_DEFAULT = 0UL; + +enum SQL_MODE_READ_WRITE = 0UL; +enum SQL_MODE_READ_ONLY = 1UL; +enum SQL_MODE_DEFAULT = SQL_MODE_READ_WRITE; + +enum SQL_MULT_RESULT_SETS = 36; +enum SQL_MULTIPLE_ACTIVE_TXN = 37; +enum SQL_NC_END = 0x0004; +enum SQL_NC_START = 0x0002; +enum SQL_NEED_LONG_DATA_LEN = 111; +enum SQL_NNC_NON_NULL = 0x0001; +enum SQL_NNC_NULL = 0x0000; +enum SQL_NO_TOTAL = -4; +enum SQL_NON_NULLABLE_COLUMNS = 75; + +enum SQL_NOSCAN_OFF = 0UL; +enum SQL_NOSCAN_ON = 1UL; +enum SQL_NOSCAN = 2; +enum SQL_NOSCAN_DEFAULT = SQL_NOSCAN_OFF; + +enum SQL_NUMERIC_FUNCTIONS = 49; +enum SQL_OAC_LEVEL1 = 0x0001; +enum SQL_OAC_LEVEL2 = 0x0002; +enum SQL_OAC_NONE = 0x0000; +enum SQL_ODBC_API_CONFORMANCE = 9; +enum SQL_ODBC_CURSORS = 110; +enum SQL_ODBC_SAG_CLI_CONFORMANCE = 12; +enum SQL_ODBC_SQL_CONFORMANCE = 15; +enum SQL_ODBC_SQL_OPT_IEF = 73; +enum SQL_ODBC_VER = 10; +enum SQL_OPT_TRACE = 104; + +enum SQL_OPT_TRACE_FILE_DEFAULT = "\\SQL.LOG"; +enum SQL_OPT_TRACE_OFF = 0UL; +enum SQL_OPT_TRACE_DEFAULT = SQL_OPT_TRACE_OFF; +enum SQL_OPT_TRACE_ON = 1UL; + +enum SQL_OPT_TRACEFILE = 105; +enum SQL_OSC_CORE = 1; +enum SQL_OSC_EXTENDED = 2; +enum SQL_OSC_MINIMUM = 0; +enum SQL_OSCC_COMPLIANT = 1; +enum SQL_OSCC_NOT_COMPLIANT = 0; +enum SQL_OU_DML_STATEMENTS = 1; +enum SQL_OU_INDEX_DEFINITION = 8; +enum SQL_OU_PRIVILEGE_DEFINITION = 16; +enum SQL_OU_PROCEDURE_INVOCATION = 2; +enum SQL_OU_TABLE_DEFINITION = 4; +enum SQL_OUTER_JOINS = 38; +enum SQL_OWNER_TERM = 39; +enum SQL_OWNER_USAGE = 91; +enum SQL_PACKET_SIZE = 112; +enum SQL_PARAM_INPUT = 1; +enum SQL_PARAM_INPUT_OUTPUT = 2; +enum SQL_PARAM_OUTPUT = 4; +enum SQL_PARAM_TYPE_DEFAULT = SQL_PARAM_INPUT_OUTPUT; +enum SQL_PARAM_TYPE_UNKNOWN = 0; +enum SQL_PC_NOT_PSEUDO = 1; +enum SQL_POS_ADD = 16; +enum SQL_POS_DELETE = 8; +enum SQL_POS_OPERATIONS = 79; +enum SQL_POS_POSITION = 1; +enum SQL_POS_REFRESH = 2; +enum SQL_POS_UPDATE = 4; +enum SQL_POSITION = 0; +enum SQL_POSITIONED_STATEMENTS = 80; +enum SQL_PROCEDURE_TERM = 40; +enum SQL_PROCEDURES = 21; +enum SQL_PS_POSITIONED_DELETE = 1; +enum SQL_PS_POSITIONED_UPDATE = 2; +enum SQL_PS_SELECT_FOR_UPDATE = 4; +enum SQL_PT_FUNCTION = 2; +enum SQL_PT_PROCEDURE = 1; +enum SQL_PT_UNKNOWN = 0; +enum SQL_QL_END = 0x0002; +enum SQL_QL_START = 0x0001; +enum SQL_QU_DML_STATEMENTS = 1; +enum SQL_QU_INDEX_DEFINITION = 8; +enum SQL_QU_PRIVILEGE_DEFINITION = 16; +enum SQL_QU_PROCEDURE_INVOCATION = 2; +enum SQL_QU_TABLE_DEFINITION = 4; +enum SQL_QUALIFIER_LOCATION = 114; +enum SQL_QUALIFIER_NAME_SEPARATOR = 41; +enum SQL_QUALIFIER_TERM = 42; +enum SQL_QUALIFIER_USAGE = 92; +enum SQL_QUERY_TIMEOUT = 0; +enum SQL_QUERY_TIMEOUT_DEFAULT = 0UL; +enum SQL_QUICK = 0; +enum SQL_QUIET_MODE = 111; +enum SQL_QUOTED_IDENTIFIER_CASE = 93; + +enum SQL_RD_OFF = 0UL; +enum SQL_RD_ON = 1UL; +enum SQL_RD_DEFAULT = SQL_RD_ON; + +enum SQL_REFRESH = 1; +enum SQL_RESTRICT = 1; +enum SQL_RESULT_COL = 3; +enum SQL_RETRIEVE_DATA = 11; +enum SQL_RETURN_VALUE = 5; +enum SQL_ROW_ADDED = 4; +enum SQL_ROW_DELETED = 1; +enum SQL_ROW_ERROR = 5; +enum SQL_ROW_NOROW = 3; +enum SQL_ROW_NUMBER = 14; +enum SQL_ROW_SUCCESS = 0; +enum SQL_ROW_UPDATED = 2; +enum SQL_ROW_UPDATES = 11; +enum SQL_ROWSET_SIZE = 9; +enum SQL_ROWSET_SIZE_DEFAULT = 1UL; +enum SQL_ROWVER = 2; +enum SQL_SC_NON_UNIQUE = 0UL; +enum SQL_SC_TRY_UNIQUE = 1UL; +enum SQL_SC_UNIQUE = 2UL; +enum SQL_SCCO_OPT_TIMESTAMP = SQL_SCCO_OPT_ROWVER;/* deprecated */ +enum SQL_SCROLL_DYNAMIC = -2L;/* deprecated */ +enum SQL_SCROLL_FORWARD_ONLY = 0L;/* deprecated */ +enum SQL_SCROLL_KEYSET_DRIVEN = -1L;/* deprecated */ +enum SQL_SCROLL_OPTIONS = 44; +enum SQL_SCROLL_STATIC = -3L;/* deprecated */ +enum SQL_SEARCHABLE = 3; +enum SQL_SET_NULL = 2; +enum SQL_SETPARAM_VALUE_MAX = -1L; +enum SQL_SETPOS_MAX_LOCK_VALUE = SQL_LOCK_UNLOCK; +enum SQL_SETPOS_MAX_OPTION_VALUE = SQL_ADD; +enum SQL_SIMULATE_CURSOR = 10; +enum SQL_SO_DYNAMIC = 4; +enum SQL_SO_FORWARD_ONLY = 1; +enum SQL_SO_KEYSET_DRIVEN = 2; +enum SQL_SO_MIXED = 8; +enum SQL_SO_STATIC = 16; +enum SQL_SQ_COMPARISON = 1; +enum SQL_SQ_CORRELATED_SUBQUERIES = 16; +enum SQL_SQ_EXISTS = 2; +enum SQL_SQ_IN = 4; +enum SQL_SQ_QUANTIFIED = 8; +enum SQL_SQLSTATE_SIZE = 5; +enum SQL_SS_ADDITIONS = 1; +enum SQL_SS_DELETIONS = 2; +enum SQL_SS_UPDATES = 4; +enum SQL_STATIC_SENSITIVITY = 83; +enum SQL_STRING_FUNCTIONS = 50; +enum SQL_SUBQUERIES = 95; +enum SQL_SYSTEM_FUNCTIONS = 51; +enum SQL_TABLE_STAT = 0; +enum SQL_TABLE_TERM = 45; +enum SQL_TIMEDATE_ADD_INTERVALS = 109; +enum SQL_TIMEDATE_DIFF_INTERVALS = 110; +enum SQL_TIMEDATE_FUNCTIONS = 52; +enum SQL_TRANSLATE_DLL = 106; +enum SQL_TRANSLATE_OPTION = 107; +enum SQL_TXN_ISOLATION = 108; +enum SQL_TXN_VERSIONING = 16; +enum SQL_TYPE_NULL = 0; +enum SQL_U_UNION = 1; +enum SQL_U_UNION_ALL = 2; + +enum SQL_UB_OFF = 0UL; +enum SQL_UB_DEFAULT = SQL_UB_OFF; +enum SQL_UB_ON = 1UL; + +enum SQL_UNION = 96; +enum SQL_UNSEARCHABLE = 0; +enum SQL_UPDATE = 2; +enum SQL_USE_BOOKMARKS = 12; +enum SQL_VARBINARY = -3; + +enum SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL; +enum SQL_COLATT_OPT_MIN = SQL_COLUMN_COUNT; +enum SQL_PRED_SEARCHABLE = SQL_SEARCHABLE; + +//MACRO #define SQL_POSITION_TO(s, r) SQLSetPos(s, r, SQL_POSITION, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_LOCK_RECORD(s, r, l) SQLSetPos(s, r, SQL_POSITION, l) + +//MACRO #define SQL_REFRESH_RECORD(s, r, l) SQLSetPos(s, r, SQL_REFRESH, l) + +//MACRO #define SQL_UPDATE_RECORD(s, r) SQLSetPos(s, r, SQL_UPDATE, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_DELETE_RECORD(s, r) SQLSetPos(s, r, SQL_DELETE, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_ADD_RECORD(s, r) SQLSetPos(s, r, SQL_ADD, SQL_LOCK_NO_CHANGE) + + +static if (ODBCVER < 0x0300) +{ +enum SQL_CONNECT_OPT_DRVR_START = 1000; +enum SQL_CONN_OPT_MAX = SQL_PACKET_SIZE; +enum SQL_CONN_OPT_MIN = SQL_ACCESS_MODE; +enum SQL_STMT_OPT_MAX = SQL_ROW_NUMBER; +enum SQL_STMT_OPT_MIN = SQL_QUERY_TIMEOUT; +enum SQL_TYPE_DRIVER_START = SQL_INTERVAL_YEAR; +enum SQL_TYPE_DRIVER_END = SQL_UNICODE_LONGVARCHAR; +enum SQL_TYPE_MIN = SQL_BIT; +enum SQL_TYPE_MAX = SQL_VARCHAR; +} + +static if (ODBCVER < 0x0300) +{ +enum SQL_NO_DATA_FOUND = 100; +enum SQL_INTERVAL_YEAR = -80; +enum SQL_INTERVAL_MONTH = -81; +enum SQL_INTERVAL_YEAR_TO_MONTH = -82; +enum SQL_INTERVAL_DAY = -83; +enum SQL_INTERVAL_HOUR = -84; +enum SQL_INTERVAL_MINUTE = -85; +enum SQL_INTERVAL_SECOND = -86; +enum SQL_INTERVAL_DAY_TO_HOUR = -87; +enum SQL_INTERVAL_DAY_TO_MINUTE = -88; +enum SQL_INTERVAL_DAY_TO_SECOND = -89; +enum SQL_INTERVAL_HOUR_TO_MINUTE = -90; +enum SQL_INTERVAL_HOUR_TO_SECOND = -91; +enum SQL_INTERVAL_MINUTE_TO_SECOND = -92; +} +else +{ +enum SQL_NO_DATA_FOUND = SQL_NO_DATA; +enum SQL_CODE_YEAR = 1; +enum SQL_CODE_MONTH = 2; +enum SQL_CODE_DAY = 3; +enum SQL_CODE_HOUR = 4; +enum SQL_CODE_MINUTE = 5; +enum SQL_CODE_SECOND = 6; +enum SQL_CODE_YEAR_TO_MONTH = 7; +enum SQL_CODE_DAY_TO_HOUR = 8; +enum SQL_CODE_DAY_TO_MINUTE = 9; +enum SQL_CODE_DAY_TO_SECOND = 10; +enum SQL_CODE_HOUR_TO_MINUTE = 11; +enum SQL_CODE_HOUR_TO_SECOND = 12; +enum SQL_CODE_MINUTE_TO_SECOND = 13; +enum SQL_INTERVAL_YEAR = 100 + SQL_CODE_YEAR; +enum SQL_INTERVAL_MONTH = 100 + SQL_CODE_MONTH; +enum SQL_INTERVAL_DAY = 100 + SQL_CODE_DAY; +enum SQL_INTERVAL_HOUR = 100 + SQL_CODE_HOUR; +enum SQL_INTERVAL_MINUTE = 100 + SQL_CODE_MINUTE; +enum SQL_INTERVAL_SECOND = 100 + SQL_CODE_SECOND; +enum SQL_INTERVAL_YEAR_TO_MONTH = 100 + SQL_CODE_YEAR_TO_MONTH; +enum SQL_INTERVAL_DAY_TO_HOUR = 100 + SQL_CODE_DAY_TO_HOUR; +enum SQL_INTERVAL_DAY_TO_MINUTE = 100 + SQL_CODE_DAY_TO_MINUTE; +enum SQL_INTERVAL_DAY_TO_SECOND = 100 + SQL_CODE_DAY_TO_SECOND; +enum SQL_INTERVAL_HOUR_TO_MINUTE = 100 + SQL_CODE_HOUR_TO_MINUTE; +enum SQL_INTERVAL_HOUR_TO_SECOND = 100 + SQL_CODE_HOUR_TO_SECOND; +enum SQL_INTERVAL_MINUTE_TO_SECOND = 100 + SQL_CODE_MINUTE_TO_SECOND; +}//[Yes] #endif + + +static if ((ODBCVER >= 0x0201) && (ODBCVER < 0x0300)) +{ +enum SQL_OJ_CAPABILITIES = 65003; +} + +static if (ODBCVER >= 0x0250) +{ +enum SQL_NO_ACTION = 3; +enum SQL_SET_DEFAULT = 4; +} + +static if (ODBCVER >= 0x0300) +{ +enum SQL_ACTIVE_ENVIRONMENTS = 116; +enum SQL_AD_ADD_CONSTRAINT_DEFERRABLE = 0x00000080L; +enum SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; +enum SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; +enum SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; +enum SQL_AD_ADD_DOMAIN_CONSTRAINT = 0x00000002L; +enum SQL_AD_ADD_DOMAIN_DEFAULT = 0x00000008L; +enum SQL_AD_CONSTRAINT_NAME_DEFINITION = 0x00000001L; +enum SQL_AD_DROP_DOMAIN_CONSTRAINT = 0x00000004L; +enum SQL_AD_DROP_DOMAIN_DEFAULT = 0x00000010L; +enum SQL_AF_ALL = 0x00000040L; +enum SQL_AF_AVG = 0x00000001L; +enum SQL_AF_COUNT = 0x00000002L; +enum SQL_AF_DISTINCT = 0x00000020L; +enum SQL_AF_MAX = 0x00000004L; +enum SQL_AF_MIN = 0x00000008L; +enum SQL_AF_SUM = 0x00000010L; +enum SQL_AGGREGATE_FUNCTIONS = 169; +enum SQL_ALL_CATALOGS = "%"; +enum SQL_ALL_SCHEMAS = "%"; +enum SQL_ALL_TABLE_TYPES = "%"; +enum SQL_ALTER_DOMAIN = 117; +enum SQL_AM_CONNECTION = 1; +enum SQL_AM_NONE = 0; +enum SQL_AM_STATEMENT = 2; +enum SQL_API_ODBC3_ALL_FUNCTIONS = 999; +enum SQL_API_ODBC3_ALL_FUNCTIONS_SIZE = 250; +enum SQL_API_SQLALLOCHANDLESTD = 73; +enum SQL_API_SQLBULKOPERATIONS = 24; +enum SQL_ASYNC_MODE = 10021; +enum SQL_AT_ADD_COLUMN_COLLATION = 0x00000080L; +enum SQL_AT_ADD_COLUMN_DEFAULT = 0x00000040L; +enum SQL_AT_ADD_COLUMN_SINGLE = 0x00000020L; +enum SQL_AT_ADD_TABLE_CONSTRAINT = 0x00001000L; +enum SQL_AT_CONSTRAINT_DEFERRABLE = 0x00040000L; +enum SQL_AT_CONSTRAINT_INITIALLY_DEFERRED = 0x00010000L; +enum SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00020000L; +enum SQL_AT_CONSTRAINT_NAME_DEFINITION = 0x00008000L; +enum SQL_AT_CONSTRAINT_NON_DEFERRABLE = 0x00080000L; +enum SQL_AT_DROP_COLUMN_CASCADE = 0x00000400L; +enum SQL_AT_DROP_COLUMN_DEFAULT = 0x00000200L; +enum SQL_AT_DROP_COLUMN_RESTRICT = 0x00000800L; +enum SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE = 0x00002000L; +enum SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT = 0x00004000L; +enum SQL_AT_SET_COLUMN_DEFAULT = 0x00000100L; +enum SQL_ATTR_ACCESS_MODE = SQL_ACCESS_MODE; +enum SQL_ATTR_ASYNC_ENABLE = 4; +enum SQL_ATTR_AUTOCOMMIT = SQL_AUTOCOMMIT; +enum SQL_ATTR_CONCURRENCY = SQL_CONCURRENCY; +enum SQL_ATTR_CONNECTION_POOLING = 201; +enum SQL_ATTR_CONNECTION_TIMEOUT = 113; +enum SQL_ATTR_CP_MATCH = 202; +enum SQL_ATTR_CURRENT_CATALOG = SQL_CURRENT_QUALIFIER; +enum SQL_ATTR_CURSOR_TYPE = SQL_CURSOR_TYPE; +enum SQL_ATTR_DISCONNECT_BEHAVIOR = 114; +enum SQL_ATTR_ENABLE_AUTO_IPD = 15; +enum SQL_ATTR_ENLIST_IN_DTC = 1207; +enum SQL_ATTR_ENLIST_IN_XA = 1208; +enum SQL_ATTR_FETCH_BOOKMARK_PTR = 16; +enum SQL_ATTR_KEYSET_SIZE = SQL_KEYSET_SIZE; +enum SQL_ATTR_LOGIN_TIMEOUT = SQL_LOGIN_TIMEOUT; +enum SQL_ATTR_MAX_LENGTH = SQL_MAX_LENGTH; +enum SQL_ATTR_MAX_ROWS = SQL_MAX_ROWS; +enum SQL_ATTR_NOSCAN = SQL_NOSCAN; +enum SQL_ATTR_ODBC_CURSORS = SQL_ODBC_CURSORS; +enum SQL_ATTR_ODBC_VERSION = 200; +enum SQL_ATTR_PACKET_SIZE = SQL_PACKET_SIZE; +enum SQL_ATTR_PARAM_BIND_OFFSET_PTR = 17; +enum SQL_ATTR_PARAM_BIND_TYPE = 18; +enum SQL_ATTR_PARAM_OPERATION_PTR = 19; +enum SQL_ATTR_PARAM_STATUS_PTR = 20; +enum SQL_ATTR_PARAMS_PROCESSED_PTR = 21; +enum SQL_ATTR_PARAMSET_SIZE = 22; +enum SQL_ATTR_QUERY_TIMEOUT = SQL_QUERY_TIMEOUT; +enum SQL_ATTR_QUIET_MODE = SQL_QUIET_MODE; +enum SQL_ATTR_RETRIEVE_DATA = SQL_RETRIEVE_DATA; +enum SQL_ATTR_ROW_ARRAY_SIZE = 27; +enum SQL_ATTR_ROW_BIND_OFFSET_PTR = 23; +enum SQL_ATTR_ROW_BIND_TYPE = SQL_BIND_TYPE; +enum SQL_ATTR_ROW_NUMBER = SQL_ROW_NUMBER; +enum SQL_ATTR_ROW_OPERATION_PTR = 24; +enum SQL_ATTR_ROW_STATUS_PTR = 25; +enum SQL_ATTR_ROWS_FETCHED_PTR = 26; +enum SQL_ATTR_SIMULATE_CURSOR = SQL_SIMULATE_CURSOR; +enum SQL_ATTR_TRACE = SQL_OPT_TRACE; +enum SQL_ATTR_TRACEFILE = SQL_OPT_TRACEFILE; +enum SQL_ATTR_TRANSLATE_LIB = SQL_TRANSLATE_DLL; +enum SQL_ATTR_TRANSLATE_OPTION = SQL_TRANSLATE_OPTION; +enum SQL_ATTR_TXN_ISOLATION = SQL_TXN_ISOLATION; +enum SQL_ATTR_USE_BOOKMARKS = SQL_USE_BOOKMARKS; +enum SQL_BATCH_ROW_COUNT = 120; +enum SQL_BATCH_SUPPORT = 121; +enum SQL_BRC_EXPLICIT = 0x0000002; +enum SQL_BRC_PROCEDURES = 0x0000001; +enum SQL_BRC_ROLLED_UP = 0x0000004; +enum SQL_BS_ROW_COUNT_EXPLICIT = 0x00000002L; +enum SQL_BS_ROW_COUNT_PROC = 0x00000008L; +enum SQL_BS_SELECT_EXPLICIT = 0x00000001L; +enum SQL_BS_SELECT_PROC = 0x00000004L; +enum SQL_C_INTERVAL_DAY = SQL_INTERVAL_DAY; +enum SQL_C_INTERVAL_DAY_TO_HOUR = SQL_INTERVAL_DAY_TO_HOUR; +enum SQL_C_INTERVAL_DAY_TO_MINUTE = SQL_INTERVAL_DAY_TO_MINUTE; +enum SQL_C_INTERVAL_DAY_TO_SECOND = SQL_INTERVAL_DAY_TO_SECOND; +enum SQL_C_INTERVAL_HOUR = SQL_INTERVAL_HOUR; +enum SQL_C_INTERVAL_HOUR_TO_MINUTE = SQL_INTERVAL_HOUR_TO_MINUTE; +enum SQL_C_INTERVAL_HOUR_TO_SECOND = SQL_INTERVAL_HOUR_TO_SECOND; +enum SQL_C_INTERVAL_MINUTE = SQL_INTERVAL_MINUTE; +enum SQL_C_INTERVAL_MINUTE_TO_SECOND = SQL_INTERVAL_MINUTE_TO_SECOND; +enum SQL_C_INTERVAL_MONTH = SQL_INTERVAL_MONTH; +enum SQL_C_INTERVAL_SECOND = SQL_INTERVAL_SECOND; +enum SQL_C_INTERVAL_YEAR = SQL_INTERVAL_YEAR; +enum SQL_C_INTERVAL_YEAR_TO_MONTH = SQL_INTERVAL_YEAR_TO_MONTH; +enum SQL_C_NUMERIC = SQL_NUMERIC; +enum SQL_C_SBIGINT = SQL_BIGINT+SQL_SIGNED_OFFSET; +enum SQL_C_TYPE_DATE = SQL_TYPE_DATE; +enum SQL_C_TYPE_TIME = SQL_TYPE_TIME; +enum SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP; +enum SQL_C_UBIGINT = SQL_BIGINT+SQL_UNSIGNED_OFFSET; +enum SQL_C_VARBOOKMARK = SQL_C_BINARY; +enum SQL_CA_CONSTRAINT_DEFERRABLE = 0x00000040L; +enum SQL_CA_CONSTRAINT_INITIALLY_DEFERRED = 0x00000010L; +enum SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000020L; +enum SQL_CA_CONSTRAINT_NON_DEFERRABLE = 0x00000080L; +enum SQL_CA_CREATE_ASSERTION = 0x00000001L; +enum SQL_CA1_ABSOLUTE = 0x00000002L; +enum SQL_CA1_BOOKMARK = 0x00000008L; +enum SQL_CA1_BULK_ADD = 0x00010000L; +enum SQL_CA1_BULK_DELETE_BY_BOOKMARK = 0x00040000L; +enum SQL_CA1_BULK_FETCH_BY_BOOKMARK = 0x00080000L; +enum SQL_CA1_BULK_UPDATE_BY_BOOKMARK = 0x00020000L; +enum SQL_CA1_LOCK_EXCLUSIVE = 0x00000080L; +enum SQL_CA1_LOCK_NO_CHANGE = 0x00000040L; +enum SQL_CA1_LOCK_UNLOCK = 0x00000100L; +enum SQL_CA1_NEXT = 0x00000001L; +enum SQL_CA1_POS_DELETE = 0x00000800L; +enum SQL_CA1_POS_POSITION = 0x00000200L; +enum SQL_CA1_POS_REFRESH = 0x00001000L; +enum SQL_CA1_POS_UPDATE = 0x00000400L; +enum SQL_CA1_POSITIONED_DELETE = 0x00004000L; +enum SQL_CA1_POSITIONED_UPDATE = 0x00002000L; +enum SQL_CA1_RELATIVE = 0x00000004L; +enum SQL_CA1_SELECT_FOR_UPDATE = 0x00008000L; +enum SQL_CA2_CRC_APPROXIMATE = 0x00002000L; +enum SQL_CA2_CRC_EXACT = 0x00001000L; +enum SQL_CA2_LOCK_CONCURRENCY = 0x00000002L; + +enum SQL_CA2_MAX_ROWS_CATALOG = 0x00000800L; +enum SQL_CA2_MAX_ROWS_DELETE = 0x00000200L; +enum SQL_CA2_MAX_ROWS_INSERT = 0x00000100L; +enum SQL_CA2_MAX_ROWS_SELECT = 0x00000080L; +enum SQL_CA2_MAX_ROWS_UPDATE = 0x00000400L; +enum SQL_CA2_MAX_ROWS_AFFECTS_ALL = SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | + SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG; + +enum SQL_CA2_OPT_ROWVER_CONCURRENCY = 0x00000004L; +enum SQL_CA2_OPT_VALUES_CONCURRENCY = 0x00000008L; +enum SQL_CA2_READ_ONLY_CONCURRENCY = 0x00000001L; +enum SQL_CA2_SENSITIVITY_ADDITIONS = 0x00000010L; +enum SQL_CA2_SENSITIVITY_DELETIONS = 0x00000020L; +enum SQL_CA2_SENSITIVITY_UPDATES = 0x00000040L; +enum SQL_CA2_SIMULATE_NON_UNIQUE = 0x00004000L; +enum SQL_CA2_SIMULATE_TRY_UNIQUE = 0x00008000L; +enum SQL_CA2_SIMULATE_UNIQUE = 0x00010000L; +enum SQL_CATALOG_LOCATION = SQL_QUALIFIER_LOCATION; +enum SQL_CATALOG_NAME_SEPARATOR = SQL_QUALIFIER_NAME_SEPARATOR; +enum SQL_CATALOG_TERM = SQL_QUALIFIER_TERM; +enum SQL_CATALOG_USAGE = SQL_QUALIFIER_USAGE; +enum SQL_CCOL_CREATE_COLLATION = 0x00000001L; +enum SQL_CCS_COLLATE_CLAUSE = 0x00000002L; +enum SQL_CCS_CREATE_CHARACTER_SET = 0x00000001L; +enum SQL_CCS_LIMITED_COLLATION = 0x00000004L; +enum SQL_CDO_COLLATION = 0x00000008L; +enum SQL_CDO_CONSTRAINT = 0x00000004L; +enum SQL_CDO_CONSTRAINT_DEFERRABLE = 0x00000080L; +enum SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; +enum SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; +enum SQL_CDO_CONSTRAINT_NAME_DEFINITION = 0x00000010L; +enum SQL_CDO_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; +enum SQL_CDO_CREATE_DOMAIN = 0x00000001L; +enum SQL_CDO_DEFAULT = 0x00000002L; +enum SQL_CL_END = SQL_QL_END; +enum SQL_CL_START = SQL_QL_START; +enum SQL_COL_PRED_BASIC = SQL_ALL_EXCEPT_LIKE; +enum SQL_COL_PRED_CHAR = SQL_LIKE_ONLY; +enum SQL_COLUMN_DRIVER_START = 1000; +enum SQL_COLUMN_IGNORE = SQL_IGNORE; +enum SQL_COLUMN_NUMBER_UNKNOWN = -2; +enum SQL_CONVERT_GUID = 173; + +enum SQL_CONVERT_WCHAR = 122; +enum SQL_CONVERT_INTERVAL_DAY_TIME = 123; +enum SQL_CONVERT_INTERVAL_YEAR_MONTH = 124; +enum SQL_CONVERT_WLONGVARCHAR = 125; +enum SQL_CONVERT_WVARCHAR = 126; + +enum SQL_CREATE_ASSERTION = 127; +enum SQL_CREATE_CHARACTER_SET = 128; +enum SQL_CREATE_COLLATION = 129; +enum SQL_CREATE_DOMAIN = 130; +enum SQL_CREATE_SCHEMA = 131; +enum SQL_CREATE_TABLE = 132; +enum SQL_CREATE_TRANSLATION = 133; +enum SQL_CREATE_VIEW = 134; + + +enum SQL_CP_OFF = 0UL; +enum SQL_CP_DEFAULT = SQL_CP_OFF; +enum SQL_CP_ONE_PER_DRIVER = 1UL; +enum SQL_CP_ONE_PER_HENV = 2UL; + +enum SQL_CP_STRICT_MATCH = 0UL; +enum SQL_CP_MATCH_DEFAULT = SQL_CP_STRICT_MATCH; +enum SQL_CP_RELAXED_MATCH = 1UL; + +enum SQL_CS_CREATE_SCHEMA = 0x00000001L; +enum SQL_CS_AUTHORIZATION = 0x00000002L; +enum SQL_CS_DEFAULT_CHARACTER_SET = 0x00000004L; + +enum SQL_CT_COLUMN_COLLATION = 0x00000800L; +enum SQL_CT_COLUMN_CONSTRAINT = 0x00000200L; +enum SQL_CT_COLUMN_DEFAULT = 0x00000400L; +enum SQL_CT_COMMIT_DELETE = 0x00000004L; +enum SQL_CT_COMMIT_PRESERVE = 0x00000002L; +enum SQL_CT_CONSTRAINT_DEFERRABLE = 0x00000080L; +enum SQL_CT_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; +enum SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; +enum SQL_CT_CONSTRAINT_NAME_DEFINITION = 0x00002000L; +enum SQL_CT_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; +enum SQL_CT_CREATE_TABLE = 0x00000001L; +enum SQL_CT_GLOBAL_TEMPORARY = 0x00000008L; +enum SQL_CT_LOCAL_TEMPORARY = 0x00000010L; +enum SQL_CT_TABLE_CONSTRAINT = 0x00001000L; + +enum SQL_CTR_CREATE_TRANSLATION = 0x00000001L; + +enum SQL_CU_DML_STATEMENTS = SQL_QU_DML_STATEMENTS; +enum SQL_CU_INDEX_DEFINITION = SQL_QU_INDEX_DEFINITION; +enum SQL_CU_PRIVILEGE_DEFINITION = SQL_QU_PRIVILEGE_DEFINITION; +enum SQL_CU_PROCEDURE_INVOCATION = SQL_QU_PROCEDURE_INVOCATION; +enum SQL_CU_TABLE_DEFINITION = SQL_QU_TABLE_DEFINITION; + +enum SQL_CVT_INTERVAL_YEAR_MONTH = 0x00080000L; +enum SQL_CVT_INTERVAL_DAY_TIME = 0x00100000L; +enum SQL_CVT_WCHAR = 0x00200000L; +enum SQL_CVT_WLONGVARCHAR = 0x00400000L; +enum SQL_CVT_WVARCHAR = 0x00800000L; +enum SQL_CVT_GUID = 0x01000000L; + +enum SQL_DA_DROP_ASSERTION = 0x00000001L; +enum SQL_DATETIME_LITERALS = 119; + +enum SQL_DB_DISCONNECT = 1UL; +enum SQL_DB_RETURN_TO_POOL = 0UL; +enum SQL_DB_DEFAULT = SQL_DB_RETURN_TO_POOL; + +enum SQL_DC_DROP_COLLATION = 0x00000001L; +enum SQL_DCS_DROP_CHARACTER_SET = 0x00000001L; +enum SQL_DD_CASCADE = 0x00000004L; +enum SQL_DD_DROP_DOMAIN = 0x00000001L; +enum SQL_DD_RESTRICT = 0x00000002L; +enum SQL_DDL_INDEX = 170; +enum SQL_DELETE_BY_BOOKMARK = 6; +enum SQL_DESC_ARRAY_SIZE = 20; +enum SQL_DESC_ARRAY_STATUS_PTR = 21; +enum SQL_DESC_AUTO_UNIQUE_VALUE = SQL_COLUMN_AUTO_INCREMENT; +enum SQL_DESC_BASE_COLUMN_NAME = 22; +enum SQL_DESC_BASE_TABLE_NAME = 23; +enum SQL_DESC_BIND_OFFSET_PTR = 24; +enum SQL_DESC_BIND_TYPE = 25; +enum SQL_DESC_CASE_SENSITIVE = SQL_COLUMN_CASE_SENSITIVE; +enum SQL_DESC_CATALOG_NAME = SQL_COLUMN_QUALIFIER_NAME; +enum SQL_DESC_CONCISE_TYPE = SQL_COLUMN_TYPE; +enum SQL_DESC_DATETIME_INTERVAL_PRECISION = 26; +enum SQL_DESC_DISPLAY_SIZE = SQL_COLUMN_DISPLAY_SIZE; +enum SQL_DESC_FIXED_PREC_SCALE = SQL_COLUMN_MONEY; +enum SQL_DESC_LABEL = SQL_COLUMN_LABEL; +enum SQL_DESC_LITERAL_PREFIX = 27; +enum SQL_DESC_LITERAL_SUFFIX = 28; +enum SQL_DESC_LOCAL_TYPE_NAME = 29; +enum SQL_DESC_MAXIMUM_SCALE = 30; +enum SQL_DESC_MINIMUM_SCALE = 31; +enum SQL_DESC_NUM_PREC_RADIX = 32; +enum SQL_DESC_PARAMETER_TYPE = 33; +enum SQL_DESC_ROWS_PROCESSED_PTR = 34; +enum SQL_DESC_SCHEMA_NAME = SQL_COLUMN_OWNER_NAME; +enum SQL_DESC_SEARCHABLE = SQL_COLUMN_SEARCHABLE; +enum SQL_DESC_TABLE_NAME = SQL_COLUMN_TABLE_NAME; +enum SQL_DESC_TYPE_NAME = SQL_COLUMN_TYPE_NAME; +enum SQL_DESC_UNSIGNED = SQL_COLUMN_UNSIGNED; +enum SQL_DESC_UPDATABLE = SQL_COLUMN_UPDATABLE; +enum SQL_DI_CREATE_INDEX = 0x00000001L; +enum SQL_DI_DROP_INDEX = 0x00000002L; + +enum SQL_DIAG_COLUMN_NUMBER = -1247; +enum SQL_DIAG_ROW_NUMBER = -1248; +enum SQL_DIAG_CURSOR_ROW_COUNT = -1249; + +enum SQL_DL_SQL92_DATE = 0x00000001L; +enum SQL_DL_SQL92_INTERVAL_DAY = 0x00000020L; +enum SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR = 0x00000400L; +enum SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE = 0x00000800L; +enum SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND = 0x00001000L; +enum SQL_DL_SQL92_INTERVAL_HOUR = 0x00000040L; +enum SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE = 0x00002000L; +enum SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND = 0x00004000L; +enum SQL_DL_SQL92_INTERVAL_MINUTE = 0x00000080L; +enum SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND = 0x00008000L; +enum SQL_DL_SQL92_INTERVAL_MONTH = 0x00000010L; +enum SQL_DL_SQL92_INTERVAL_SECOND = 0x00000100L; +enum SQL_DL_SQL92_INTERVAL_YEAR = 0x00000008L; +enum SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH = 0x00000200L; +enum SQL_DL_SQL92_TIME = 0x00000002L; +enum SQL_DL_SQL92_TIMESTAMP = 0x00000004L; +enum SQL_DM_VER = 171; +enum SQL_DRIVER_HDESC = 135; +enum SQL_DROP_ASSERTION = 136; +enum SQL_DROP_CHARACTER_SET = 137; +enum SQL_DROP_COLLATION = 138; +enum SQL_DROP_DOMAIN = 139; +enum SQL_DROP_SCHEMA = 140; +enum SQL_DROP_TABLE = 141; +enum SQL_DROP_TRANSLATION = 142; +enum SQL_DROP_VIEW = 143; +enum SQL_DS_CASCADE = 0x00000004L; +enum SQL_DS_DROP_SCHEMA = 0x00000001L; +enum SQL_DS_RESTRICT = 0x00000002L; +enum SQL_DT_CASCADE = 0x00000004L; +enum SQL_DT_DROP_TABLE = 0x00000001L; +enum SQL_DT_RESTRICT = 0x00000002L; +enum SQL_DTC_DONE = 0L; +enum SQL_DTR_DROP_TRANSLATION = 0x00000001L; +enum SQL_DV_CASCADE = 0x00000004L; +enum SQL_DV_DROP_VIEW = 0x00000001L; +enum SQL_DV_RESTRICT = 0x00000002L; +enum SQL_DYNAMIC_CURSOR_ATTRIBUTES1 = 144; +enum SQL_DYNAMIC_CURSOR_ATTRIBUTES2 = 145; +enum SQL_EXT_API_LAST = SQL_API_SQLBINDPARAMETER; +enum SQL_EXT_API_START = 40; +enum SQL_FETCH_BY_BOOKMARK = 7; +enum SQL_FETCH_FIRST_SYSTEM = 32; +enum SQL_FETCH_FIRST_USER = 31; +enum SQL_FN_CVT_CAST = 0x00000002L; +enum SQL_FN_STR_BIT_LENGTH = 0x00080000L; +enum SQL_FN_STR_CHAR_LENGTH = 0x00100000L; +enum SQL_FN_STR_CHARACTER_LENGTH = 0x00200000L; +enum SQL_FN_STR_OCTET_LENGTH = 0x00400000L; +enum SQL_FN_STR_POSITION = 0x00800000L; +enum SQL_FN_TD_CURRENT_DATE = 0x00020000L; +enum SQL_FN_TD_CURRENT_TIME = 0x00040000L; +enum SQL_FN_TD_CURRENT_TIMESTAMP = 0x00080000L; +enum SQL_FN_TD_EXTRACT = 0x00100000L; +enum SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 = 146; +enum SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 = 147; + /* #define SQL_FUNC_EXISTS(exists, api) + ((*(((UWORD*) (exists)) + ((api) >> 4)) & (1 << ((api) & 15)) ) ? + SQL_TRUE : SQL_FALSE ) + */ +enum SQL_GB_COLLATE = 0x0004; +enum SQL_HANDLE_SENV = 5; + +enum SQL_IK_NONE = 0; +enum SQL_IK_ASC = 1; +enum SQL_IK_DESC = 2; +enum SQL_IK_ALL = SQL_IK_ASC | SQL_IK_DESC; + +enum SQL_INDEX_KEYWORDS = 148; +enum SQL_INFO_DRIVER_START = 1000; +enum SQL_INFO_LAST = SQL_QUALIFIER_LOCATION; +enum SQL_INFO_SCHEMA_VIEWS = 149; +enum SQL_INITIALLY_DEFERRED = 5; +enum SQL_INITIALLY_IMMEDIATE = 6; +enum SQL_INSERT_STATEMENT = 172; +enum SQL_INTERVAL = 10; +enum SQL_IS_INSERT_LITERALS = 0x00000001L; +enum SQL_IS_INSERT_SEARCHED = 0x00000002L; +enum SQL_IS_INTEGER = -6; +enum SQL_IS_POINTER = -4; +enum SQL_IS_SELECT_INTO = 0x00000004L; +enum SQL_IS_SMALLINT = -8; +enum SQL_IS_UINTEGER = -5; +enum SQL_IS_USMALLINT = -7; +enum SQL_ISV_ASSERTIONS = 0x00000001L; +enum SQL_ISV_CHARACTER_SETS = 0x00000002L; +enum SQL_ISV_CHECK_CONSTRAINTS = 0x00000004L; +enum SQL_ISV_COLLATIONS = 0x00000008L; +enum SQL_ISV_COLUMN_DOMAIN_USAGE = 0x00000010L; +enum SQL_ISV_COLUMN_PRIVILEGES = 0x00000020L; +enum SQL_ISV_COLUMNS = 0x00000040L; +enum SQL_ISV_CONSTRAINT_COLUMN_USAGE = 0x00000080L; +enum SQL_ISV_CONSTRAINT_TABLE_USAGE = 0x00000100L; +enum SQL_ISV_DOMAIN_CONSTRAINTS = 0x00000200L; +enum SQL_ISV_DOMAINS = 0x00000400L; +enum SQL_ISV_KEY_COLUMN_USAGE = 0x00000800L; +enum SQL_ISV_REFERENTIAL_CONSTRAINTS = 0x00001000L; +enum SQL_ISV_SCHEMATA = 0x00002000L; +enum SQL_ISV_SQL_LANGUAGES = 0x00004000L; +enum SQL_ISV_TABLE_CONSTRAINTS = 0x00008000L; +enum SQL_ISV_TABLE_PRIVILEGES = 0x00010000L; +enum SQL_ISV_TABLES = 0x00020000L; +enum SQL_ISV_TRANSLATIONS = 0x00040000L; +enum SQL_ISV_USAGE_PRIVILEGES = 0x00080000L; +enum SQL_ISV_VIEW_COLUMN_USAGE = 0x00100000L; +enum SQL_ISV_VIEW_TABLE_USAGE = 0x00200000L; +enum SQL_ISV_VIEWS = 0x00400000L; +enum SQL_KEYSET_CURSOR_ATTRIBUTES1 = 150; +enum SQL_KEYSET_CURSOR_ATTRIBUTES2 = 151; +enum SQL_MAX_ASYNC_CONCURRENT_STATEMENTS = 10022; +enum SQL_NO_COLUMN_NUMBER = -1; +enum SQL_NO_ROW_NUMBER = -1; +enum SQL_NOT_DEFERRABLE = 7; +enum SQL_NUM_EXTENSIONS = SQL_EXT_API_LAST-SQL_EXT_API_START+1; +enum SQL_NUM_FUNCTIONS = 23; +enum SQL_ODBC_INTERFACE_CONFORMANCE = 152; + + enum : ULONG { + SQL_OIC_CORE = 1, + SQL_OIC_LEVEL1, + SQL_OIC_LEVEL2 + } + enum : ULONG { + SQL_OV_ODBC2 = 2, + SQL_OV_ODBC3 = 3 + } + +enum ULONG + SQL_PARAM_BIND_BY_COLUMN = 0, + SQL_PARAM_BIND_TYPE_DEFAULT = SQL_PARAM_BIND_BY_COLUMN; + +enum SQL_PARAM_ARRAY_ROW_COUNTS = 153; +enum SQL_PARAM_ARRAY_SELECTS = 154; +enum SQL_PARAM_DIAG_UNAVAILABLE = 1; +enum SQL_PARAM_ERROR = 5; +enum SQL_PARAM_IGNORE = 1; +enum SQL_PARAM_PROCEED = 0; +enum SQL_PARAM_SUCCESS = 0; +enum SQL_PARAM_SUCCESS_WITH_INFO = 6; +enum SQL_PARAM_UNUSED = 7; + +enum SQL_PARC_BATCH = 1; +enum SQL_PARC_NO_BATCH = 2; +enum SQL_PAS_BATCH = 1; +enum SQL_PAS_NO_BATCH = 2; +enum SQL_PAS_NO_SELECT = 3; + +enum SQL_ROW_IGNORE = 1; +enum SQL_ROW_NUMBER_UNKNOWN = -2; +enum SQL_ROW_PROCEED = 0; +enum SQL_ROW_SUCCESS_WITH_INFO = 6; + +enum SQL_SC_FIPS127_2_TRANSITIONAL = 0x00000002L; +enum SQL_SC_SQL92_ENTRY = 0x00000001L; +enum SQL_SC_SQL92_FULL = 0x00000008L; +enum SQL_SC_SQL92_INTERMEDIATE = 0x00000004L; + +enum SQL_SCC_ISO92_CLI = 0x00000002L; +enum SQL_SCC_XOPEN_CLI_VERSION1 = 0x00000001L; + +enum SQL_SCHEMA_TERM = SQL_OWNER_TERM; +enum SQL_SCHEMA_USAGE = SQL_OWNER_USAGE; +enum SQL_SDF_CURRENT_DATE = 0x00000001L; +enum SQL_SDF_CURRENT_TIME = 0x00000002L; +enum SQL_SDF_CURRENT_TIMESTAMP = 0x00000004L; +enum SQL_SFKD_CASCADE = 0x00000001L; +enum SQL_SFKD_NO_ACTION = 0x00000002L; +enum SQL_SFKD_SET_DEFAULT = 0x00000004L; +enum SQL_SFKD_SET_NULL = 0x00000008L; +enum SQL_SFKU_CASCADE = 0x00000001L; +enum SQL_SFKU_NO_ACTION = 0x00000002L; +enum SQL_SFKU_SET_DEFAULT = 0x00000004L; +enum SQL_SFKU_SET_NULL = 0x00000008L; +enum SQL_SG_DELETE_TABLE = 0x00000020L; +enum SQL_SG_INSERT_COLUMN = 0x00000080L; +enum SQL_SG_INSERT_TABLE = 0x00000040L; +enum SQL_SG_REFERENCES_COLUMN = 0x00000200L; +enum SQL_SG_REFERENCES_TABLE = 0x00000100L; +enum SQL_SG_SELECT_TABLE = 0x00000400L; +enum SQL_SG_UPDATE_COLUMN = 0x00001000L; +enum SQL_SG_UPDATE_TABLE = 0x00000800L; +enum SQL_SG_USAGE_ON_CHARACTER_SET = 0x00000002L; +enum SQL_SG_USAGE_ON_COLLATION = 0x00000004L; +enum SQL_SG_USAGE_ON_DOMAIN = 0x00000001L; +enum SQL_SG_USAGE_ON_TRANSLATION = 0x00000008L; +enum SQL_SG_WITH_GRANT_OPTION = 0x00000010L; +enum SQL_SNVF_BIT_LENGTH = 0x00000001L; +enum SQL_SNVF_CHAR_LENGTH = 0x00000002L; +enum SQL_SNVF_CHARACTER_LENGTH = 0x00000004L; +enum SQL_SNVF_EXTRACT = 0x00000008L; +enum SQL_SNVF_OCTET_LENGTH = 0x00000010L; +enum SQL_SNVF_POSITION = 0x00000020L; +enum SQL_SP_BETWEEN = 0x00000800L; +enum SQL_SP_COMPARISON = 0x00001000L; +enum SQL_SP_EXISTS = 0x00000001L; +enum SQL_SP_IN = 0x00000400L; +enum SQL_SP_ISNOTNULL = 0x00000002L; +enum SQL_SP_ISNULL = 0x00000004L; +enum SQL_SP_LIKE = 0x00000200L; +enum SQL_SP_MATCH_FULL = 0x00000008L; +enum SQL_SP_MATCH_PARTIAL = 0x00000010L; +enum SQL_SP_MATCH_UNIQUE_FULL = 0x00000020L; +enum SQL_SP_MATCH_UNIQUE_PARTIAL = 0x00000040L; +enum SQL_SP_OVERLAPS = 0x00000080L; +enum SQL_SP_QUANTIFIED_COMPARISON = 0x00002000L; +enum SQL_SP_UNIQUE = 0x00000100L; +enum SQL_SQL_CONFORMANCE = 118; +enum SQL_SQL92_DATETIME_FUNCTIONS = 155; +enum SQL_SQL92_FOREIGN_KEY_DELETE_RULE = 156; +enum SQL_SQL92_FOREIGN_KEY_UPDATE_RULE = 157; +enum SQL_SQL92_GRANT = 158; +enum SQL_SQL92_NUMERIC_VALUE_FUNCTIONS = 159; +enum SQL_SQL92_PREDICATES = 160; +enum SQL_SQL92_RELATIONAL_JOIN_OPERATORS = 161; +enum SQL_SQL92_REVOKE = 162; +enum SQL_SQL92_ROW_VALUE_CONSTRUCTOR = 163; +enum SQL_SQL92_STRING_FUNCTIONS = 164; +enum SQL_SQL92_VALUE_EXPRESSIONS = 165; +enum SQL_SR_CASCADE = 0x00000020L; +enum SQL_SR_DELETE_TABLE = 0x00000080L; +enum SQL_SR_GRANT_OPTION_FOR = 0x00000010L; +enum SQL_SR_INSERT_COLUMN = 0x00000200L; +enum SQL_SR_INSERT_TABLE = 0x00000100L; +enum SQL_SR_REFERENCES_COLUMN = 0x00000800L; +enum SQL_SR_REFERENCES_TABLE = 0x00000400L; +enum SQL_SR_RESTRICT = 0x00000040L; +enum SQL_SR_SELECT_TABLE = 0x00001000L; +enum SQL_SR_UPDATE_COLUMN = 0x00004000L; +enum SQL_SR_UPDATE_TABLE = 0x00002000L; +enum SQL_SR_USAGE_ON_CHARACTER_SET = 0x00000002L; +enum SQL_SR_USAGE_ON_COLLATION = 0x00000004L; +enum SQL_SR_USAGE_ON_DOMAIN = 0x00000001L; +enum SQL_SR_USAGE_ON_TRANSLATION = 0x00000008L; +enum SQL_SRJO_CORRESPONDING_CLAUSE = 0x00000001L; +enum SQL_SRJO_CROSS_JOIN = 0x00000002L; +enum SQL_SRJO_EXCEPT_JOIN = 0x00000004L; +enum SQL_SRJO_FULL_OUTER_JOIN = 0x00000008L; +enum SQL_SRJO_INNER_JOIN = 0x00000010L; +enum SQL_SRJO_INTERSECT_JOIN = 0x00000020L; +enum SQL_SRJO_LEFT_OUTER_JOIN = 0x00000040L; +enum SQL_SRJO_NATURAL_JOIN = 0x00000080L; +enum SQL_SRJO_RIGHT_OUTER_JOIN = 0x00000100L; +enum SQL_SRJO_UNION_JOIN = 0x00000200L; +enum SQL_SRVC_DEFAULT = 0x00000004L; +enum SQL_SRVC_NULL = 0x00000002L; +enum SQL_SRVC_ROW_SUBQUERY = 0x00000008L; +enum SQL_SRVC_VALUE_EXPRESSION = 0x00000001L; +enum SQL_SSF_CONVERT = 0x00000001L; +enum SQL_SSF_LOWER = 0x00000002L; +enum SQL_SSF_SUBSTRING = 0x00000008L; +enum SQL_SSF_TRANSLATE = 0x00000010L; +enum SQL_SSF_TRIM_BOTH = 0x00000020L; +enum SQL_SSF_TRIM_LEADING = 0x00000040L; +enum SQL_SSF_TRIM_TRAILING = 0x00000080L; +enum SQL_SSF_UPPER = 0x00000004L; +enum SQL_STANDARD_CLI_CONFORMANCE = 166; +enum SQL_STATIC_CURSOR_ATTRIBUTES1 = 167; +enum SQL_STATIC_CURSOR_ATTRIBUTES2 = 168; +enum SQL_SU_DML_STATEMENTS = SQL_OU_DML_STATEMENTS; +enum SQL_SU_INDEX_DEFINITION = SQL_OU_INDEX_DEFINITION; +enum SQL_SU_PRIVILEGE_DEFINITION = SQL_OU_PRIVILEGE_DEFINITION; +enum SQL_SU_PROCEDURE_INVOCATION = SQL_OU_PROCEDURE_INVOCATION; +enum SQL_SU_TABLE_DEFINITION = SQL_OU_TABLE_DEFINITION; +enum SQL_SVE_CASE = 0x00000001L; +enum SQL_SVE_CAST = 0x00000002L; +enum SQL_SVE_COALESCE = 0x00000004L; +enum SQL_SVE_NULLIF = 0x00000008L; +enum SQL_UB_FIXED = SQL_UB_ON; +enum SQL_UB_VARIABLE = 2UL; +enum SQL_UNION_STATEMENT = SQL_UNION; +enum SQL_UPDATE_BY_BOOKMARK = 5; +enum SQL_US_UNION = SQL_U_UNION; +enum SQL_US_UNION_ALL = SQL_U_UNION_ALL; +}//[Yes] #endif /* ODBCVER >= 0x300 */ +static if (ODBCVER >= 0x0350) +{ +enum SQL_DESC_ROWVER = 35; +enum SQL_GUID = -11; +enum SQL_C_GUID = SQL_GUID; + //#ifdef ODBC_STD + //#define SQLAllocHandle SQLAllocHandleStd + //#define SQLAllocEnv(p) SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, p) + //#define SQL_YEAR SQL_CODE_YEAR + //#define SQL_MONTH SQL_CODE_MONTH + //#define SQL_DAY SQL_CODE_DAY + //#define SQL_HOUR SQL_CODE_HOUR + //#define SQL_MINUTE SQL_CODE_MINUTE + //#define SQL_SECOND SQL_CODE_SECOND + //#define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH + //#define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR + //#define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE + //#define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND + //#define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE + //#define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND + //#define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND + //#endif /* ODBC_STD */ +}//#endif /* ODBCVER >= 0x0350 */ + +//static if (ODBCVER >= 0x0351) +//{ +enum SQL_ATTR_ANSI_APP=115; +enum SQL_AA_TRUE=1L; +enum SQL_AA_FALSE=0L; +//}//[Yes] #endif + +enum TRACE_VERSION=1000; +enum TRACE_ON=1; + +const char [] SQL_ODBC_KEYWORDS = + "ABSOLUTE, ACTION, ADA, ADD, ALL, ALLOCATE, ALTER, AND, ANY, ARE, AS, " + ~ "ASC, ASSERTION, AT, AUTHORIZATION, AVG, " + ~ "BEGIN, BETWEEN, BIT, BIT_LENGTH, BOTH, BY, CASCADE, CASCADED, CASE, CAST, CATALOG, " + ~ "CHAR, CHAR_LENGTH, CHARACTER, CHARACTER_LENGTH, CHECK, CLOSE, COALESCE, " + ~ "COLLATE, COLLATION, COLUMN, COMMIT, CONNECT, CONNECTION, CONSTRAINT, " + ~ "CONSTRAINTS, CONTINUE, CONVERT, CORRESPONDING, COUNT, CREATE, CROSS, CURRENT, " + ~ "CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, " + ~ "DATE, DAY, DEALLOCATE, DEC, DECIMAL, DECLARE, DEFAULT, DEFERRABLE, " + ~ "DEFERRED, DELETE, DESC, DESCRIBE, DESCRIPTOR, DIAGNOSTICS, DISCONNECT, " + ~ "DISTINCT, DOMAIN, DOUBLE, DROP, " + ~ "ELSE, END, END-EXEC, ESCAPE, EXCEPT, EXCEPTION, EXEC, EXECUTE, " + ~ "EXISTS, EXTERNAL, EXTRACT, " + ~ "FALSE, FETCH, FIRST, FLOAT, FOR, FOREIGN, FORTRAN, FOUND, FROM, FULL, " + ~ "GET, GLOBAL, GO, GOTO, GRANT, GROUP, HAVING, HOUR, " + ~ "IDENTITY, IMMEDIATE, IN, INCLUDE, INDEX, INDICATOR, INITIALLY, INNER, " + ~ "INPUT, INSENSITIVE, INSERT, INT, INTEGER, INTERSECT, INTERVAL, INTO, IS, ISOLATION, " + ~ "JOIN, KEY, LANGUAGE, LAST, LEADING, LEFT, LEVEL, LIKE, LOCAL, LOWER, " + ~ "MATCH, MAX, MIN, MINUTE, MODULE, MONTH, " + ~ "NAMES, NATIONAL, NATURAL, NCHAR, NEXT, NO, NONE, NOT, NULL, NULLIF, NUMERIC, " + ~ "OCTET_LENGTH, OF, ON, ONLY, OPEN, OPTION, OR, ORDER, OUTER, OUTPUT, OVERLAPS, " + ~ "PAD, PARTIAL, PASCAL, PLI, POSITION, PRECISION, PREPARE, PRESERVE, " + ~ "PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC, " + ~ "READ, REAL, REFERENCES, RELATIVE, RESTRICT, REVOKE, RIGHT, ROLLBACK, ROWS" + ~ "SCHEMA, SCROLL, SECOND, SECTION, SELECT, SESSION, SESSION_USER, SET, SIZE, " + ~ "SMALLINT, SOME, SPACE, SQL, SQLCA, SQLCODE, SQLERROR, SQLSTATE, SQLWARNING, " + ~ "SUBSTRING, SUM, SYSTEM_USER, " + ~ "TABLE, TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, " + ~ "TO, TRAILING, TRANSACTION, TRANSLATE, TRANSLATION, TRIM, TRUE, " + ~ "UNION, UNIQUE, UNKNOWN, UPDATE, UPPER, USAGE, USER, USING, " + ~ "VALUE, VALUES, VARCHAR, VARYING, VIEW, WHEN, WHENEVER, WHERE, WITH, WORK, WRITE, " + ~ "YEAR, ZONE"; +extern (System) { + SQLRETURN SQLDriverConnect(SQLHDBC, SQLHWND, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLBrowseConnect(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLColumnPrivileges(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLColAttributes(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLDescribeParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLExtendedFetch(SQLHSTMT, SQLUSMALLINT, SQLINTEGER, SQLUINTEGER*, SQLUSMALLINT*); + SQLRETURN SQLForeignKeys(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLMoreResults(SQLHSTMT); + SQLRETURN SQLNativeSql(SQLHDBC, SQLCHAR*, SQLINTEGER, SQLCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLNumParams(SQLHSTMT, SQLSMALLINT*); + SQLRETURN SQLParamOptions(SQLHSTMT, SQLUINTEGER, SQLUINTEGER*); + SQLRETURN SQLPrimaryKeys(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumns(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedures(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLSetPos(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTablePrivileges(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDrivers(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLBindParameter(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLSetScrollOptions(SQLHSTMT, SQLUSMALLINT, SQLLEN, SQLUSMALLINT);/* deprecated */ + DWORD ODBCGetTryWaitValue(); + BOOL ODBCSetTryWaitValue(DWORD); + RETCODE TraceOpenLogFile(LPWSTR, LPWSTR, DWORD); + RETCODE TraceCloseLogFile(); + VOID TraceReturn(RETCODE, RETCODE); + DWORD TraceVersion(); + //static if (ODBCVER >= 0x0300) + //{ + SQLRETURN SQLBulkOperations(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLAllocHandleStd( SQLSMALLINT, SQLHANDLE, SQLHANDLE*); + //} +} diff --git a/etc/c/odbc/sqltypes.d b/etc/c/odbc/sqltypes.d index 65c0ebf100b..50e80446518 100644 --- a/etc/c/odbc/sqltypes.d +++ b/etc/c/odbc/sqltypes.d @@ -1,16 +1,177 @@ -// @@@DEPRECATED_2.106@@@ - /** -$(RED Warning: - This module is deprecated. It will be removed in 2.106. - Use `core.sys.windows.sqltypes` instead.) + * Windows API header module + * + * Translated from MinGW Windows headers + * + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) + * Source: $(PHOBOSSRC etc/c/odbc/_sqltypes.d) Declarations for interfacing with the ODBC library. See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference, - ODBC API Reference on MSN Online) + ODBC API Reference on MSDN) */ -deprecated("Import core.sys.windows.sqltypes instead") module etc.c.odbc.sqltypes; -public import core.sys.windows.sqltypes; +version (ANSI) {} else version = Unicode; + +/* Conversion notes: + It's assumed that ODBC >= 0x0300. +*/ + +// Import windows types or declare appropriate aliases if we are not. +version (Windows) +{ + public import core.sys.windows.windef; + public import core.sys.windows.basetyps; // for GUID +} +else +{ + alias ushort USHORT, WORD; + alias uint ULONG, LONG, BOOL, DWORD; + alias void VOID; + alias void* PVOID, HANDLE, HWND; + alias ubyte UCHAR, BYTE; + alias wchar* LPWSTR; + + align(1) struct GUID { // size is 16 + align(1): + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE[8] Data4; + } +} +alias GUID SQLGUID; + +alias byte SCHAR, SQLSCHAR; +alias int SDWORD, SLONG, SQLINTEGER; +alias short SWORD, SSHORT, RETCODE, SQLSMALLINT; +alias ULONG UDWORD; +alias USHORT UWORD, SQLUSMALLINT; +alias double SDOUBLE, LDOUBLE; +alias float SFLOAT; +alias PVOID PTR, HENV, HDBC, HSTMT, SQLPOINTER; +alias UCHAR SQLCHAR; +// #ifndef _WIN64 +alias UDWORD SQLUINTEGER; +// #endif + +//static if (ODBCVER >= 0x0300) +//{ +alias HANDLE SQLHANDLE; +alias SQLHANDLE SQLHENV, SQLHDBC, SQLHSTMT, SQLHDESC; +/* +} +else +{ +alias void* SQLHENV; +alias void* SQLHDBC; +alias void* SQLHSTMT; +} +*/ +alias SQLSMALLINT SQLRETURN; +alias HWND SQLHWND; +alias ULONG BOOKMARK; + +alias SQLINTEGER SQLLEN, SQLROWOFFSET; +alias SQLUINTEGER SQLROWCOUNT, SQLULEN; +alias DWORD SQLTRANSID; +alias SQLUSMALLINT SQLSETPOSIROW; +alias wchar SQLWCHAR; + +version (Unicode) +{ + alias SQLWCHAR SQLTCHAR; +} +else +{ + alias SQLCHAR SQLTCHAR; +} +//static if (ODBCVER >= 0x0300) +//{ +alias ubyte SQLDATE, SQLDECIMAL; +alias double SQLDOUBLE, SQLFLOAT; +alias ubyte SQLNUMERIC; +alias float SQLREAL; +alias ubyte SQLTIME, SQLTIMESTAMP, SQLVARCHAR; +alias long ODBCINT64, SQLBIGINT; +alias ulong SQLUBIGINT; +//} + +struct DATE_STRUCT { + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; +} + +struct TIME_STRUCT { + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; +} + +struct TIMESTAMP_STRUCT { + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; +} + +//static if (ODBCVER >= 0x0300) +//{ +alias DATE_STRUCT SQL_DATE_STRUCT; +alias TIME_STRUCT SQL_TIME_STRUCT; +alias TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT; + +enum SQLINTERVAL { + SQL_IS_YEAR = 1, + SQL_IS_MONTH, + SQL_IS_DAY, + SQL_IS_HOUR, + SQL_IS_MINUTE, + SQL_IS_SECOND, + SQL_IS_YEAR_TO_MONTH, + SQL_IS_DAY_TO_HOUR, + SQL_IS_DAY_TO_MINUTE, + SQL_IS_DAY_TO_SECOND, + SQL_IS_HOUR_TO_MINUTE, + SQL_IS_HOUR_TO_SECOND, + SQL_IS_MINUTE_TO_SECOND +} + +struct SQL_YEAR_MONTH_STRUCT { + SQLUINTEGER year; + SQLUINTEGER month; +} + +struct SQL_DAY_SECOND_STRUCT { + SQLUINTEGER day; + SQLUINTEGER hour; + SQLUINTEGER minute; + SQLUINTEGER second; + SQLUINTEGER fraction; +} + +struct SQL_INTERVAL_STRUCT { + SQLINTERVAL interval_type; + SQLSMALLINT interval_sign; + union _intval { + SQL_YEAR_MONTH_STRUCT year_month; + SQL_DAY_SECOND_STRUCT day_second; + } + _intval intval; +} + +enum SQL_MAX_NUMERIC_LEN = 16; + +struct SQL_NUMERIC_STRUCT { + SQLCHAR precision; + SQLSCHAR scale; + SQLCHAR sign; + SQLCHAR[SQL_MAX_NUMERIC_LEN] val; +} +// } ODBCVER >= 0x0300 diff --git a/etc/c/odbc/sqlucode.d b/etc/c/odbc/sqlucode.d index 370a727f2dd..33d2b56a159 100644 --- a/etc/c/odbc/sqlucode.d +++ b/etc/c/odbc/sqlucode.d @@ -1,16 +1,170 @@ -// @@@DEPRECATED_2.106@@@ - /** -$(RED Warning: - This module is deprecated. It will be removed in 2.106. - Use `core.sys.windows.sqlucode` instead.) + * Windows API header module + * + * Translated from MinGW Windows headers + * + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) + * Source: $(PHOBOSSRC etc/c/odbc/_sqlucode.d) Declarations for interfacing with the ODBC library. See_Also: $(LINK2 https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/odbc-api-reference, - ODBC API Reference on MSN Online) + ODBC API Reference on MSDN) */ -deprecated("Import core.sys.windows.sqlucode instead") module etc.c.odbc.sqlucode; -public import core.sys.windows.sqlucode; +version (ANSI) {} else version = Unicode; + +import etc.c.odbc.sqlext; + +enum SQL_WCHAR = -8; +enum SQL_WVARCHAR = -9; +enum SQL_WLONGVARCHAR = -10; +enum SQL_C_WCHAR = SQL_WCHAR; + +enum SQL_SQLSTATE_SIZEW = 10; +version (Unicode) +{ +enum SQL_C_TCHAR = SQL_C_WCHAR; +} +else +{ +enum SQL_C_TCHAR = SQL_C_CHAR; +} + +// Moved from sqlext +static if (ODBCVER <= 0x0300) +{ +enum SQL_UNICODE = -95; +enum SQL_UNICODE_VARCHAR = -96; +enum SQL_UNICODE_LONGVARCHAR = -97; +enum SQL_UNICODE_CHAR = SQL_UNICODE; +} +else +{ +enum SQL_UNICODE = SQL_WCHAR; +enum SQL_UNICODE_VARCHAR = SQL_WVARCHAR; +enum SQL_UNICODE_LONGVARCHAR = SQL_WLONGVARCHAR; +enum SQL_UNICODE_CHAR = SQL_WCHAR; +} + +extern (System) { + SQLRETURN SQLBrowseConnectA(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLBrowseConnectW(SQLHDBC, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLColAttributeA(SQLHSTMT, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLColAttributeW(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLColAttributesA(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLColAttributesW(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLColumnPrivilegesA( SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnPrivilegesW( SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLConnectA(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLConnectW(SQLHDBC, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLDataSourcesA(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDataSourcesW(SQLHENV, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDescribeColA(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDescribeColW(SQLHSTMT, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDriverConnectA(SQLHDBC, SQLHWND, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLDriverConnectW(SQLHDBC, SQLHWND, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLDriversA(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDriversW(SQLHENV, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLErrorA(SQLHENV, SQLHDBC, SQLHSTMT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLErrorW(SQLHENV, SQLHDBC, SQLHSTMT, SQLWCHAR*, SQLINTEGER*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLExecDirectA(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLExecDirectW(SQLHSTMT, SQLWCHAR*, SQLINTEGER); + SQLRETURN SQLForeignKeysA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLForeignKeysW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLGetConnectAttrA(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetConnectAttrW(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetConnectOptionA(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetConnectOptionW(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetCursorNameA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetCursorNameW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetInfoA(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetInfoW(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetTypeInfoA(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLGetTypeInfoW(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLNativeSqlA(SQLHDBC, SQLCHAR*, SQLINTEGER, SQLCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLNativeSqlW(SQLHDBC, SQLWCHAR*, SQLINTEGER, SQLWCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLPrepareA(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLPrepareW(SQLHSTMT, SQLWCHAR*, SQLINTEGER); + SQLRETURN SQLPrimaryKeysA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLPrimaryKeysW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumnsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumnsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLProceduresA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProceduresW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLSetConnectAttrA(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetConnectAttrW(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetConnectOptionA(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetConnectOptionW(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetCursorNameA(SQLHSTMT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLSetCursorNameW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLSpecialColumnsA(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLSpecialColumnsW(SQLHSTMT, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatisticsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatisticsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTablePrivilegesA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTablePrivilegesW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLTablesA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTablesW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + static if (ODBCVER >= 0x0300) + { + SQLRETURN SQLGetDescFieldA(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescFieldW(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetDescFieldA(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescFieldW(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLGetDescRecA(SQLHDESC, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDescRecW(SQLHDESC, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDiagFieldA(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagFieldW(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRecA(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRecW(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLWCHAR*, SQLINTEGER*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetStmtAttrA(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetStmtAttrW(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetStmtAttrA(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetStmtAttrW(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + } // #endif /* (ODBCVER >= 0x0300) */ +} + +version (Unicode) +{ + alias SQLBrowseConnectW SQLBrowseConnect; + alias SQLColAttributeW SQLColAttribute; + alias SQLColAttributesW SQLColAttributes; + alias SQLColumnPrivilegesW SQLColumnPrivileges; + alias SQLColumnsW SQLColumns; + alias SQLConnectW SQLConnect; + alias SQLDataSourcesW SQLDataSources; + alias SQLDescribeColW SQLDescribeCol; + alias SQLDriverConnectW SQLDriverConnect; + alias SQLDriversW SQLDrivers; + alias SQLErrorW SQLError; + alias SQLExecDirectW SQLExecDirect; + alias SQLForeignKeysW SQLForeignKeys; + alias SQLGetConnectAttrW SQLGetConnectAttr; + alias SQLGetConnectOptionW SQLGetConnectOption; + alias SQLGetCursorNameW SQLGetCursorName; + alias SQLGetDescFieldW SQLGetDescField; + alias SQLGetDescRecW SQLGetDescRec; + alias SQLGetDiagFieldW SQLGetDiagField; + alias SQLGetDiagRecW SQLGetDiagRec; + alias SQLGetInfoW SQLGetInfo; + alias SQLGetStmtAttrW SQLGetStmtAttr; + alias SQLGetTypeInfoW SQLGetTypeInfo; + alias SQLNativeSqlW SQLNativeSql; + alias SQLPrepareW SQLPrepare; + alias SQLPrimaryKeysW SQLPrimaryKeys; + alias SQLProcedureColumnsW SQLProcedureColumns; + alias SQLProceduresW SQLProcedures; + alias SQLSetConnectAttrW SQLSetConnectAttr; + alias SQLSetConnectOptionW SQLSetConnectOption; + alias SQLSetCursorNameW SQLSetCursorName; + alias SQLSetDescFieldW SQLSetDescField; + alias SQLSetStmtAttrW SQLSetStmtAttr; + alias SQLSpecialColumnsW SQLSpecialColumns; + alias SQLStatisticsW SQLStatistics; + alias SQLTablePrivilegesW SQLTablePrivileges; + alias SQLTablesW SQLTables; +} diff --git a/etc/c/zlib.d b/etc/c/zlib.d index 73c6534d8da..0ff5f978fbc 100644 --- a/etc/c/zlib.d +++ b/etc/c/zlib.d @@ -9,9 +9,9 @@ module etc.c.zlib; import core.stdc.config; /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.12, March 11th, 2022 + version 1.3.1, January 22nd, 2024 - Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,8 +43,8 @@ nothrow: extern (C): // Those are extern(D) as they should be mangled -extern(D) immutable string ZLIB_VERSION = "1.2.12"; -extern(D) immutable ZLIB_VERNUM = 0x12c0; +extern(D) immutable string ZLIB_VERSION = "1.3.1"; +extern(D) immutable ZLIB_VERNUM = 0x1310; /* The 'zlib' compression library provides in-memory compression and @@ -250,7 +250,7 @@ int deflateInit(z_streamp strm, int level) Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default - allocation functions. + allocation functions. total_in, total_out, adler, and msg are initialized. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all @@ -296,7 +296,7 @@ int deflate(z_streamp strm, int flush); == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. See deflatePending(), - which can be used if desired to determine whether or not there is more ouput + which can be used if desired to determine whether or not there is more output in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to @@ -340,8 +340,8 @@ int deflate(z_streamp strm, int flush); with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was @@ -405,7 +405,8 @@ int inflateInit(z_streamp strm) read or consumed. The allocation of a sliding window will be deferred to the first call of inflate (if the decompression does not complete on the first call). If zalloc and zfree are set to Z_NULL, inflateInit updates - them to use default allocation functions. + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -680,7 +681,7 @@ int deflateGetDictionary(z_streamp strm, ubyte *dictionary, uint dictLength); to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If deflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. deflateGetDictionary() may return a length less than the window size, even when more than the window size in input has been provided. It may return up @@ -715,7 +716,7 @@ int deflateReset(z_streamp strm); This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate the internal compression state. The stream will leave the compression level and any other attributes that may have been - set unchanged. + set unchanged. total_in, total_out, adler, and msg are initialized. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). @@ -746,7 +747,7 @@ int deflateParams(z_streamp strm, int level, int strategy); Then no more input data should be provided before the deflateParams() call. If this is done, the old level and strategy will be applied to the data compressed before deflateParams(), and the new level and strategy will be - applied to the the data compressed after deflateParams(). + applied to the data compressed after deflateParams(). deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if @@ -829,8 +830,9 @@ int deflateSetHeader(z_streamp strm, gz_headerp head); gzip file" and give up. If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. @@ -920,7 +922,7 @@ int inflateGetDictionary(z_streamp strm, ubyte* dictionary, uint* dictLength); to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If inflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the stream state is inconsistent. @@ -939,10 +941,10 @@ int inflateSync(z_streamp strm); inflateSync returns Z_OK if a possible full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. - In the success case, the application may save the current current value of - total_in which indicates where valid compressed data was found. In the - error case, the application may repeatedly call inflateSync, providing more - input each time, until success or end of the input data. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ int inflateCopy(z_streamp dest, z_streamp source); @@ -1446,12 +1448,12 @@ z_size_t gzfread(void* buf, z_size_t size, z_size_t nitems, gzFile file); In the event that the end of file is reached and only a partial item is available at the end, i.e. the remaining uncompressed data length is not a - multiple of size, then the final partial item is nevetheless read into buf + multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior is the same as the behavior of fread() implementations in common libraries, but it prevents the direct use of gzfread() to read a concurrently written - file, reseting and retrying on end-of-file, when size is not 1. + file, resetting and retrying on end-of-file, when size is not 1. */ int gzwrite(gzFile file, void* buf, uint len); @@ -1747,19 +1749,18 @@ uint crc32_z(uint crc, const(ubyte)* buf, z_size_t len); */ uint crc32_combine(uint crc1, uint crc2, z_off_t len2); - /* Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. + len2. len2 must be non-negative. */ uint crc32_combine_gen(z_off_t len2); /* Return the operator corresponding to length len2, to be used with - crc32_combine_op(). + crc32_combine_op(). len2 must be non-negative. */ uint crc32_combine_op(uint crc1, uint crc2, uint op); diff --git a/etc/c/zlib/ChangeLog b/etc/c/zlib/ChangeLog index f0b0e618092..b801a1031ec 100644 --- a/etc/c/zlib/ChangeLog +++ b/etc/c/zlib/ChangeLog @@ -1,6 +1,46 @@ ChangeLog file for zlib +Changes in 1.3.1 (22 Jan 2024) +- Reject overflows of zip header fields in minizip +- Fix bug in inflateSync() for data held in bit buffer +- Add LIT_MEM define to use more memory for a small deflate speedup +- Fix decision on the emission of Zip64 end records in minizip +- Add bounds checking to ERR_MSG() macro, used by zError() +- Neutralize zip file traversal attacks in miniunz +- Fix a bug in ZLIB_DEBUG compiles in check_match() +- Various portability and appearance improvements + +Changes in 1.3 (18 Aug 2023) +- Remove K&R function definitions and zlib2ansi +- Fix bug in deflateBound() for level 0 and memLevel 9 +- Fix bug when gzungetc() is used immediately after gzopen() +- Fix bug when using gzflush() with a very small buffer +- Fix crash when gzsetparams() attempted for transparent write +- Fix test/example.c to work with FORCE_STORED +- Rewrite of zran in examples (see zran.c version history) +- Fix minizip to allow it to open an empty zip file +- Fix reading disk number start on zip64 files in minizip +- Fix logic error in minizip argument processing +- Add minizip testing to Makefile +- Read multiple bytes instead of byte-by-byte in minizip unzip.c +- Add memory sanitizer to configure (--memory) +- Various portability improvements +- Various documentation improvements +- Various spelling and typo corrections + +Changes in 1.2.13 (13 Oct 2022) +- Fix configure issue that discarded provided CC definition +- Correct incorrect inputs provided to the CRC functions +- Repair prototypes and exporting of new CRC functions +- Fix inflateBack to detect invalid input with distances too far +- Have infback() deliver all of the available output up to any error +- Fix a bug when getting a gzip header extra field with inflate() +- Fix bug in block type selection when Z_FIXED used +- Tighten deflateBound bounds +- Remove deleted assembler code references +- Various portability and appearance improvements + Changes in 1.2.12 (27 Mar 2022) - Cygwin does not have _wopen(), so do not create gzopen_w() there - Permit a deflateParams() parameter change as soon as possible @@ -159,7 +199,7 @@ Changes in 1.2.7.1 (24 Mar 2013) - Fix types in contrib/minizip to match result of get_crc_table() - Simplify contrib/vstudio/vc10 with 'd' suffix - Add TOP support to win32/Makefile.msc -- Suport i686 and amd64 assembler builds in CMakeLists.txt +- Support i686 and amd64 assembler builds in CMakeLists.txt - Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h - Add vc11 and vc12 build files to contrib/vstudio - Add gzvprintf() as an undocumented function in zlib @@ -359,14 +399,14 @@ Changes in 1.2.5.1 (10 Sep 2011) - Use u4 type for crc_table to avoid conversion warnings - Apply casts in zlib.h to avoid conversion warnings - Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller] -- Improve inflateSync() documentation to note indeterminancy +- Improve inflateSync() documentation to note indeterminacy - Add deflatePending() function to return the amount of pending output - Correct the spelling of "specification" in FAQ [Randers-Pehrson] - Add a check in configure for stdarg.h, use for gzprintf() - Check that pointers fit in ints when gzprint() compiled old style - Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler] - Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt] -- Add debug records in assmebler code [Londer] +- Add debug records in assembler code [Londer] - Update RFC references to use http://tools.ietf.org/html/... [Li] - Add --archs option, use of libtool to configure for Mac OS X [Borstel] @@ -1033,7 +1073,7 @@ Changes in 1.2.0.1 (17 March 2003) - Include additional header file on VMS for off_t typedef - Try to use _vsnprintf where it supplants vsprintf [Vollant] - Add some casts in inffast.c -- Enchance comments in zlib.h on what happens if gzprintf() tries to +- Enhance comments in zlib.h on what happens if gzprintf() tries to write more than 4095 bytes before compression - Remove unused state from inflateBackEnd() - Remove exit(0) from minigzip.c, example.c @@ -1211,7 +1251,7 @@ Changes in 1.0.9 (17 Feb 1998) - Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 - in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) - in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with - the declaration of FAR (Gilles VOllant) + the declaration of FAR (Gilles Vollant) - install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) - read_buf buf parameter of type Bytef* instead of charf* - zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) @@ -1433,7 +1473,7 @@ Changes in 0.99 (27 Jan 96) - fix typo in Make_vms.com (f$trnlnm -> f$getsyi) - in fcalloc, normalize pointer if size > 65520 bytes - don't use special fcalloc for 32 bit Borland C++ -- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc. - use Z_BINARY instead of BINARY - document that gzclose after gzdopen will close the file - allow "a" as mode in gzopen @@ -1567,7 +1607,7 @@ Changes in 0.4: - renamed deflateOptions as deflateInit2, call one or the other but not both - added the method parameter for deflateInit2 - added inflateInit2 -- simplied considerably deflateInit and inflateInit by not supporting +- simplified considerably deflateInit and inflateInit by not supporting user-provided history buffer. This is supported only in deflateInit2 and inflateInit2 diff --git a/etc/c/zlib/LICENSE b/etc/c/zlib/LICENSE new file mode 100644 index 00000000000..ab8ee6f7142 --- /dev/null +++ b/etc/c/zlib/LICENSE @@ -0,0 +1,22 @@ +Copyright notice: + + (C) 1995-2022 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/etc/c/zlib/README b/etc/c/zlib/README index 024b79d3d8c..c5f917540b6 100644 --- a/etc/c/zlib/README +++ b/etc/c/zlib/README @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.12 is a general purpose data compression library. All the code is +zlib 1.3.1 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and @@ -29,18 +29,17 @@ PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at -http://marknelson.us/1997/01/01/zlib-engine/ . +https://marknelson.us/posts/1997/01/01/zlib-engine.html . -The changes made in version 1.2.12 are documented in the file ChangeLog. +The changes made in version 1.3.1 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory contrib/ . -zlib is available in Java using the java.util.zip package, documented at -http://java.sun.com/developer/technicalArticles/Programming/compression/ . +zlib is available in Java using the java.util.zip package. Follow the API +Documentation link at: https://docs.oracle.com/search/?q=java.util.zip . -A Perl interface to zlib written by Paul Marquess is available -at CPAN (Comprehensive Perl Archive Network) sites, including -http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . +A Perl interface to zlib and bzip2 written by Paul Marquess +can be found at https://github.com/pmqs/IO-Compress . A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see @@ -64,7 +63,7 @@ Notes for some targets: - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works when compiled with cc. -- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is +- On Digital Unix 4.0D (formerly OSF/1) on AlphaServer, the cc option -std1 is necessary to get gzprintf working correctly. This is done by configure. - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with @@ -84,7 +83,7 @@ Acknowledgments: Copyright notice: - (C) 1995-2022 Jean-loup Gailly and Mark Adler + (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/etc/c/zlib/adler32.c b/etc/c/zlib/adler32.c index d0be4380a39..04b81d29bad 100644 --- a/etc/c/zlib/adler32.c +++ b/etc/c/zlib/adler32.c @@ -7,8 +7,6 @@ #include "zutil.h" -local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); - #define BASE 65521U /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ @@ -60,11 +58,7 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); #endif /* ========================================================================= */ -uLong ZEXPORT adler32_z(adler, buf, len) - uLong adler; - const Bytef *buf; - z_size_t len; -{ +uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) { unsigned long sum2; unsigned n; @@ -131,20 +125,12 @@ uLong ZEXPORT adler32_z(adler, buf, len) } /* ========================================================================= */ -uLong ZEXPORT adler32(adler, buf, len) - uLong adler; - const Bytef *buf; - uInt len; -{ +uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) { return adler32_z(adler, buf, len); } /* ========================================================================= */ -local uLong adler32_combine_(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) { unsigned long sum1; unsigned long sum2; unsigned rem; @@ -169,18 +155,10 @@ local uLong adler32_combine_(adler1, adler2, len2) } /* ========================================================================= */ -uLong ZEXPORT adler32_combine(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off_t len2; -{ +uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) { return adler32_combine_(adler1, adler2, len2); } -uLong ZEXPORT adler32_combine64(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) { return adler32_combine_(adler1, adler2, len2); } diff --git a/etc/c/zlib/compress.c b/etc/c/zlib/compress.c index e2db404abf8..f43bacf7ab9 100644 --- a/etc/c/zlib/compress.c +++ b/etc/c/zlib/compress.c @@ -19,13 +19,8 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ -int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; - int level; -{ +int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -65,12 +60,8 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) /* =========================================================================== */ -int ZEXPORT compress (dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); } @@ -78,9 +69,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ -uLong ZEXPORT compressBound (sourceLen) - uLong sourceLen; -{ +uLong ZEXPORT compressBound(uLong sourceLen) { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13; } diff --git a/etc/c/zlib/crc32.c b/etc/c/zlib/crc32.c index a1bdce5c23c..6c38f5c04c6 100644 --- a/etc/c/zlib/crc32.c +++ b/etc/c/zlib/crc32.c @@ -98,10 +98,6 @@ # endif #endif -/* Local functions. */ -local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); -local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); - /* If available, use the ARM processor CRC32 instruction. */ #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 # define ARMCRC32 @@ -114,9 +110,7 @@ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); instruction, if one is available. This assumes that word_t is either 32 bits or 64 bits. */ -local z_word_t byte_swap(word) - z_word_t word; -{ +local z_word_t byte_swap(z_word_t word) { # if W == 8 return (word & 0xff00000000000000) >> 56 | @@ -137,24 +131,77 @@ local z_word_t byte_swap(word) } #endif +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Table of powers of x for combining CRC-32s, filled in by make_crc_table() + * below. + */ + local z_crc_t FAR x2n_table[32]; +#else +/* ========================================================================= + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). + */ +# include "crc32.h" +#endif + /* CRC polynomial. */ #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ -#ifdef DYNAMIC_CRC_TABLE +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp(z_crc_t a, z_crc_t b) { + z_crc_t m, p; + + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp(z_off64_t n, unsigned k) { + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Build the tables for byte-wise and braided CRC-32 calculations, and a table + * of powers of x for combining CRC-32s. + */ local z_crc_t FAR crc_table[256]; -local z_crc_t FAR x2n_table[32]; -local void make_crc_table OF((void)); #ifdef W local z_word_t FAR crc_big_table[256]; local z_crc_t FAR crc_braid_table[W][256]; local z_word_t FAR crc_braid_big_table[W][256]; - local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); + local void braid(z_crc_t [][256], z_word_t [][256], int, int); #endif #ifdef MAKECRCH - local void write_table OF((FILE *, const z_crc_t FAR *, int)); - local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); - local void write_table64 OF((FILE *, const z_word_t FAR *, int)); + local void write_table(FILE *, const z_crc_t FAR *, int); + local void write_table32hi(FILE *, const z_word_t FAR *, int); + local void write_table64(FILE *, const z_word_t FAR *, int); #endif /* MAKECRCH */ /* @@ -167,7 +214,6 @@ local void make_crc_table OF((void)); /* Definition of once functionality. */ typedef struct once_s once_t; -local void once OF((once_t *, void (*)(void))); /* Check for the availability of atomics. */ #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ @@ -187,10 +233,7 @@ struct once_s { invoke once() at the same time. The state must be a once_t initialized with ONCE_INIT. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!atomic_load(&state->done)) { if (atomic_flag_test_and_set(&state->begun)) while (!atomic_load(&state->done)) @@ -213,10 +256,7 @@ struct once_s { /* Test and set. Alas, not atomic, but tries to minimize the period of vulnerability. */ -local int test_and_set OF((int volatile *)); -local int test_and_set(flag) - int volatile *flag; -{ +local int test_and_set(int volatile *flag) { int was; was = *flag; @@ -225,10 +265,7 @@ local int test_and_set(flag) } /* Run the provided init() function once. This is not thread-safe. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!state->done) { if (test_and_set(&state->begun)) while (!state->done) @@ -270,8 +307,7 @@ local once_t made = ONCE_INIT; combinations of CRC register values and incoming bytes. */ -local void make_crc_table() -{ +local void make_crc_table(void) { unsigned i, j, n; z_crc_t p; @@ -438,11 +474,7 @@ local void make_crc_table() Write the 32-bit values in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table(out, table, k) - FILE *out; - const z_crc_t FAR *table; - int k; -{ +local void write_table(FILE *out, const z_crc_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -455,11 +487,7 @@ local void write_table(out, table, k) Write the high 32-bits of each value in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table32hi(out, table, k) -FILE *out; -const z_word_t FAR *table; -int k; -{ +local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -475,11 +503,7 @@ int k; bits. If not, then the type cast and format string can be adjusted accordingly. */ -local void write_table64(out, table, k) - FILE *out; - const z_word_t FAR *table; - int k; -{ +local void write_table64(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -489,8 +513,7 @@ local void write_table64(out, table, k) } /* Actually do the deed. */ -int main() -{ +int main(void) { make_crc_table(); return 0; } @@ -502,12 +525,7 @@ int main() Generate the little and big-endian braid tables for the given n and z_word_t size w. Each array must have room for w blocks of 256 elements. */ -local void braid(ltl, big, n, w) - z_crc_t ltl[][256]; - z_word_t big[][256]; - int n; - int w; -{ +local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) { int k; z_crc_t i, p, q; for (k = 0; k < w; k++) { @@ -522,69 +540,13 @@ local void braid(ltl, big, n, w) } #endif -#else /* !DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Tables for byte-wise and braided CRC-32 calculations, and a table of powers - * of x for combining CRC-32s, all made by make_crc_table(). - */ -#include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Routines used for CRC calculation. Some are also required for the table - * generation above. - */ - -/* - Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, - reflected. For speed, this requires that a not be zero. - */ -local z_crc_t multmodp(a, b) - z_crc_t a; - z_crc_t b; -{ - z_crc_t m, p; - - m = (z_crc_t)1 << 31; - p = 0; - for (;;) { - if (a & m) { - p ^= b; - if ((a & (m - 1)) == 0) - break; - } - m >>= 1; - b = b & 1 ? (b >> 1) ^ POLY : b >> 1; - } - return p; -} - -/* - Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been - initialized. - */ -local z_crc_t x2nmodp(n, k) - z_off64_t n; - unsigned k; -{ - z_crc_t p; - - p = (z_crc_t)1 << 31; /* x^0 == 1 */ - while (n) { - if (n & 1) - p = multmodp(x2n_table[k & 31], p); - n >>= 1; - k++; - } - return p; -} - /* ========================================================================= * This function can be used by asm versions of crc32(), and to force the * generation of the CRC tables in a threaded application. */ -const z_crc_t FAR * ZEXPORT get_crc_table() -{ +const z_crc_t FAR * ZEXPORT get_crc_table(void) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -610,11 +572,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table() #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ #define Z_BATCH_MIN 800 /* fewest words in a final batch */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { z_crc_t val; z_word_t crc1, crc2; const z_word_t *word; @@ -630,7 +589,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; /* Compute the CRC up to a word boundary. */ while (len && ((z_size_t)buf & 7) != 0) { @@ -645,8 +604,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) len &= 7; /* Do three interleaved CRCs to realize the throughput of one crc32x - instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three - CRCs are combined into a single CRC after each set of batches. */ + instruction per cycle. Each CRC is calculated on Z_BATCH words. The + three CRCs are combined into a single CRC after each set of batches. */ while (num >= 3 * Z_BATCH) { crc1 = 0; crc2 = 0; @@ -714,18 +673,14 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) least-significant byte of the word as the first byte of data, without any pre or post conditioning. This is used to combine the CRCs of each braid. */ -local z_crc_t crc_word(data) - z_word_t data; -{ +local z_crc_t crc_word(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data >> 8) ^ crc_table[data & 0xff]; return (z_crc_t)data; } -local z_word_t crc_word_big(data) - z_word_t data; -{ +local z_word_t crc_word_big(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data << 8) ^ @@ -736,11 +691,8 @@ local z_word_t crc_word_big(data) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { /* Return initial CRC, if requested. */ if (buf == Z_NULL) return 0; @@ -749,7 +701,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; #ifdef W @@ -772,8 +724,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) words = (z_word_t const *)buf; /* Do endian check at execution time instead of compile time, since ARM - processors can change the endianess at execution time. If the - compiler knows what the endianess will be, it can optimize out the + processors can change the endianness at execution time. If the + compiler knows what the endianness will be, it can optimize out the check and the unused branch. */ endian = 1; if (*(unsigned char *)&endian) { @@ -1060,39 +1012,26 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - uInt len; -{ +unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, + uInt len) { return crc32_z(crc, buf, len); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine64(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ - return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off_t len2; -{ - return crc32_combine64(crc1, crc2, len2); +uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { + return crc32_combine64(crc1, crc2, (z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen64(len2) - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -1100,17 +1039,11 @@ uLong ZEXPORT crc32_combine_gen64(len2) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen(len2) - z_off_t len2; -{ - return crc32_combine_gen64(len2); +uLong ZEXPORT crc32_combine_gen(z_off_t len2) { + return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong crc32_combine_op(crc1, crc2, op) - uLong crc1; - uLong crc2; - uLong op; -{ - return multmodp(op, crc1) ^ crc2; +uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/etc/c/zlib/deflate.c b/etc/c/zlib/deflate.c index 799fb93cc04..012ea8148e8 100644 --- a/etc/c/zlib/deflate.c +++ b/etc/c/zlib/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; + " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -60,9 +60,6 @@ const char deflate_copyright[] = copyright string in the executable of your product. */ -/* =========================================================================== - * Function prototypes. - */ typedef enum { need_more, /* block not completed, need more input or more output */ block_done, /* block flush performed */ @@ -70,35 +67,16 @@ typedef enum { finish_done /* finish done, accept no more input or output */ } block_state; -typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +typedef block_state (*compress_func)(deflate_state *s, int flush); /* Compression function. Returns the block state after the call. */ -local int deflateStateCheck OF((z_streamp strm)); -local void slide_hash OF((deflate_state *s)); -local void fill_window OF((deflate_state *s)); -local block_state deflate_stored OF((deflate_state *s, int flush)); -local block_state deflate_fast OF((deflate_state *s, int flush)); +local block_state deflate_stored(deflate_state *s, int flush); +local block_state deflate_fast(deflate_state *s, int flush); #ifndef FASTEST -local block_state deflate_slow OF((deflate_state *s, int flush)); -#endif -local block_state deflate_rle OF((deflate_state *s, int flush)); -local block_state deflate_huff OF((deflate_state *s, int flush)); -local void lm_init OF((deflate_state *s)); -local void putShortMSB OF((deflate_state *s, uInt b)); -local void flush_pending OF((z_streamp strm)); -local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifdef ASMV -# pragma message("Assembler code may have bugs -- use at your own risk") - void match_init OF((void)); /* asm code initialization */ - uInt longest_match OF((deflate_state *s, IPos cur_match)); -#else -local uInt longest_match OF((deflate_state *s, IPos cur_match)); -#endif - -#ifdef ZLIB_DEBUG -local void check_match OF((deflate_state *s, IPos start, IPos match, - int length)); +local block_state deflate_slow(deflate_state *s, int flush); #endif +local block_state deflate_rle(deflate_state *s, int flush); +local block_state deflate_huff(deflate_state *s, int flush); /* =========================================================================== * Local data @@ -160,7 +138,7 @@ local const config configuration_table[10] = { * characters, so that a running hash key can be computed from the previous * key instead of complete recalculation each time. */ -#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) +#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask) /* =========================================================================== @@ -191,9 +169,9 @@ local const config configuration_table[10] = { */ #define CLEAR_HASH(s) \ do { \ - s->head[s->hash_size-1] = NIL; \ + s->head[s->hash_size - 1] = NIL; \ zmemzero((Bytef *)s->head, \ - (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ + (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ } while (0) /* =========================================================================== @@ -201,9 +179,12 @@ local const config configuration_table[10] = { * bit values at the expense of memory usage). We slide even when level == 0 to * keep the hash table consistent if we switch back to level > 0 later. */ -local void slide_hash(s) - deflate_state *s; -{ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + __attribute__((no_sanitize("memory"))) +# endif +#endif +local void slide_hash(deflate_state *s) { unsigned n, m; Posf *p; uInt wsize = s->w_size; @@ -227,30 +208,177 @@ local void slide_hash(s) #endif } +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) { + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(deflate_state *s) { + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize + MAX_DIST(s)) { + + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + /* ========================================================================= */ -int ZEXPORT deflateInit_(strm, level, version, stream_size) - z_streamp strm; - int level; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, + int stream_size) { return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */ } /* ========================================================================= */ -int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, - version, stream_size) - z_streamp strm; - int level; - int method; - int windowBits; - int memLevel; - int strategy; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size) { deflate_state *s; int wrap = 1; static const char my_version[] = ZLIB_VERSION; @@ -285,6 +413,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (windowBits < 0) { /* suppress zlib wrapper */ wrap = 0; + if (windowBits < -15) + return Z_STREAM_ERROR; windowBits = -windowBits; } #ifdef GZIP @@ -314,7 +444,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->hash_bits = (uInt)memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; - s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + s->hash_shift = ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH); s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); @@ -340,11 +470,11 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, * sym_buf value to read moves forward three bytes. From that symbol, up to * 31 bits are written to pending_buf. The closest the written pending_buf * bits gets to the next sym_buf symbol to read is just before the last - * code is written. At that time, 31*(n-2) bits have been written, just - * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at - * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 + * code is written. At that time, 31*(n - 2) bits have been written, just + * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1 * symbols are written.) The closest the writing gets to what is unread is - * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and + * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and * can range from 128 to 32768. * * Therefore, at a minimum, there are 142 bits of space between what is @@ -363,7 +493,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, * symbols from which it is being constructed. */ - s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); s->pending_buf_size = (ulg)s->lit_bufsize * 4; if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || @@ -373,8 +503,14 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, deflateEnd (strm); return Z_MEM_ERROR; } +#ifdef LIT_MEM + s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); + s->l_buf = s->pending_buf + (s->lit_bufsize << 2); + s->sym_end = s->lit_bufsize - 1; +#else s->sym_buf = s->pending_buf + s->lit_bufsize; s->sym_end = (s->lit_bufsize - 1) * 3; +#endif /* We avoid equality with lit_bufsize*3 because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. @@ -390,9 +526,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -local int deflateStateCheck (strm) - z_streamp strm; -{ +local int deflateStateCheck(z_streamp strm) { deflate_state *s; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -413,11 +547,8 @@ local int deflateStateCheck (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) - z_streamp strm; - const Bytef *dictionary; - uInt dictLength; -{ +int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { deflate_state *s; uInt str, n; int wrap; @@ -482,11 +613,8 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) - z_streamp strm; - Bytef *dictionary; - uInt *dictLength; -{ +int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { deflate_state *s; uInt len; @@ -504,9 +632,7 @@ int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateResetKeep (strm) - z_streamp strm; -{ +int ZEXPORT deflateResetKeep(z_streamp strm) { deflate_state *s; if (deflateStateCheck(strm)) { @@ -541,10 +667,32 @@ int ZEXPORT deflateResetKeep (strm) return Z_OK; } +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init(deflate_state *s) { + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + /* ========================================================================= */ -int ZEXPORT deflateReset (strm) - z_streamp strm; -{ +int ZEXPORT deflateReset(z_streamp strm) { int ret; ret = deflateResetKeep(strm); @@ -554,10 +702,7 @@ int ZEXPORT deflateReset (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetHeader (strm, head) - z_streamp strm; - gz_headerp head; -{ +int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) { if (deflateStateCheck(strm) || strm->state->wrap != 2) return Z_STREAM_ERROR; strm->state->gzhead = head; @@ -565,11 +710,7 @@ int ZEXPORT deflateSetHeader (strm, head) } /* ========================================================================= */ -int ZEXPORT deflatePending (strm, pending, bits) - unsigned *pending; - int *bits; - z_streamp strm; -{ +int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; if (pending != Z_NULL) *pending = strm->state->pending; @@ -579,19 +720,21 @@ int ZEXPORT deflatePending (strm, pending, bits) } /* ========================================================================= */ -int ZEXPORT deflatePrime (strm, bits, value) - z_streamp strm; - int bits; - int value; -{ +int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { deflate_state *s; int put; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; +#ifdef LIT_MEM + if (bits < 0 || bits > 16 || + (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#else if (bits < 0 || bits > 16 || s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; +#endif do { put = Buf_size - s->bi_valid; if (put > bits) @@ -606,11 +749,7 @@ int ZEXPORT deflatePrime (strm, bits, value) } /* ========================================================================= */ -int ZEXPORT deflateParams(strm, level, strategy) - z_streamp strm; - int level; - int strategy; -{ +int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) { deflate_state *s; compress_func func; @@ -655,13 +794,8 @@ int ZEXPORT deflateParams(strm, level, strategy) } /* ========================================================================= */ -int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) - z_streamp strm; - int good_length; - int max_lazy; - int nice_length; - int max_chain; -{ +int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, + int nice_length, int max_chain) { deflate_state *s; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -674,36 +808,47 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) } /* ========================================================================= - * For the default windowBits of 15 and memLevel of 8, this function returns - * a close to exact, as well as small, upper bound on the compressed size. - * They are coded as constants here for a reason--if the #define's are - * changed, then this function needs to be changed as well. The return - * value for 15 and 8 only works for those exact settings. + * For the default windowBits of 15 and memLevel of 8, this function returns a + * close to exact, as well as small, upper bound on the compressed size. This + * is an expansion of ~0.03%, plus a small constant. + * + * For any setting other than those defaults for windowBits and memLevel, one + * of two worst case bounds is returned. This is at most an expansion of ~4% or + * ~13%, plus a small constant. * - * For any setting other than those defaults for windowBits and memLevel, - * the value returned is a conservative worst case for the maximum expansion - * resulting from using fixed blocks instead of stored blocks, which deflate - * can emit on compressed data for some combinations of the parameters. + * Both the 0.03% and 4% derive from the overhead of stored blocks. The first + * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second + * is for stored blocks of 127 bytes (the worst case memLevel == 1). The + * expansion results from five bytes of header for each stored block. * - * This function could be more sophisticated to provide closer upper bounds for - * every combination of windowBits and memLevel. But even the conservative - * upper bound of about 14% expansion does not seem onerous for output buffer - * allocation. + * The larger expansion of 13% results from a window size less than or equal to + * the symbols buffer size (windowBits <= memLevel + 7). In that case some of + * the data being compressed may have slid out of the sliding window, impeding + * a stored block from being emitted. Then the only choice is a fixed or + * dynamic block, where a fixed block limits the maximum expansion to 9 bits + * per 8-bit byte, plus 10 bits for every block. The smallest block size for + * which this can occur is 255 (memLevel == 2). + * + * Shifts are used to approximate divisions, for speed. */ -uLong ZEXPORT deflateBound(strm, sourceLen) - z_streamp strm; - uLong sourceLen; -{ +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { deflate_state *s; - uLong complen, wraplen; + uLong fixedlen, storelen, wraplen; + + /* upper bound for fixed blocks with 9-bit literals and length 255 + (memLevel == 2, which is the lowest that may not use stored blocks) -- + ~13% overhead plus a small constant */ + fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + + (sourceLen >> 9) + 4; - /* conservative upper bound for compressed data */ - complen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + /* upper bound for stored blocks with length 127 (memLevel == 1) -- + ~4% overhead plus a small constant */ + storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + + (sourceLen >> 11) + 7; - /* if can't get parameters, return conservative bound plus zlib wrapper */ + /* if can't get parameters, return larger bound plus a zlib wrapper */ if (deflateStateCheck(strm)) - return complen + 6; + return (fixedlen > storelen ? fixedlen : storelen) + 6; /* compute wrapper length */ s = strm->state; @@ -740,11 +885,13 @@ uLong ZEXPORT deflateBound(strm, sourceLen) wraplen = 6; } - /* if not default parameters, return conservative bound */ + /* if not default parameters, return one of the conservative bounds */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return complen + wraplen; + return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + + wraplen; - /* default settings: return tight bound for that case */ + /* default settings: return tight bound for that case -- ~0.03% overhead + plus a small constant */ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13 - 6 + wraplen; } @@ -754,10 +901,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ -local void putShortMSB (s, b) - deflate_state *s; - uInt b; -{ +local void putShortMSB(deflate_state *s, uInt b) { put_byte(s, (Byte)(b >> 8)); put_byte(s, (Byte)(b & 0xff)); } @@ -768,9 +912,7 @@ local void putShortMSB (s, b) * applications may wish to modify it to avoid allocating a large * strm->next_out buffer and copying into it. (See also read_buf()). */ -local void flush_pending(strm) - z_streamp strm; -{ +local void flush_pending(z_streamp strm) { unsigned len; deflate_state *s = strm->state; @@ -801,10 +943,7 @@ local void flush_pending(strm) } while (0) /* ========================================================================= */ -int ZEXPORT deflate (strm, flush) - z_streamp strm; - int flush; -{ +int ZEXPORT deflate(z_streamp strm, int flush) { int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; @@ -856,7 +995,7 @@ int ZEXPORT deflate (strm, flush) s->status = BUSY_STATE; if (s->status == INIT_STATE) { /* zlib header */ - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8; uInt level_flags; if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) @@ -1116,9 +1255,7 @@ int ZEXPORT deflate (strm, flush) } /* ========================================================================= */ -int ZEXPORT deflateEnd (strm) - z_streamp strm; -{ +int ZEXPORT deflateEnd(z_streamp strm) { int status; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1142,11 +1279,10 @@ int ZEXPORT deflateEnd (strm) * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ -int ZEXPORT deflateCopy (dest, source) - z_streamp dest; - z_streamp source; -{ +int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { #ifdef MAXSEG_64K + (void)dest; + (void)source; return Z_STREAM_ERROR; #else deflate_state *ds; @@ -1170,7 +1306,7 @@ int ZEXPORT deflateCopy (dest, source) ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { @@ -1181,10 +1317,15 @@ int ZEXPORT deflateCopy (dest, source) zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +#ifdef LIT_MEM + ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); + ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); +#else ds->sym_buf = ds->pending_buf + ds->lit_bufsize; +#endif ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; @@ -1194,71 +1335,6 @@ int ZEXPORT deflateCopy (dest, source) #endif /* MAXSEG_64K */ } -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->next_in buffer and copying from it. - * (See also flush_pending()). - */ -local unsigned read_buf(strm, buf, size) - z_streamp strm; - Bytef *buf; - unsigned size; -{ - unsigned len = strm->avail_in; - - if (len > size) len = size; - if (len == 0) return 0; - - strm->avail_in -= len; - - zmemcpy(buf, strm->next_in, len); - if (strm->state->wrap == 1) { - strm->adler = adler32(strm->adler, buf, len); - } -#ifdef GZIP - else if (strm->state->wrap == 2) { - strm->adler = crc32(strm->adler, buf, len); - } -#endif - strm->next_in += len; - strm->total_in += len; - - return len; -} - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -local void lm_init (s) - deflate_state *s; -{ - s->window_size = (ulg)2L*s->w_size; - - CLEAR_HASH(s); - - /* Set the default configuration parameters: - */ - s->max_lazy_match = configuration_table[s->level].max_lazy; - s->good_match = configuration_table[s->level].good_length; - s->nice_match = configuration_table[s->level].nice_length; - s->max_chain_length = configuration_table[s->level].max_chain; - - s->strstart = 0; - s->block_start = 0L; - s->lookahead = 0; - s->insert = 0; - s->match_length = s->prev_length = MIN_MATCH-1; - s->match_available = 0; - s->ins_h = 0; -#ifndef FASTEST -#ifdef ASMV - match_init(); /* initialize the asm code */ -#endif -#endif -} - #ifndef FASTEST /* =========================================================================== * Set match_start to the longest match starting at the given string and @@ -1269,14 +1345,7 @@ local void lm_init (s) * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ -#ifndef ASMV -/* For 80x86 and 680x0, an optimized version will be provided in match.asm or - * match.S. The code will be functionally equivalent. - */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ @@ -1297,10 +1366,10 @@ local uInt longest_match(s, cur_match) */ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); + register ush scan_end = *(ushf*)(scan + best_len - 1); #else register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end1 = scan[best_len - 1]; register Byte scan_end = scan[best_len]; #endif @@ -1318,7 +1387,8 @@ local uInt longest_match(s, cur_match) */ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); do { Assert(cur_match < s->strstart, "no future"); @@ -1336,43 +1406,44 @@ local uInt longest_match(s, cur_match) /* This code assumes sizeof(unsigned short) == 2. Do not use * UNALIGNED_OK if your compiler uses a different size. */ - if (*(ushf*)(match+best_len-1) != scan_end || + if (*(ushf*)(match + best_len - 1) != scan_end || *(ushf*)match != scan_start) continue; /* It is not necessary to compare scan[2] and match[2] since they are * always equal when the other bytes match, given that the hash keys * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at - * strstart+3, +5, ... up to strstart+257. We check for insufficient + * strstart + 3, + 5, up to strstart + 257. We check for insufficient * lookahead only every 4th comparison; the 128th check will be made - * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is * necessary to put more guard bytes at the end of the window, or * to check more often for insufficient lookahead. */ Assert(scan[2] == match[2], "scan[2]?"); scan++, match++; do { - } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ - /* Here, scan <= window+strstart+257 */ - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + /* Here, scan <= window + strstart + 257 */ + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); if (*scan == *match) scan++; - len = (MAX_MATCH - 1) - (int)(strend-scan); + len = (MAX_MATCH - 1) - (int)(strend - scan); scan = strend - (MAX_MATCH-1); #else /* UNALIGNED_OK */ - if (match[best_len] != scan_end || - match[best_len-1] != scan_end1 || - *match != *scan || - *++match != scan[1]) continue; + if (match[best_len] != scan_end || + match[best_len - 1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1382,7 +1453,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1391,7 +1462,8 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; @@ -1403,9 +1475,9 @@ local uInt longest_match(s, cur_match) best_len = len; if (len >= nice_match) break; #ifdef UNALIGNED_OK - scan_end = *(ushf*)(scan+best_len-1); + scan_end = *(ushf*)(scan + best_len - 1); #else - scan_end1 = scan[best_len-1]; + scan_end1 = scan[best_len - 1]; scan_end = scan[best_len]; #endif } @@ -1415,17 +1487,13 @@ local uInt longest_match(s, cur_match) if ((uInt)best_len <= s->lookahead) return (uInt)best_len; return s->lookahead; } -#endif /* ASMV */ #else /* FASTEST */ /* --------------------------------------------------------------------------- * Optimized version for FASTEST only */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ @@ -1436,7 +1504,8 @@ local uInt longest_match(s, cur_match) */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); Assert(cur_match < s->strstart, "no future"); @@ -1446,7 +1515,7 @@ local uInt longest_match(s, cur_match) */ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1456,7 +1525,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1465,7 +1534,7 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); @@ -1485,23 +1554,27 @@ local uInt longest_match(s, cur_match) /* =========================================================================== * Check that the match at match_start is indeed a match. */ -local void check_match(s, start, match, length) - deflate_state *s; - IPos start, match; - int length; -{ +local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ - if (zmemcmp(s->window + match, - s->window + start, length) != EQUAL) { - fprintf(stderr, " start %u, match %u, length %d\n", - start, match, length); + Bytef *back = s->window + (int)match, *here = s->window + start; + IPos len = length; + if (match == (IPos)-1) { + /* match starts one byte before the current window -- just compare the + subsequent length-1 bytes */ + back++; + here++; + len--; + } + if (zmemcmp(back, here, len) != EQUAL) { + fprintf(stderr, " start %u, match %d, length %d\n", + start, (int)match, length); do { - fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); - } while (--length != 0); + fprintf(stderr, "(%02x %02x)", *back++, *here++); + } while (--len != 0); z_error("invalid match"); } if (z_verbose > 1) { - fprintf(stderr,"\\[%d,%d]", start-match, length); + fprintf(stderr,"\\[%d,%d]", start - match, length); do { putc(s->window[start++], stderr); } while (--length != 0); } } @@ -1509,137 +1582,6 @@ local void check_match(s, start, match, length) # define check_match(s, start, match, length) #endif /* ZLIB_DEBUG */ -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -local void fill_window(s) - deflate_state *s; -{ - unsigned n; - unsigned more; /* Amount of free space at the end of the window. */ - uInt wsize = s->w_size; - - Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); - - /* Deal with !@#$% 64K limit: */ - if (sizeof(int) <= 2) { - if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - more = wsize; - - } else if (more == (unsigned)(-1)) { - /* Very unlikely, but possible on 16 bit machine if - * strstart == 0 && lookahead == 1 (input done a byte at time) - */ - more--; - } - } - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s->strstart >= wsize+MAX_DIST(s)) { - - zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); - s->match_start -= wsize; - s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ - s->block_start -= (long) wsize; - if (s->insert > s->strstart) - s->insert = s->strstart; - slide_hash(s); - more += wsize; - } - if (s->strm->avail_in == 0) break; - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - Assert(more >= 2, "more < 2"); - - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); - s->lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s->lookahead + s->insert >= MIN_MATCH) { - uInt str = s->strstart - s->insert; - s->ins_h = s->window[str]; - UPDATE_HASH(s, s->ins_h, s->window[str + 1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - while (s->insert) { - UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); -#ifndef FASTEST - s->prev[str & s->w_mask] = s->head[s->ins_h]; -#endif - s->head[s->ins_h] = (Pos)str; - str++; - s->insert--; - if (s->lookahead + s->insert < MIN_MATCH) - break; - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - if (s->high_water < s->window_size) { - ulg curr = s->strstart + (ulg)(s->lookahead); - ulg init; - - if (s->high_water < curr) { - /* Previous high water mark below current data -- zero WIN_INIT - * bytes or up to end of window, whichever is less. - */ - init = s->window_size - curr; - if (init > WIN_INIT) - init = WIN_INIT; - zmemzero(s->window + curr, (unsigned)init); - s->high_water = curr + init; - } - else if (s->high_water < (ulg)curr + WIN_INIT) { - /* High water mark at or above current data, but below current data - * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - * to end of window, whichever is less. - */ - init = (ulg)curr + WIN_INIT - s->high_water; - if (init > s->window_size - s->high_water) - init = s->window_size - s->high_water; - zmemzero(s->window + s->high_water, (unsigned)init); - s->high_water += init; - } - } - - Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - "not enough room for search"); -} - /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. @@ -1680,12 +1622,9 @@ local void fill_window(s) * * deflate_stored() is written to minimize the number of times an input byte is * copied. It is most efficient with large input and output buffers, which - * maximizes the opportunites to have a single copy from next_in to next_out. + * maximizes the opportunities to have a single copy from next_in to next_out. */ -local block_state deflate_stored(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_stored(deflate_state *s, int flush) { /* Smallest worthy block size when not flushing or finishing. By default * this is 32K. This can be as small as 507 bytes for memLevel == 1. For * large input and output buffers, the stored block size will be larger. @@ -1869,10 +1808,7 @@ local block_state deflate_stored(s, flush) * new strings in the dictionary only for unmatched strings or for short * matches. It is used only for the fast compression options. */ -local block_state deflate_fast(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_fast(deflate_state *s, int flush) { IPos hash_head; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ @@ -1890,7 +1826,7 @@ local block_state deflate_fast(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -1938,7 +1874,7 @@ local block_state deflate_fast(s, flush) s->strstart += s->match_length; s->match_length = 0; s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); + UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif @@ -1949,7 +1885,7 @@ local block_state deflate_fast(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -1971,10 +1907,7 @@ local block_state deflate_fast(s, flush) * evaluation for matches: a match is finally adopted only if there is * no better match at the next window position. */ -local block_state deflate_slow(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_slow(deflate_state *s, int flush) { IPos hash_head; /* head of hash chain */ int bflush; /* set if current block must be flushed */ @@ -1993,7 +1926,7 @@ local block_state deflate_slow(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -2035,17 +1968,17 @@ local block_state deflate_slow(s, flush) uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ - check_match(s, s->strstart-1, s->prev_match, s->prev_length); + check_match(s, s->strstart - 1, s->prev_match, s->prev_length); - _tr_tally_dist(s, s->strstart -1 - s->prev_match, + _tr_tally_dist(s, s->strstart - 1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not + * strstart - 1 and strstart are already inserted. If there is not * enough lookahead, the last two strings are not inserted in * the hash table. */ - s->lookahead -= s->prev_length-1; + s->lookahead -= s->prev_length - 1; s->prev_length -= 2; do { if (++s->strstart <= max_insert) { @@ -2063,8 +1996,8 @@ local block_state deflate_slow(s, flush) * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); if (bflush) { FLUSH_BLOCK_ONLY(s, 0); } @@ -2082,8 +2015,8 @@ local block_state deflate_slow(s, flush) } Assert (flush != Z_NO_FLUSH, "no flush?"); if (s->match_available) { - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); s->match_available = 0; } s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; @@ -2102,10 +2035,7 @@ local block_state deflate_slow(s, flush) * one. Do not maintain a hash table. (It will be regenerated if this run of * deflate switches away from Z_RLE.) */ -local block_state deflate_rle(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_rle(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ uInt prev; /* byte at distance one to match */ Bytef *scan, *strend; /* scan goes up to strend for length of run */ @@ -2140,7 +2070,8 @@ local block_state deflate_rle(s, flush) if (s->match_length > s->lookahead) s->match_length = s->lookahead; } - Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (uInt)(s->window_size - 1), + "wild scan"); } /* Emit match if have run of MIN_MATCH or longer, else emit literal */ @@ -2155,7 +2086,7 @@ local block_state deflate_rle(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -2175,10 +2106,7 @@ local block_state deflate_rle(s, flush) * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. * (It will be regenerated if this run of deflate switches away from Huffman.) */ -local block_state deflate_huff(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_huff(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ for (;;) { @@ -2195,7 +2123,7 @@ local block_state deflate_huff(s, flush) /* Output a literal byte */ s->match_length = 0; Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; if (bflush) FLUSH_BLOCK(s, 0); diff --git a/etc/c/zlib/deflate.h b/etc/c/zlib/deflate.h index 17c226113b0..300c6ada62b 100644 --- a/etc/c/zlib/deflate.h +++ b/etc/c/zlib/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2018 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -23,6 +23,10 @@ # define GZIP #endif +/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at + the cost of a larger memory footprint */ +/* #define LIT_MEM */ + /* =========================================================================== * Internal compression state. */ @@ -217,7 +221,14 @@ typedef struct internal_state { /* Depth of each subtree used as tie breaker for trees of equal frequency */ +#ifdef LIT_MEM +# define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ +#else +# define LIT_BUFS 4 uchf *sym_buf; /* buffer for distances and literals/lengths */ +#endif uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for @@ -239,7 +250,7 @@ typedef struct internal_state { * - I can't count above 4 */ - uInt sym_next; /* running index in sym_buf */ + uInt sym_next; /* running index in symbol buffer */ uInt sym_end; /* symbol table full when sym_next reaches this */ ulg opt_len; /* bit length of current block with optimal trees */ @@ -291,14 +302,14 @@ typedef struct internal_state { memory checker errors from longest match routines */ /* in trees.c */ -void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); -int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); -void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_init(deflate_state *s); +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last); +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); +void ZLIB_INTERNAL _tr_align(deflate_state *s); +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) @@ -318,6 +329,25 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, extern const uch ZLIB_INTERNAL _dist_code[]; #endif +#ifdef LIT_MEM +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#else # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->sym_buf[s->sym_next++] = 0; \ @@ -329,14 +359,15 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (uch)(length); \ ush dist = (ush)(distance); \ - s->sym_buf[s->sym_next++] = dist; \ - s->sym_buf[s->sym_next++] = dist >> 8; \ + s->sym_buf[s->sym_next++] = (uch)dist; \ + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ s->sym_buf[s->sym_next++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#endif #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ diff --git a/etc/c/zlib/doc/algorithm.txt b/etc/c/zlib/doc/algorithm.txt index c97f495020b..029e5a31349 100644 --- a/etc/c/zlib/doc/algorithm.txt +++ b/etc/c/zlib/doc/algorithm.txt @@ -77,7 +77,7 @@ table took no time (and if you had infinite memory), then there would only be a first level table to cover all the way to the longest code. However, building the table ends up taking a lot longer for more bits since short codes are replicated many times in such a table. What inflate() does is -simply to make the number of bits in the first table a variable, and then +simply to make the number of bits in the first table a variable, and then to set that variable for the maximum speed. For inflate, which has 286 possible codes for the literal/length tree, the size diff --git a/etc/c/zlib/gzclose.c b/etc/c/zlib/gzclose.c index caeb99a3177..48d6a86f04b 100644 --- a/etc/c/zlib/gzclose.c +++ b/etc/c/zlib/gzclose.c @@ -8,9 +8,7 @@ /* gzclose() is in a separate file so that it is linked in only if it is used. That way the other gzclose functions can be used instead to avoid linking in unneeded compression or decompression routines. */ -int ZEXPORT gzclose(file) - gzFile file; -{ +int ZEXPORT gzclose(gzFile file) { #ifndef NO_GZCOMPRESS gz_statep state; diff --git a/etc/c/zlib/gzguts.h b/etc/c/zlib/gzguts.h index 12b808ca9fa..eba72085bb7 100644 --- a/etc/c/zlib/gzguts.h +++ b/etc/c/zlib/gzguts.h @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -7,9 +7,8 @@ # ifndef _LARGEFILE_SOURCE # define _LARGEFILE_SOURCE 1 # endif -# ifdef _FILE_OFFSET_BITS -# undef _FILE_OFFSET_BITS -# endif +# undef _FILE_OFFSET_BITS +# undef _TIME_BITS #endif #ifdef HAVE_HIDDEN @@ -119,8 +118,8 @@ /* gz* functions always use library allocation functions */ #ifndef STDC - extern voidp malloc OF((uInt size)); - extern void free OF((voidpf ptr)); + extern voidp malloc(uInt size); + extern void free(voidpf ptr); #endif /* get errno and strerror definition */ @@ -136,23 +135,12 @@ # endif #endif -/* C11 no longer allows implicit declaration of functions */ -#if defined(__DMC__) -#include -#elif defined(_MSC_VER) -#include -#else -ssize_t read(int, void*, size_t); -ssize_t write(int, const void*, size_t); -int close(int); -#endif - /* provide prototypes for these when building zlib without LFS */ #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); #endif /* default memLevel */ @@ -214,17 +202,13 @@ typedef struct { typedef gz_state FAR *gz_statep; /* shared functions */ -void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +void ZLIB_INTERNAL gz_error(gz_statep, int, const char *); #if defined UNDER_CE -char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +char ZLIB_INTERNAL *gz_strwinerror(DWORD error); #endif /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t value -- needed when comparing unsigned to z_off64_t, which is signed (possible z_off64_t types off_t, off64_t, and long are all signed) */ -#ifdef INT_MAX -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) -#else -unsigned ZLIB_INTERNAL gz_intmax OF((void)); -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) -#endif +unsigned ZLIB_INTERNAL gz_intmax(void); +#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) diff --git a/etc/c/zlib/gzlib.c b/etc/c/zlib/gzlib.c index 387e96806ac..c50a5202502 100644 --- a/etc/c/zlib/gzlib.c +++ b/etc/c/zlib/gzlib.c @@ -1,5 +1,5 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -15,10 +15,6 @@ #endif #endif -/* Local functions */ -local void gz_reset OF((gz_statep)); -local gzFile gz_open OF((const void *, int, const char *)); - #if defined UNDER_CE /* Map the Windows error number in ERROR to a locale-dependent error message @@ -30,9 +26,7 @@ local gzFile gz_open OF((const void *, int, const char *)); The gz_strwinerror function does not change the current setting of GetLastError. */ -char ZLIB_INTERNAL *gz_strwinerror (error) - DWORD error; -{ +char ZLIB_INTERNAL *gz_strwinerror(DWORD error) { static char buf[1024]; wchar_t *msgbuf; @@ -72,9 +66,7 @@ char ZLIB_INTERNAL *gz_strwinerror (error) #endif /* UNDER_CE */ /* Reset gzip file state */ -local void gz_reset(state) - gz_statep state; -{ +local void gz_reset(gz_statep state) { state->x.have = 0; /* no output data available */ if (state->mode == GZ_READ) { /* for reading ... */ state->eof = 0; /* not at end of file */ @@ -90,11 +82,7 @@ local void gz_reset(state) } /* Open a gzip file either by name or file descriptor. */ -local gzFile gz_open(path, fd, mode) - const void *path; - int fd; - const char *mode; -{ +local gzFile gz_open(const void *path, int fd, const char *mode) { gz_statep state; z_size_t len; int oflag; @@ -269,26 +257,17 @@ local gzFile gz_open(path, fd, mode) } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen64(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen64(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzdopen(fd, mode) - int fd; - const char *mode; -{ +gzFile ZEXPORT gzdopen(int fd, const char *mode) { char *path; /* identifier for error messages */ gzFile gz; @@ -306,19 +285,13 @@ gzFile ZEXPORT gzdopen(fd, mode) /* -- see zlib.h -- */ #ifdef WIDECHAR -gzFile ZEXPORT gzopen_w(path, mode) - const wchar_t *path; - const char *mode; -{ +gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) { return gz_open(path, -2, mode); } #endif /* -- see zlib.h -- */ -int ZEXPORT gzbuffer(file, size) - gzFile file; - unsigned size; -{ +int ZEXPORT gzbuffer(gzFile file, unsigned size) { gz_statep state; /* get internal structure and check integrity */ @@ -335,16 +308,14 @@ int ZEXPORT gzbuffer(file, size) /* check and set requested size */ if ((size << 1) < size) return -1; /* need to be able to double it */ - if (size < 2) - size = 2; /* need two bytes to check magic header */ + if (size < 8) + size = 8; /* needed to behave well with flushing */ state->want = size; return 0; } /* -- see zlib.h -- */ -int ZEXPORT gzrewind(file) - gzFile file; -{ +int ZEXPORT gzrewind(gzFile file) { gz_statep state; /* get internal structure */ @@ -365,11 +336,7 @@ int ZEXPORT gzrewind(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzseek64(file, offset, whence) - gzFile file; - z_off64_t offset; - int whence; -{ +z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) { unsigned n; z_off64_t ret; gz_statep state; @@ -442,11 +409,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzseek(file, offset, whence) - gzFile file; - z_off_t offset; - int whence; -{ +z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) { z_off64_t ret; ret = gzseek64(file, (z_off64_t)offset, whence); @@ -454,9 +417,7 @@ z_off_t ZEXPORT gzseek(file, offset, whence) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gztell64(file) - gzFile file; -{ +z_off64_t ZEXPORT gztell64(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -471,9 +432,7 @@ z_off64_t ZEXPORT gztell64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gztell(file) - gzFile file; -{ +z_off_t ZEXPORT gztell(gzFile file) { z_off64_t ret; ret = gztell64(file); @@ -481,9 +440,7 @@ z_off_t ZEXPORT gztell(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzoffset64(file) - gzFile file; -{ +z_off64_t ZEXPORT gzoffset64(gzFile file) { z_off64_t offset; gz_statep state; @@ -504,9 +461,7 @@ z_off64_t ZEXPORT gzoffset64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzoffset(file) - gzFile file; -{ +z_off_t ZEXPORT gzoffset(gzFile file) { z_off64_t ret; ret = gzoffset64(file); @@ -514,9 +469,7 @@ z_off_t ZEXPORT gzoffset(file) } /* -- see zlib.h -- */ -int ZEXPORT gzeof(file) - gzFile file; -{ +int ZEXPORT gzeof(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -531,10 +484,7 @@ int ZEXPORT gzeof(file) } /* -- see zlib.h -- */ -const char * ZEXPORT gzerror(file, errnum) - gzFile file; - int *errnum; -{ +const char * ZEXPORT gzerror(gzFile file, int *errnum) { gz_statep state; /* get internal structure and check integrity */ @@ -552,9 +502,7 @@ const char * ZEXPORT gzerror(file, errnum) } /* -- see zlib.h -- */ -void ZEXPORT gzclearerr(file) - gzFile file; -{ +void ZEXPORT gzclearerr(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -578,11 +526,7 @@ void ZEXPORT gzclearerr(file) memory). Simply save the error message as a static string. If there is an allocation failure constructing the error message, then convert the error to out of memory. */ -void ZLIB_INTERNAL gz_error(state, err, msg) - gz_statep state; - int err; - const char *msg; -{ +void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { /* free previously allocated message and clear */ if (state->msg != NULL) { if (state->err != Z_MEM_ERROR) @@ -619,21 +563,20 @@ void ZLIB_INTERNAL gz_error(state, err, msg) #endif } -#ifndef INT_MAX /* portably return maximum value for an int (when limits.h presumed not available) -- we need to do this to cover cases where 2's complement not used, since C standard permits 1's complement and sign-bit representations, otherwise we could just use ((unsigned)-1) >> 1 */ -unsigned ZLIB_INTERNAL gz_intmax() -{ - unsigned p, q; - - p = 1; +unsigned ZLIB_INTERNAL gz_intmax(void) { +#ifdef INT_MAX + return INT_MAX; +#else + unsigned p = 1, q; do { q = p; p <<= 1; p++; } while (p > q); return q >> 1; -} #endif +} diff --git a/etc/c/zlib/gzread.c b/etc/c/zlib/gzread.c index 884c9bfe4cf..4168cbc8875 100644 --- a/etc/c/zlib/gzread.c +++ b/etc/c/zlib/gzread.c @@ -5,25 +5,12 @@ #include "gzguts.h" -/* Local functions */ -local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); -local int gz_avail OF((gz_statep)); -local int gz_look OF((gz_statep)); -local int gz_decomp OF((gz_statep)); -local int gz_fetch OF((gz_statep)); -local int gz_skip OF((gz_statep, z_off64_t)); -local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); - /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from state->fd, and update state->eof, state->err, and state->msg as appropriate. This function needs to loop on read(), since read() is not guaranteed to read the number of bytes requested, depending on the type of descriptor. */ -local int gz_load(state, buf, len, have) - gz_statep state; - unsigned char *buf; - unsigned len; - unsigned *have; -{ +local int gz_load(gz_statep state, unsigned char *buf, unsigned len, + unsigned *have) { int ret; unsigned get, max = ((unsigned)-1 >> 2) + 1; @@ -53,9 +40,7 @@ local int gz_load(state, buf, len, have) If strm->avail_in != 0, then the current data is moved to the beginning of the input buffer, and then the remainder of the buffer is loaded with the available data from the input file. */ -local int gz_avail(state) - gz_statep state; -{ +local int gz_avail(gz_statep state) { unsigned got; z_streamp strm = &(state->strm); @@ -88,9 +73,7 @@ local int gz_avail(state) case, all further file reads will be directly to either the output buffer or a user buffer. If decompressing, the inflate state will be initialized. gz_look() will return 0 on success or -1 on failure. */ -local int gz_look(state) - gz_statep state; -{ +local int gz_look(gz_statep state) { z_streamp strm = &(state->strm); /* allocate read buffers and inflate memory */ @@ -157,11 +140,9 @@ local int gz_look(state) the output buffer is larger than the input buffer, which also assures space for gzungetc() */ state->x.next = state->out; - if (strm->avail_in) { - memcpy(state->x.next, strm->next_in, strm->avail_in); - state->x.have = strm->avail_in; - strm->avail_in = 0; - } + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; state->how = COPY; state->direct = 1; return 0; @@ -172,9 +153,7 @@ local int gz_look(state) data. If the gzip stream completes, state->how is reset to LOOK to look for the next gzip stream or raw data, once state->x.have is depleted. Returns 0 on success, -1 on failure. */ -local int gz_decomp(state) - gz_statep state; -{ +local int gz_decomp(gz_statep state) { int ret = Z_OK; unsigned had; z_streamp strm = &(state->strm); @@ -226,9 +205,7 @@ local int gz_decomp(state) looked for to determine whether to copy or decompress. Returns -1 on error, otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the end of the input file has been reached and all data has been processed. */ -local int gz_fetch(state) - gz_statep state; -{ +local int gz_fetch(gz_statep state) { z_streamp strm = &(state->strm); do { @@ -256,10 +233,7 @@ local int gz_fetch(state) } /* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ -local int gz_skip(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_skip(gz_statep state, z_off64_t len) { unsigned n; /* skip over len bytes or reach end-of-file, whichever comes first */ @@ -291,11 +265,7 @@ local int gz_skip(state, len) input. Return the number of bytes read. If zero is returned, either the end of file was reached, or there was an error. state->err must be consulted in that case to determine which. */ -local z_size_t gz_read(state, buf, len) - gz_statep state; - voidp buf; - z_size_t len; -{ +local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) { z_size_t got; unsigned n; @@ -372,11 +342,7 @@ local z_size_t gz_read(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzread(file, buf, len) - gzFile file; - voidp buf; - unsigned len; -{ +int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -408,12 +374,7 @@ int ZEXPORT gzread(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfread(buf, size, nitems, file) - voidp buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) { z_size_t len; gz_statep state; @@ -444,9 +405,7 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file) #else # undef gzgetc #endif -int ZEXPORT gzgetc(file) - gzFile file; -{ +int ZEXPORT gzgetc(gzFile file) { unsigned char buf[1]; gz_statep state; @@ -471,17 +430,12 @@ int ZEXPORT gzgetc(file) return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; } -int ZEXPORT gzgetc_(file) -gzFile file; -{ +int ZEXPORT gzgetc_(gzFile file) { return gzgetc(file); } /* -- see zlib.h -- */ -int ZEXPORT gzungetc(c, file) - int c; - gzFile file; -{ +int ZEXPORT gzungetc(int c, gzFile file) { gz_statep state; /* get internal structure */ @@ -489,6 +443,10 @@ int ZEXPORT gzungetc(c, file) return -1; state = (gz_statep)file; + /* in case this was just opened, set up the input buffer */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + /* check that we're reading and that there's no (serious) error */ if (state->mode != GZ_READ || (state->err != Z_OK && state->err != Z_BUF_ERROR)) @@ -538,11 +496,7 @@ int ZEXPORT gzungetc(c, file) } /* -- see zlib.h -- */ -char * ZEXPORT gzgets(file, buf, len) - gzFile file; - char *buf; - int len; -{ +char * ZEXPORT gzgets(gzFile file, char *buf, int len) { unsigned left, n; char *str; unsigned char *eol; @@ -602,9 +556,7 @@ char * ZEXPORT gzgets(file, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzdirect(file) - gzFile file; -{ +int ZEXPORT gzdirect(gzFile file) { gz_statep state; /* get internal structure */ @@ -622,9 +574,7 @@ int ZEXPORT gzdirect(file) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_r(file) - gzFile file; -{ +int ZEXPORT gzclose_r(gzFile file) { int ret, err; gz_statep state; diff --git a/etc/c/zlib/gzwrite.c b/etc/c/zlib/gzwrite.c index a8ffc8f53da..2940f5cd660 100644 --- a/etc/c/zlib/gzwrite.c +++ b/etc/c/zlib/gzwrite.c @@ -5,18 +5,10 @@ #include "gzguts.h" -/* Local functions */ -local int gz_init OF((gz_statep)); -local int gz_comp OF((gz_statep, int)); -local int gz_zero OF((gz_statep, z_off64_t)); -local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); - /* Initialize state for writing a gzip file. Mark initialization by setting state->size to non-zero. Return -1 on a memory allocation failure, or 0 on success. */ -local int gz_init(state) - gz_statep state; -{ +local int gz_init(gz_statep state) { int ret; z_streamp strm = &(state->strm); @@ -70,10 +62,7 @@ local int gz_init(state) deflate() flush value. If flush is Z_FINISH, then the deflate() state is reset to start a new gzip stream. If gz->direct is true, then simply write to the output file without compressing, and ignore flush. */ -local int gz_comp(state, flush) - gz_statep state; - int flush; -{ +local int gz_comp(gz_statep state, int flush) { int ret, writ; unsigned have, put, max = ((unsigned)-1 >> 2) + 1; z_streamp strm = &(state->strm); @@ -151,10 +140,7 @@ local int gz_comp(state, flush) /* Compress len zeros to output. Return -1 on a write error or memory allocation failure by gz_comp(), or 0 on success. */ -local int gz_zero(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_zero(gz_statep state, z_off64_t len) { int first; unsigned n; z_streamp strm = &(state->strm); @@ -184,11 +170,7 @@ local int gz_zero(state, len) /* Write len bytes from buf to file. Return the number of bytes written. If the returned value is less than len, then there was an error. */ -local z_size_t gz_write(state, buf, len) - gz_statep state; - voidpc buf; - z_size_t len; -{ +local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { z_size_t put = len; /* if len is zero, avoid unnecessary operations */ @@ -252,11 +234,7 @@ local z_size_t gz_write(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzwrite(file, buf, len) - gzFile file; - voidpc buf; - unsigned len; -{ +int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -280,12 +258,8 @@ int ZEXPORT gzwrite(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) - voidpc buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, + gzFile file) { z_size_t len; gz_statep state; @@ -310,10 +284,7 @@ z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) } /* -- see zlib.h -- */ -int ZEXPORT gzputc(file, c) - gzFile file; - int c; -{ +int ZEXPORT gzputc(gzFile file, int c) { unsigned have; unsigned char buf[1]; gz_statep state; @@ -358,10 +329,7 @@ int ZEXPORT gzputc(file, c) } /* -- see zlib.h -- */ -int ZEXPORT gzputs(file, s) - gzFile file; - const char *s; -{ +int ZEXPORT gzputs(gzFile file, const char *s) { z_size_t len, put; gz_statep state; @@ -388,8 +356,7 @@ int ZEXPORT gzputs(file, s) #include /* -- see zlib.h -- */ -int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) -{ +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { int len; unsigned left; char *next; @@ -460,12 +427,16 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) return len; } -int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) { va_list va; int ret; +// needed on Win64 - MS __va_start intrinsic not supported by importC yet +#if __IMPORTC__ + __builtin_va_start(va, format); +#else va_start(va, format); +#endif ret = gzvprintf(file, format, va); va_end(va); return ret; @@ -474,13 +445,10 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - gzFile file; - const char *format; - int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, + int a4, int a5, int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, int a15, int a16, + int a17, int a18, int a19, int a20) { unsigned len, left; char *next; gz_statep state; @@ -562,10 +530,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, #endif /* -- see zlib.h -- */ -int ZEXPORT gzflush(file, flush) - gzFile file; - int flush; -{ +int ZEXPORT gzflush(gzFile file, int flush) { gz_statep state; /* get internal structure */ @@ -594,11 +559,7 @@ int ZEXPORT gzflush(file, flush) } /* -- see zlib.h -- */ -int ZEXPORT gzsetparams(file, level, strategy) - gzFile file; - int level; - int strategy; -{ +int ZEXPORT gzsetparams(gzFile file, int level, int strategy) { gz_statep state; z_streamp strm; @@ -609,7 +570,7 @@ int ZEXPORT gzsetparams(file, level, strategy) strm = &(state->strm); /* check that we're writing and that there's no error */ - if (state->mode != GZ_WRITE || state->err != Z_OK) + if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) return Z_STREAM_ERROR; /* if no change is requested, then do nothing */ @@ -636,9 +597,7 @@ int ZEXPORT gzsetparams(file, level, strategy) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_w(file) - gzFile file; -{ +int ZEXPORT gzclose_w(gzFile file) { int ret = Z_OK; gz_statep state; diff --git a/etc/c/zlib/infback.c b/etc/c/zlib/infback.c index a390c58e816..e7b25b307a3 100644 --- a/etc/c/zlib/infback.c +++ b/etc/c/zlib/infback.c @@ -15,9 +15,6 @@ #include "inflate.h" #include "inffast.h" -/* function prototypes */ -local void fixedtables OF((struct inflate_state FAR *state)); - /* strm provides memory allocation functions in zalloc and zfree, or Z_NULL to use the library memory allocation functions. @@ -25,13 +22,9 @@ local void fixedtables OF((struct inflate_state FAR *state)); windowBits is in the range 8..15, and window is a user-supplied window and output buffer that is 2**windowBits bytes. */ -int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) -z_streamp strm; -int windowBits; -unsigned char FAR *window; -const char *version; -int stream_size; -{ +int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, const char *version, + int stream_size) { struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -66,6 +59,7 @@ int stream_size; state->window = window; state->wnext = 0; state->whave = 0; + state->sane = 1; return Z_OK; } @@ -79,9 +73,7 @@ int stream_size; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -247,13 +239,8 @@ struct inflate_state FAR *state; inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ -int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) -z_streamp strm; -in_func in; -void FAR *in_desc; -out_func out; -void FAR *out_desc; -{ +int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -605,33 +592,33 @@ void FAR *out_desc; break; case DONE: - /* inflate stream terminated properly -- write leftover output */ + /* inflate stream terminated properly */ ret = Z_STREAM_END; - if (left < state->wsize) { - if (out(out_desc, state->window, state->wsize - left)) - ret = Z_BUF_ERROR; - } goto inf_leave; case BAD: ret = Z_DATA_ERROR; goto inf_leave; - default: /* can't happen, but makes compilers happy */ + default: + /* can't happen, but makes compilers happy */ ret = Z_STREAM_ERROR; goto inf_leave; } - /* Return unused input */ + /* Write leftover output and return unused input */ inf_leave: + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left) && + ret == Z_STREAM_END) + ret = Z_BUF_ERROR; + } strm->next_in = next; strm->avail_in = have; return ret; } -int ZEXPORT inflateBackEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateBackEnd(z_streamp strm) { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) return Z_STREAM_ERROR; ZFREE(strm, strm->state); diff --git a/etc/c/zlib/inffast.c b/etc/c/zlib/inffast.c index 1fec7f363fa..9354676e786 100644 --- a/etc/c/zlib/inffast.c +++ b/etc/c/zlib/inffast.c @@ -47,10 +47,7 @@ requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ -void ZLIB_INTERNAL inflate_fast(strm, start) -z_streamp strm; -unsigned start; /* inflate()'s starting value for strm->avail_out */ -{ +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) { struct inflate_state FAR *state; z_const unsigned char FAR *in; /* local strm->next_in */ z_const unsigned char FAR *last; /* have enough input while in < last */ diff --git a/etc/c/zlib/inffast.h b/etc/c/zlib/inffast.h index e5c1aa4ca8c..49c6d156c5c 100644 --- a/etc/c/zlib/inffast.h +++ b/etc/c/zlib/inffast.h @@ -8,4 +8,4 @@ subject to change. Applications should only use zlib.h. */ -void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start); diff --git a/etc/c/zlib/inflate.c b/etc/c/zlib/inflate.c index 2a3c4fe9846..94ecff015a9 100644 --- a/etc/c/zlib/inflate.c +++ b/etc/c/zlib/inflate.c @@ -91,20 +91,7 @@ # endif #endif -/* function prototypes */ -local int inflateStateCheck OF((z_streamp strm)); -local void fixedtables OF((struct inflate_state FAR *state)); -local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, - unsigned copy)); -#ifdef BUILDFIXED - void makefixed OF((void)); -#endif -local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, - unsigned len)); - -local int inflateStateCheck(strm) -z_streamp strm; -{ +local int inflateStateCheck(z_streamp strm) { struct inflate_state FAR *state; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -116,9 +103,7 @@ z_streamp strm; return 0; } -int ZEXPORT inflateResetKeep(strm) -z_streamp strm; -{ +int ZEXPORT inflateResetKeep(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -142,9 +127,7 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateReset(strm) -z_streamp strm; -{ +int ZEXPORT inflateReset(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -155,10 +138,7 @@ z_streamp strm; return inflateResetKeep(strm); } -int ZEXPORT inflateReset2(strm, windowBits) -z_streamp strm; -int windowBits; -{ +int ZEXPORT inflateReset2(z_streamp strm, int windowBits) { int wrap; struct inflate_state FAR *state; @@ -168,6 +148,8 @@ int windowBits; /* extract wrap request from windowBits parameter */ if (windowBits < 0) { + if (windowBits < -15) + return Z_STREAM_ERROR; wrap = 0; windowBits = -windowBits; } @@ -193,12 +175,8 @@ int windowBits; return inflateReset(strm); } -int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) -z_streamp strm; -int windowBits; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size) { int ret; struct inflate_state FAR *state; @@ -237,22 +215,17 @@ int stream_size; return ret; } -int ZEXPORT inflateInit_(strm, version, stream_size) -z_streamp strm; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit_(z_streamp strm, const char *version, + int stream_size) { return inflateInit2_(strm, DEF_WBITS, version, stream_size); } -int ZEXPORT inflatePrime(strm, bits, value) -z_streamp strm; -int bits; -int value; -{ +int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; state = (struct inflate_state FAR *)strm->state; if (bits < 0) { state->hold = 0; @@ -276,9 +249,7 @@ int value; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -340,7 +311,7 @@ struct inflate_state FAR *state; a.out > inffixed.h */ -void makefixed() +void makefixed(void) { unsigned low, size; struct inflate_state state; @@ -394,11 +365,7 @@ void makefixed() output will fall in the output data, making match copies simpler and faster. The advantage may be dependent on the size of the processor's data caches. */ -local int updatewindow(strm, end, copy) -z_streamp strm; -const Bytef *end; -unsigned copy; -{ +local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) { struct inflate_state FAR *state; unsigned dist; @@ -620,10 +587,7 @@ unsigned copy; will return Z_BUF_ERROR if it has not reached the end of the stream. */ -int ZEXPORT inflate(strm, flush) -z_streamp strm; -int flush; -{ +int ZEXPORT inflate(z_streamp strm, int flush) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -1299,9 +1263,7 @@ int flush; return ret; } -int ZEXPORT inflateEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateEnd(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1313,11 +1275,8 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) -z_streamp strm; -Bytef *dictionary; -uInt *dictLength; -{ +int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { struct inflate_state FAR *state; /* check state */ @@ -1336,11 +1295,8 @@ uInt *dictLength; return Z_OK; } -int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) -z_streamp strm; -const Bytef *dictionary; -uInt dictLength; -{ +int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { struct inflate_state FAR *state; unsigned long dictid; int ret; @@ -1371,10 +1327,7 @@ uInt dictLength; return Z_OK; } -int ZEXPORT inflateGetHeader(strm, head) -z_streamp strm; -gz_headerp head; -{ +int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) { struct inflate_state FAR *state; /* check state */ @@ -1399,11 +1352,8 @@ gz_headerp head; called again with more data and the *have state. *have is initialized to zero for the first call. */ -local unsigned syncsearch(have, buf, len) -unsigned FAR *have; -const unsigned char FAR *buf; -unsigned len; -{ +local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, + unsigned len) { unsigned got; unsigned next; @@ -1422,9 +1372,7 @@ unsigned len; return next; } -int ZEXPORT inflateSync(strm) -z_streamp strm; -{ +int ZEXPORT inflateSync(z_streamp strm) { unsigned len; /* number of bytes to look at or looked at */ int flags; /* temporary to save header status */ unsigned long in, out; /* temporary to save total_in and total_out */ @@ -1439,7 +1387,7 @@ z_streamp strm; /* if first time, start search in bit buffer */ if (state->mode != SYNC) { state->mode = SYNC; - state->hold <<= state->bits & 7; + state->hold >>= state->bits & 7; state->bits -= state->bits & 7; len = 0; while (state->bits >= 8) { @@ -1480,9 +1428,7 @@ z_streamp strm; block. When decompressing, PPP checks that at the end of input packet, inflate is waiting for these length bytes. */ -int ZEXPORT inflateSyncPoint(strm) -z_streamp strm; -{ +int ZEXPORT inflateSyncPoint(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1490,10 +1436,7 @@ z_streamp strm; return state->mode == STORED && state->bits == 0; } -int ZEXPORT inflateCopy(dest, source) -z_streamp dest; -z_streamp source; -{ +int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) { struct inflate_state FAR *state; struct inflate_state FAR *copy; unsigned char FAR *window; @@ -1537,10 +1480,7 @@ z_streamp source; return Z_OK; } -int ZEXPORT inflateUndermine(strm, subvert) -z_streamp strm; -int subvert; -{ +int ZEXPORT inflateUndermine(z_streamp strm, int subvert) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1555,10 +1495,7 @@ int subvert; #endif } -int ZEXPORT inflateValidate(strm, check) -z_streamp strm; -int check; -{ +int ZEXPORT inflateValidate(z_streamp strm, int check) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1570,9 +1507,7 @@ int check; return Z_OK; } -long ZEXPORT inflateMark(strm) -z_streamp strm; -{ +long ZEXPORT inflateMark(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) @@ -1583,9 +1518,7 @@ z_streamp strm; (state->mode == MATCH ? state->was - state->length : 0)); } -unsigned long ZEXPORT inflateCodesUsed(strm) -z_streamp strm; -{ +unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return (unsigned long)-1; state = (struct inflate_state FAR *)strm->state; diff --git a/etc/c/zlib/inftrees.c b/etc/c/zlib/inftrees.c index 09462a740b1..98cfe164458 100644 --- a/etc/c/zlib/inftrees.c +++ b/etc/c/zlib/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; + " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,14 +29,9 @@ const char inflate_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) -codetype type; -unsigned short FAR *lens; -unsigned codes; -code FAR * FAR *table; -unsigned FAR *bits; -unsigned short FAR *work; -{ +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work) { unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */ @@ -62,7 +57,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/etc/c/zlib/inftrees.h b/etc/c/zlib/inftrees.h index baa53a0b1a1..396f74b5da7 100644 --- a/etc/c/zlib/inftrees.h +++ b/etc/c/zlib/inftrees.h @@ -38,11 +38,11 @@ typedef struct { /* Maximum size of the dynamic table. The maximum number of code structures is 1444, which is the sum of 852 for literal/length codes and 592 for distance codes. These values were found by exhaustive searches using the program - examples/enough.c found in the zlib distribtution. The arguments to that + examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes - returns returns 852, and "enough 30 6 15" for distance codes returns 592. - The initial root table size (9 or 6) is found in the fifth argument of the + returns 852, and "enough 30 6 15" for distance codes returns 592. The + initial root table size (9 or 6) is found in the fifth argument of the inflate_table() calls in inflate.c and infback.c. If the root table size is changed, then these maximum sizes would be need to be recalculated and updated. */ @@ -57,6 +57,6 @@ typedef enum { DISTS } codetype; -int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, - unsigned FAR *bits, unsigned short FAR *work)); +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/etc/c/zlib/linux.mak b/etc/c/zlib/linux.mak deleted file mode 100644 index d6d5a77d0db..00000000000 --- a/etc/c/zlib/linux.mak +++ /dev/null @@ -1,95 +0,0 @@ -# Makefile for zlib - -CC=gcc -LD=link -CFLAGS=-I. -O -g -DHAVE_UNISTD_H -DHAVE_STDARG_H -LDFLAGS= -O=.o - -.c.o: - "$(CC)" -c $(CFLAGS) $* - -.d.o: - "$(DMD)" -c $(DFLAGS) $* - -# variables -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - -all: zlib.a example infcover minigzip - -adler32.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.o: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.o: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.o: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.o: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - -example.o: test/example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -infcover.o: test/infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -minigzip.o: test/minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -zlib.a: $(OBJS) - ar -r $@ $(OBJS) - -example: example.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ example.o zlib.a - -infcover: infcover.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ infcover.o zlib.a - -minigzip: minigzip.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ minigzip.o zlib.a - -test: example infcover minigzip - ./example - ./infcover - echo hello world | ./minigzip | ./minigzip -d - -clean: - $(RM) $(OBJS) zlib.a example.o example infcover.o infcover minigzip.o minigzip foo.gz - diff --git a/etc/c/zlib/osx.mak b/etc/c/zlib/osx.mak deleted file mode 100644 index cee494754a6..00000000000 --- a/etc/c/zlib/osx.mak +++ /dev/null @@ -1,99 +0,0 @@ -# Makefile for zlib - -CC=gcc -LD=link -CFLAGS=-I. -O -g -DHAVE_UNISTD_H -DHAVE_STDARG_H -ifeq (64,$(MODEL)) - CFLAGS+=--target=x86_64-darwin-apple # ARM cpu is not supported by dmd -endif - -LDFLAGS= -O=.o - -.c.o: - "$(CC)" -c $(CFLAGS) $* - -.d.o: - "$(DMD)" -c $(DFLAGS) $* - -# variables -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - -all: zlib.a example infcover minigzip - -adler32.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.o: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.o: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.o: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.o: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.o: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.o: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.o: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - -example.o: test/example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -infcover.o: test/infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -minigzip.o: test/minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test/$*.c - -zlib.a: $(OBJS) - ar -r $@ $(OBJS) - -example: example.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ example.o zlib.a - -infcover: infcover.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ infcover.o zlib.a - -minigzip: minigzip.o zlib.a - "$(CC)" $(LDFLAGS) -o $@ minigzip.o zlib.a - -test: example infcover minigzip - ./example - ./infcover - echo hello world | ./minigzip | ./minigzip -d - -clean: - $(RM) $(OBJS) zlib.a example.o example infcover.o infcover minigzip.o minigzip foo.gz - diff --git a/etc/c/zlib/test/example.c b/etc/c/zlib/test/example.c index 949f4f6256f..c3521dd5934 100644 --- a/etc/c/zlib/test/example.c +++ b/etc/c/zlib/test/example.c @@ -34,37 +34,14 @@ static z_const char hello[] = "hello, hello!"; static const char dictionary[] = "hello"; static uLong dictId; /* Adler32 value of the dictionary */ -void test_deflate OF((Byte *compr, uLong comprLen)); -void test_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_large_deflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_large_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_flush OF((Byte *compr, uLong *comprLen)); -void test_sync OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_dict_deflate OF((Byte *compr, uLong comprLen)); -void test_dict_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -int main OF((int argc, char *argv[])); - - #ifdef Z_SOLO -void *myalloc OF((void *, unsigned, unsigned)); -void myfree OF((void *, void *)); - -void *myalloc(q, n, m) - void *q; - unsigned n, m; -{ +static void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(void *q, void *p) -{ +static void myfree(void *q, void *p) { (void)q; free(p); } @@ -77,18 +54,11 @@ static free_func zfree = myfree; static alloc_func zalloc = (alloc_func)0; static free_func zfree = (free_func)0; -void test_compress OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_gzio OF((const char *fname, - Byte *uncompr, uLong uncomprLen)); - /* =========================================================================== * Test compress() and uncompress() */ -void test_compress(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; uLong len = (uLong)strlen(hello)+1; @@ -111,11 +81,7 @@ void test_compress(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test read/write of .gz files */ -void test_gzio(fname, uncompr, uncomprLen) - const char *fname; /* compressed file name */ - Byte *uncompr; - uLong uncomprLen; -{ +static void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { #ifdef NO_GZCOMPRESS fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); #else @@ -197,10 +163,7 @@ void test_gzio(fname, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with small buffers */ -void test_deflate(compr, comprLen) - Byte *compr; - uLong comprLen; -{ +static void test_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; uLong len = (uLong)strlen(hello)+1; @@ -235,10 +198,8 @@ void test_deflate(compr, comprLen) /* =========================================================================== * Test inflate() with small buffers */ -void test_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -276,10 +237,8 @@ void test_inflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with large buffers and dynamic change of compression level */ -void test_large_deflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { z_stream c_stream; /* compression stream */ int err; @@ -308,7 +267,7 @@ void test_large_deflate(compr, comprLen, uncompr, uncomprLen) /* Feed in already compressed data and switch to no compression: */ deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); c_stream.next_in = compr; - c_stream.avail_in = (uInt)comprLen/2; + c_stream.avail_in = (uInt)uncomprLen/2; err = deflate(&c_stream, Z_NO_FLUSH); CHECK_ERR(err, "deflate"); @@ -331,10 +290,8 @@ void test_large_deflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test inflate() with large buffers */ -void test_large_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -361,7 +318,7 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen) err = inflateEnd(&d_stream); CHECK_ERR(err, "inflateEnd"); - if (d_stream.total_out != 2*uncomprLen + comprLen/2) { + if (d_stream.total_out != 2*uncomprLen + uncomprLen/2) { fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out); exit(1); } else { @@ -372,10 +329,7 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with full flush */ -void test_flush(compr, comprLen) - Byte *compr; - uLong *comprLen; -{ +static void test_flush(Byte *compr, uLong *comprLen) { z_stream c_stream; /* compression stream */ int err; uInt len = (uInt)strlen(hello)+1; @@ -410,10 +364,8 @@ void test_flush(compr, comprLen) /* =========================================================================== * Test inflateSync() */ -void test_sync(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -453,10 +405,7 @@ void test_sync(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with preset dictionary */ -void test_dict_deflate(compr, comprLen) - Byte *compr; - uLong comprLen; -{ +static void test_dict_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; @@ -490,10 +439,8 @@ void test_dict_deflate(compr, comprLen) /* =========================================================================== * Test inflate() with a preset dictionary */ -void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +static void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -541,13 +488,10 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) * Usage: example [output.gz [input.gz]] */ -int main(argc, argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { Byte *compr, *uncompr; - uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */ - uLong uncomprLen = comprLen; + uLong uncomprLen = 20000; + uLong comprLen = 3 * uncomprLen; static const char* myVersion = ZLIB_VERSION; if (zlibVersion()[0] != myVersion[0]) { @@ -555,7 +499,8 @@ int main(argc, argv) exit(1); } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) { - fprintf(stderr, "warning: different zlib version\n"); + fprintf(stderr, "warning: different zlib version linked: %s\n", + zlibVersion()); } printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n", @@ -589,7 +534,7 @@ int main(argc, argv) test_flush(compr, &comprLen); test_sync(compr, comprLen, uncompr, uncomprLen); - comprLen = uncomprLen; + comprLen = 3 * uncomprLen; test_dict_deflate(compr, comprLen); test_dict_inflate(compr, comprLen, uncompr, uncomprLen); diff --git a/etc/c/zlib/test/infcover.c b/etc/c/zlib/test/infcover.c index 2be01646cec..8912c403dd2 100644 --- a/etc/c/zlib/test/infcover.c +++ b/etc/c/zlib/test/infcover.c @@ -373,7 +373,7 @@ local void cover_support(void) mem_setup(&strm); strm.avail_in = 0; strm.next_in = Z_NULL; - ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream)); + ret = inflateInit_(&strm, "!", (int)sizeof(z_stream)); assert(ret == Z_VERSION_ERROR); mem_done(&strm, "wrong version"); @@ -462,7 +462,8 @@ local unsigned pull(void *desc, unsigned char **buf) local int push(void *desc, unsigned char *buf, unsigned len) { - buf += len; + (void)buf; + (void)len; return desc != Z_NULL; /* force error if desc not null */ } diff --git a/etc/c/zlib/test/minigzip.c b/etc/c/zlib/test/minigzip.c index e22fb08c0a2..134e10e6c3e 100644 --- a/etc/c/zlib/test/minigzip.c +++ b/etc/c/zlib/test/minigzip.c @@ -59,7 +59,7 @@ #if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) #ifndef WIN32 /* unlink already in stdio.h for WIN32 */ - extern int unlink OF((const char *)); + extern int unlink(const char *); #endif #endif @@ -149,20 +149,12 @@ static void pwinerror (s) # include /* for unlink() */ #endif -void *myalloc OF((void *, unsigned, unsigned)); -void myfree OF((void *, void *)); - -void *myalloc(q, n, m) - void *q; - unsigned n, m; -{ +static void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(q, p) - void *q, *p; -{ +static void myfree(void *q, void *p) { (void)q; free(p); } @@ -175,29 +167,7 @@ typedef struct gzFile_s { z_stream strm; } *gzFile; -gzFile gzopen OF((const char *, const char *)); -gzFile gzdopen OF((int, const char *)); -gzFile gz_open OF((const char *, int, const char *)); - -gzFile gzopen(path, mode) -const char *path; -const char *mode; -{ - return gz_open(path, -1, mode); -} - -gzFile gzdopen(fd, mode) -int fd; -const char *mode; -{ - return gz_open(NULL, fd, mode); -} - -gzFile gz_open(path, fd, mode) - const char *path; - int fd; - const char *mode; -{ +static gzFile gz_open(const char *path, int fd, const char *mode) { gzFile gz; int ret; @@ -231,13 +201,15 @@ gzFile gz_open(path, fd, mode) return gz; } -int gzwrite OF((gzFile, const void *, unsigned)); +static gzFile gzopen(const char *path, const char *mode) { + return gz_open(path, -1, mode); +} -int gzwrite(gz, buf, len) - gzFile gz; - const void *buf; - unsigned len; -{ +static gzFile gzdopen(int fd, const char *mode) { + return gz_open(NULL, fd, mode); +} + +static int gzwrite(gzFile gz, const void *buf, unsigned len) { z_stream *strm; unsigned char out[BUFLEN]; @@ -255,13 +227,7 @@ int gzwrite(gz, buf, len) return len; } -int gzread OF((gzFile, void *, unsigned)); - -int gzread(gz, buf, len) - gzFile gz; - void *buf; - unsigned len; -{ +static int gzread(gzFile gz, void *buf, unsigned len) { int ret; unsigned got; unsigned char in[1]; @@ -292,11 +258,7 @@ int gzread(gz, buf, len) return len - strm->avail_out; } -int gzclose OF((gzFile)); - -int gzclose(gz) - gzFile gz; -{ +static int gzclose(gzFile gz) { z_stream *strm; unsigned char out[BUFLEN]; @@ -321,12 +283,7 @@ int gzclose(gz) return Z_OK; } -const char *gzerror OF((gzFile, int *)); - -const char *gzerror(gz, err) - gzFile gz; - int *err; -{ +static const char *gzerror(gzFile gz, int *err) { *err = gz->err; return gz->msg; } @@ -335,67 +292,20 @@ const char *gzerror(gz, err) static char *prog; -void error OF((const char *msg)); -void gz_compress OF((FILE *in, gzFile out)); -#ifdef USE_MMAP -int gz_compress_mmap OF((FILE *in, gzFile out)); -#endif -void gz_uncompress OF((gzFile in, FILE *out)); -void file_compress OF((char *file, char *mode)); -void file_uncompress OF((char *file)); -int main OF((int argc, char *argv[])); - /* =========================================================================== * Display error message and exit */ -void error(msg) - const char *msg; -{ +static void error(const char *msg) { fprintf(stderr, "%s: %s\n", prog, msg); exit(1); } -/* =========================================================================== - * Compress input to output then close both files. - */ - -void gz_compress(in, out) - FILE *in; - gzFile out; -{ - local char buf[BUFLEN]; - int len; - int err; - -#ifdef USE_MMAP - /* Try first compressing with mmap. If mmap fails (minigzip used in a - * pipe), use the normal fread loop. - */ - if (gz_compress_mmap(in, out) == Z_OK) return; -#endif - for (;;) { - len = (int)fread(buf, 1, sizeof(buf), in); - if (ferror(in)) { - perror("fread"); - exit(1); - } - if (len == 0) break; - - if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); - } - fclose(in); - if (gzclose(out) != Z_OK) error("failed gzclose"); -} - #ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ /* Try compressing the input file at once using mmap. Return Z_OK if - * if success, Z_ERRNO otherwise. + * success, Z_ERRNO otherwise. */ -int gz_compress_mmap(in, out) - FILE *in; - gzFile out; -{ +static int gz_compress_mmap(FILE *in, gzFile out) { int len; int err; int ifd = fileno(in); @@ -424,13 +334,39 @@ int gz_compress_mmap(in, out) } #endif /* USE_MMAP */ +/* =========================================================================== + * Compress input to output then close both files. + */ + +static void gz_compress(FILE *in, gzFile out) { + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + /* =========================================================================== * Uncompress input to output then close both files. */ -void gz_uncompress(in, out) - gzFile in; - FILE *out; -{ +static void gz_uncompress(gzFile in, FILE *out) { local char buf[BUFLEN]; int len; int err; @@ -454,10 +390,7 @@ void gz_uncompress(in, out) * Compress the given file: create a corresponding .gz file and remove the * original. */ -void file_compress(file, mode) - char *file; - char *mode; -{ +static void file_compress(char *file, char *mode) { local char outfile[MAX_NAME_LEN]; FILE *in; gzFile out; @@ -493,14 +426,12 @@ void file_compress(file, mode) /* =========================================================================== * Uncompress the given file and remove the original. */ -void file_uncompress(file) - char *file; -{ +static void file_uncompress(char *file) { local char buf[MAX_NAME_LEN]; char *infile, *outfile; FILE *out; gzFile in; - unsigned len = strlen(file); + z_size_t len = strlen(file); if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) { fprintf(stderr, "%s: filename too long\n", prog); @@ -553,10 +484,7 @@ void file_uncompress(file) * -1 to -9 : compression level */ -int main(argc, argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { int copyout = 0; int uncompr = 0; gzFile file; diff --git a/etc/c/zlib/trees.c b/etc/c/zlib/trees.c index f73fd99c37b..6a523ef34e3 100644 --- a/etc/c/zlib/trees.c +++ b/etc/c/zlib/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2021 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -122,39 +122,116 @@ struct static_tree_desc_s { int max_length; /* max bit length for the codes */ }; -local const static_tree_desc static_l_desc = +#ifdef NO_INIT_GLOBAL_POINTERS +# define TCONST +#else +# define TCONST const +#endif + +local TCONST static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; -local const static_tree_desc static_d_desc = +local TCONST static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; -local const static_tree_desc static_bl_desc = +local TCONST static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== - * Local (static) routines in this file. + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(unsigned code, int len) { + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(deflate_state *s) { + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(deflate_state *s) { + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent + 7) & ~7; +#endif +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. */ +local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) { + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ -local void tr_static_init OF((void)); -local void init_block OF((deflate_state *s)); -local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); -local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); -local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); -local void build_tree OF((deflate_state *s, tree_desc *desc)); -local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local int build_bl_tree OF((deflate_state *s)); -local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, - int blcodes)); -local void compress_block OF((deflate_state *s, const ct_data *ltree, - const ct_data *dtree)); -local int detect_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned code, int len)); -local void bi_windup OF((deflate_state *s)); -local void bi_flush OF((deflate_state *s)); + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits - 1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, + "inconsistent bit counts"); + Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); + + for (n = 0; n <= max_code; n++) { + int len = tree[n].Len; + if (len == 0) continue; + /* Now reverse the bits */ + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); + + Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", + n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); + } +} #ifdef GEN_TREES_H -local void gen_trees_header OF((void)); +local void gen_trees_header(void); #endif #ifndef ZLIB_DEBUG @@ -167,33 +244,18 @@ local void gen_trees_header OF((void)); send_bits(s, tree[c].Code, tree[c].Len); } #endif -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -#define put_short(s, w) { \ - put_byte(s, (uch)((w) & 0xff)); \ - put_byte(s, (uch)((ush)(w) >> 8)); \ -} - /* =========================================================================== * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ #ifdef ZLIB_DEBUG -local void send_bits OF((deflate_state *s, int value, int length)); - -local void send_bits(s, value, length) - deflate_state *s; - int value; /* value to send */ - int length; /* number of bits */ -{ +local void send_bits(deflate_state *s, int value, int length) { Tracevv((stderr," l %2d v %4x ", length, value)); Assert(length > 0 && length <= 15, "invalid length"); s->bits_sent += (ulg)length; /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * (16 - bi_valid) bits from value, leaving (width - (16 - bi_valid)) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { @@ -229,8 +291,7 @@ local void send_bits(s, value, length) /* =========================================================================== * Initialize the various 'constant' tables. */ -local void tr_static_init() -{ +local void tr_static_init(void) { #if defined(GEN_TREES_H) || !defined(STDC) static int static_init_done = 0; int n; /* iterates over tree elements */ @@ -256,7 +317,7 @@ local void tr_static_init() length = 0; for (code = 0; code < LENGTH_CODES-1; code++) { base_length[code] = length; - for (n = 0; n < (1< dist code (0..29) */ dist = 0; for (code = 0 ; code < 16; code++) { base_dist[code] = dist; - for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ for ( ; code < D_CODES; code++) { base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { _dist_code[256 + dist++] = (uch)code; } } - Assert (dist == 256, "tr_static_init: 256+dist != 512"); + Assert (dist == 256, "tr_static_init: 256 + dist != 512"); /* Construct the codes of the static literal tree */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; @@ -312,7 +373,7 @@ local void tr_static_init() } /* =========================================================================== - * Genererate the file trees.h describing the static trees. + * Generate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H # ifndef ZLIB_DEBUG @@ -321,10 +382,9 @@ local void tr_static_init() # define SEPARATOR(i, last, width) \ ((i) == (last)? "\n};\n\n" : \ - ((i) % (width) == (width)-1 ? ",\n" : ", ")) + ((i) % (width) == (width) - 1 ? ",\n" : ", ")) -void gen_trees_header() -{ +void gen_trees_header(void) { FILE *header = fopen("trees.h", "w"); int i; @@ -373,12 +433,26 @@ void gen_trees_header() } #endif /* GEN_TREES_H */ +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(deflate_state *s) { + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->sym_next = s->matches = 0; +} + /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ -void ZLIB_INTERNAL _tr_init(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_init(deflate_state *s) { tr_static_init(); s->l_desc.dyn_tree = s->dyn_ltree; @@ -401,24 +475,6 @@ void ZLIB_INTERNAL _tr_init(s) init_block(s); } -/* =========================================================================== - * Initialize a new block. - */ -local void init_block(s) - deflate_state *s; -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; - - s->dyn_ltree[END_BLOCK].Freq = 1; - s->opt_len = s->static_len = 0L; - s->sym_next = s->matches = 0; -} - #define SMALLEST 1 /* Index within the heap array of least frequent node in the Huffman tree */ @@ -448,17 +504,13 @@ local void init_block(s) * when the heap property is re-established (each father smaller than its * two sons). */ -local void pqdownheap(s, tree, k) - deflate_state *s; - ct_data *tree; /* the tree to restore */ - int k; /* node to move down */ -{ +local void pqdownheap(deflate_state *s, ct_data *tree, int k) { int v = s->heap[k]; int j = k << 1; /* left son of k */ while (j <= s->heap_len) { /* Set j to the smallest of the two sons: */ if (j < s->heap_len && - smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + smaller(tree, s->heap[j + 1], s->heap[j], s->depth)) { j++; } /* Exit if v is smaller than both sons */ @@ -483,10 +535,7 @@ local void pqdownheap(s, tree, k) * The length opt_len is updated; static_len is also updated if stree is * not null. */ -local void gen_bitlen(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void gen_bitlen(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; int max_code = desc->max_code; const ct_data *stree = desc->stat_desc->static_tree; @@ -507,7 +556,7 @@ local void gen_bitlen(s, desc) */ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ - for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + for (h = s->heap_max + 1; h < HEAP_SIZE; h++) { n = s->heap[h]; bits = tree[tree[n].Dad].Len + 1; if (bits > max_length) bits = max_length, overflow++; @@ -518,7 +567,7 @@ local void gen_bitlen(s, desc) s->bl_count[bits]++; xbits = 0; - if (n >= base) xbits = extra[n-base]; + if (n >= base) xbits = extra[n - base]; f = tree[n].Freq; s->opt_len += (ulg)f * (unsigned)(bits + xbits); if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); @@ -530,10 +579,10 @@ local void gen_bitlen(s, desc) /* Find the first bit length which could increase: */ do { - bits = max_length-1; + bits = max_length - 1; while (s->bl_count[bits] == 0) bits--; - s->bl_count[bits]--; /* move one leaf down the tree */ - s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits + 1] += 2; /* move one overflow item as its brother */ s->bl_count[max_length]--; /* The brother of the overflow item also moves one step up, * but this does not affect bl_count[max_length] @@ -561,48 +610,9 @@ local void gen_bitlen(s, desc) } } -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes (tree, max_code, bl_count) - ct_data *tree; /* the tree to decorate */ - int max_code; /* largest code with non zero frequency */ - ushf *bl_count; /* number of codes at each bit length */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - unsigned code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - code = (code + bl_count[bits-1]) << 1; - next_code[bits] = (ush)code; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS]-1 == (1< +#endif /* =========================================================================== * Construct one Huffman tree and assigns the code bit strings and lengths. @@ -612,10 +622,7 @@ local void gen_codes (tree, max_code, bl_count) * and corresponding code. The length opt_len is updated; static_len is * also updated if stree is not null. The field max_code is set. */ -local void build_tree(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void build_tree(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; const ct_data *stree = desc->stat_desc->static_tree; int elems = desc->stat_desc->elems; @@ -624,7 +631,7 @@ local void build_tree(s, desc) int node; /* new node being created */ /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n + 1]. * heap[0] is not used. */ s->heap_len = 0, s->heap_max = HEAP_SIZE; @@ -652,7 +659,7 @@ local void build_tree(s, desc) } desc->max_code = max_code; - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + /* The elements heap[heap_len/2 + 1 .. heap_len] are leaves of the tree, * establish sub-heaps of increasing lengths: */ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); @@ -700,11 +707,7 @@ local void build_tree(s, desc) * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ -local void scan_tree (s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void scan_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -714,10 +717,10 @@ local void scan_tree (s, tree, max_code) int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ + tree[max_code + 1].Len = (ush)0xffff; /* guard */ for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -745,11 +748,7 @@ local void scan_tree (s, tree, max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -local void send_tree (s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void send_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -758,11 +757,11 @@ local void send_tree (s, tree, max_code) int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ - /* tree[max_code+1].Len = -1; */ /* guard already set */ + /* tree[max_code + 1].Len = -1; */ /* guard already set */ if (nextlen == 0) max_count = 138, min_count = 3; for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -773,13 +772,13 @@ local void send_tree (s, tree, max_code) send_code(s, curlen, s->bl_tree); count--; } Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count - 3, 2); } else if (count <= 10) { - send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count - 3, 3); } else { - send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count - 11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { @@ -796,9 +795,7 @@ local void send_tree (s, tree, max_code) * Construct the Huffman tree for the bit lengths and return the index in * bl_order of the last bit length code to send. */ -local int build_bl_tree(s) - deflate_state *s; -{ +local int build_bl_tree(deflate_state *s) { int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ @@ -807,8 +804,8 @@ local int build_bl_tree(s) /* Build the bit length tree: */ build_tree(s, (tree_desc *)(&(s->bl_desc))); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + /* opt_len now includes the length of the tree representations, except the + * lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts. */ /* Determine the number of bit length codes to send. The pkzip format @@ -819,7 +816,7 @@ local int build_bl_tree(s) if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; + s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); @@ -831,42 +828,36 @@ local int build_bl_tree(s) * lengths of the bit length codes, the literal tree and the distance tree. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. */ -local void send_all_trees(s, lcodes, dcodes, blcodes) - deflate_state *s; - int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ +local void send_all_trees(deflate_state *s, int lcodes, int dcodes, + int blcodes) { int rank; /* index in bl_order */ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes-1, 5); - send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ for (rank = 0; rank < blcodes; rank++) { Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); } /* =========================================================================== * Send a stored block */ -void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { + send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); put_short(s, (ush)~stored_len); @@ -877,16 +868,14 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; s->bits_sent += 2*16; - s->bits_sent += stored_len<<3; + s->bits_sent += stored_len << 3; #endif } /* =========================================================================== * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) */ -void ZLIB_INTERNAL _tr_flush_bits(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) { bi_flush(s); } @@ -894,9 +883,7 @@ void ZLIB_INTERNAL _tr_flush_bits(s) * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. */ -void ZLIB_INTERNAL _tr_align(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_align(deflate_state *s) { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef ZLIB_DEBUG @@ -905,16 +892,108 @@ void ZLIB_INTERNAL _tr_align(s) bi_flush(s); } +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(deflate_state *s, const ct_data *ltree, + const ct_data *dtree) { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned sx = 0; /* running index in symbol buffers */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->sym_next != 0) do { +#ifdef LIT_MEM + dist = s->d_buf[sx]; + lc = s->l_buf[sx++]; +#else + dist = s->sym_buf[sx++] & 0xff; + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; + lc = s->sym_buf[sx++]; +#endif + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check for no overlay of pending_buf on needed symbols */ +#ifdef LIT_MEM + Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); +#else + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +#endif + + } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "block list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local int detect_data_type(deflate_state *s) { + /* block_mask is the bit mask of block-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long block_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("allow-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "block-listed" or "allow-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static * trees or store, and write out the encoded block. */ -void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block, or NULL if too old */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ @@ -943,14 +1022,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) max_blindex = build_bl_tree(s); /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s->opt_len+3+7)>>3; - static_lenb = (s->static_len+3+7)>>3; + opt_lenb = (s->opt_len + 3 + 7) >> 3; + static_lenb = (s->static_len + 3 + 7) >> 3; Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, s->sym_next / 3)); - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; +#ifndef FORCE_STATIC + if (static_lenb <= opt_lenb || s->strategy == Z_FIXED) +#endif + opt_lenb = static_lenb; } else { Assert(buf != (char*)0, "lost buf"); @@ -960,7 +1042,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) #ifdef FORCE_STORED if (buf != (char*)0) { /* force stored block */ #else - if (stored_len+4 <= opt_lenb && buf != (char*)0) { + if (stored_len + 4 <= opt_lenb && buf != (char*)0) { /* 4: two words for the lengths */ #endif /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. @@ -971,21 +1053,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) */ _tr_stored_block(s, buf, stored_len, last); -#ifdef FORCE_STATIC - } else if (static_lenb >= 0) { /* force static trees */ -#else - } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { -#endif - send_bits(s, (STATIC_TREES<<1)+last, 3); + } else if (static_lenb == opt_lenb) { + send_bits(s, (STATIC_TREES<<1) + last, 3); compress_block(s, (const ct_data *)static_ltree, (const ct_data *)static_dtree); #ifdef ZLIB_DEBUG s->compressed_len += 3 + s->static_len; #endif } else { - send_bits(s, (DYN_TREES<<1)+last, 3); - send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, - max_blindex+1); + send_bits(s, (DYN_TREES<<1) + last, 3); + send_all_trees(s, s->l_desc.max_code + 1, s->d_desc.max_code + 1, + max_blindex + 1); compress_block(s, (const ct_data *)s->dyn_ltree, (const ct_data *)s->dyn_dtree); #ifdef ZLIB_DEBUG @@ -1004,22 +1082,23 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) s->compressed_len += 7; /* align on byte boundary */ #endif } - Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*last)); + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, + s->compressed_len - 7*last)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int ZLIB_INTERNAL _tr_tally (s, dist, lc) - deflate_state *s; - unsigned dist; /* distance of matched string */ - unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - s->sym_buf[s->sym_next++] = dist; - s->sym_buf[s->sym_next++] = dist >> 8; - s->sym_buf[s->sym_next++] = lc; +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { +#ifdef LIT_MEM + s->d_buf[s->sym_next] = (ush)dist; + s->l_buf[s->sym_next++] = (uch)lc; +#else + s->sym_buf[s->sym_next++] = (uch)dist; + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); + s->sym_buf[s->sym_next++] = (uch)lc; +#endif if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; @@ -1031,152 +1110,8 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } return (s->sym_next == s->sym_end); } - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block(s, ltree, dtree) - deflate_state *s; - const ct_data *ltree; /* literal tree */ - const ct_data *dtree; /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned sx = 0; /* running index in sym_buf */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (s->sym_next != 0) do { - dist = s->sym_buf[sx++] & 0xff; - dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; - lc = s->sym_buf[sx++]; - if (dist == 0) { - send_code(s, lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code+LITERALS+1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= (unsigned)base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and sym_buf is ok: */ - Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); - - } while (sx < s->sym_next); - - send_code(s, END_BLOCK, ltree); -} - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "block list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -local int detect_data_type(s) - deflate_state *s; -{ - /* block_mask is the bit mask of block-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - unsigned long block_mask = 0xf3ffc07fUL; - int n; - - /* Check for non-textual ("block-listed") bytes. */ - for (n = 0; n <= 31; n++, block_mask >>= 1) - if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) - return Z_BINARY; - - /* Check for textual ("allow-listed") bytes. */ - if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 - || s->dyn_ltree[13].Freq != 0) - return Z_TEXT; - for (n = 32; n < LITERALS; n++) - if (s->dyn_ltree[n].Freq != 0) - return Z_TEXT; - - /* There are no "block-listed" or "allow-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -local unsigned bi_reverse(code, len) - unsigned code; /* the value to invert */ - int len; /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -local void bi_flush(s) - deflate_state *s; -{ - if (s->bi_valid == 16) { - put_short(s, s->bi_buf); - s->bi_buf = 0; - s->bi_valid = 0; - } else if (s->bi_valid >= 8) { - put_byte(s, (Byte)s->bi_buf); - s->bi_buf >>= 8; - s->bi_valid -= 8; - } -} - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -local void bi_windup(s) - deflate_state *s; -{ - if (s->bi_valid > 8) { - put_short(s, s->bi_buf); - } else if (s->bi_valid > 0) { - put_byte(s, (Byte)s->bi_buf); - } - s->bi_buf = 0; - s->bi_valid = 0; -#ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent+7) & ~7; -#endif -} diff --git a/etc/c/zlib/uncompr.c b/etc/c/zlib/uncompr.c index f03a1a865e3..5e256663b45 100644 --- a/etc/c/zlib/uncompr.c +++ b/etc/c/zlib/uncompr.c @@ -24,12 +24,8 @@ Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. */ -int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong *sourceLen; -{ +int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong *sourceLen) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -83,11 +79,7 @@ int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) err; } -int ZEXPORT uncompress (dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return uncompress2(dest, destLen, source, &sourceLen); } diff --git a/etc/c/zlib/win32.mak b/etc/c/zlib/win32.mak deleted file mode 100644 index 60dbe1c3dbf..00000000000 --- a/etc/c/zlib/win32.mak +++ /dev/null @@ -1,97 +0,0 @@ -# Makefile for zlib - -CC=dmc -LD=link -LIB=lib -CFLAGS=-I. -o -DNO_snprintf -LDFLAGS= -O=.obj - -# variables - -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - - -all: zlib.lib example.exe infcover.exe minigzip.exe - -adler32.obj: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -zutil.obj: zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -gzclose.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzlib.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzread.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -gzwrite.obj: zlib.h zconf.h gzguts.h - "$(CC)" -c $(CFLAGS) $*.c - -compress.obj: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -uncompr.obj: zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -crc32.obj: zutil.h zlib.h zconf.h crc32.h - "$(CC)" -c $(CFLAGS) $*.c - -deflate.obj: deflate.h zutil.h zlib.h zconf.h - "$(CC)" -c $(CFLAGS) $*.c - -infback.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inflate.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" -c $(CFLAGS) $*.c - -inffast.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" -c $(CFLAGS) $*.c - -inftrees.obj: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" -c $(CFLAGS) $*.c - -trees.obj: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" -c $(CFLAGS) $*.c - - - -example.obj: test\example.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -infcover.obj: test\infcover.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -minigzip.obj: test\minigzip.c zlib.h zconf.h - "$(CC)" -c $(cvarsdll) $(CFLAGS) test\$*.c - -zlib.lib: $(OBJS) - "$(LIB)" -c zlib.lib $(OBJS) - -example.exe: example.obj zlib.lib - "$(LD)" $(LDFLAGS) example.obj zlib.lib - -infcover.exe: infcover.obj zlib.lib - "$(LD)" $(LDFLAGS) infcover.obj zlib.lib - -minigzip.exe: minigzip.obj zlib.lib - "$(LD)" $(LDFLAGS) minigzip.obj zlib.lib - -test: example.exe infcover.exe minigzip.exe - example - infcover - echo hello world | minigzip | minigzip -d - -clean: - del *.obj - del *.exe - del *.dll - del *.lib - del *.lst - del foo.gz diff --git a/etc/c/zlib/win64.mak b/etc/c/zlib/win64.mak deleted file mode 100644 index 4c19d3d0553..00000000000 --- a/etc/c/zlib/win64.mak +++ /dev/null @@ -1,104 +0,0 @@ -# Makefile for zlib64 - -MODEL=64 - -CC=cl -LD=link -AR=lib - -CFLAGS=/O2 /nologo -LIBFLAGS=/nologo -LDFLAGS=/nologo -O=.obj - -# do not preselect a C runtime (extracted from the line above to make the auto tester happy) -CFLAGS=$(CFLAGS) /Zl /GS- - -# variables - -OBJS = adler32$(O) compress$(O) crc32$(O) deflate$(O) gzclose$(O) gzlib$(O) gzread$(O) \ - gzwrite$(O) infback$(O) inffast$(O) inflate$(O) inftrees$(O) trees$(O) uncompr$(O) zutil$(O) - - -all: zlib$(MODEL).lib example.exe infcover.exe minigzip.exe - -adler32.obj: zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -zutil.obj: zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -gzclose.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzlib.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzread.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -gzwrite.obj: zlib.h zconf.h gzguts.h - "$(CC)" /c $(CFLAGS) $*.c - -compress.obj: zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -uncompr.obj: zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -crc32.obj: zutil.h zlib.h zconf.h crc32.h - "$(CC)" /c $(CFLAGS) $*.c - -deflate.obj: deflate.h zutil.h zlib.h zconf.h - "$(CC)" /c $(CFLAGS) $*.c - -infback.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" /c $(CFLAGS) $*.c - -inflate.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h - "$(CC)" /c $(CFLAGS) $*.c - -inffast.obj: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h - "$(CC)" /c $(CFLAGS) $*.c - -inftrees.obj: zutil.h zlib.h zconf.h inftrees.h - "$(CC)" /c $(CFLAGS) $*.c - -trees.obj: deflate.h zutil.h zlib.h zconf.h trees.h - "$(CC)" /c $(CFLAGS) $*.c - - - -example.obj: test\example.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -infcover.obj: test\infcover.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -minigzip.obj: test\minigzip.c zlib.h zconf.h - "$(CC)" /c $(cvarsdll) $(CFLAGS) test\$*.c - -zlib$(MODEL).lib: $(OBJS) - "$(AR)" $(LIBFLAGS) /OUT:zlib$(MODEL).lib $(OBJS) - -example.exe: example.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) example.obj zlib$(MODEL).lib - -infcover.exe: infcover.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) infcover.obj zlib$(MODEL).lib - -minigzip.exe: minigzip.obj zlib$(MODEL).lib - "$(LD)" $(LDFLAGS) minigzip.obj zlib$(MODEL).lib - -test: example.exe infcover.exe minigzip.exe - example - infcover - echo hello world | minigzip | minigzip -d - -clean: - del *.obj - del *.exe - del *.dll - del *.lib - del *.lst - del foo.gz diff --git a/etc/c/zlib/zconf.h b/etc/c/zlib/zconf.h index 5e1d68a004e..62adc8d8431 100644 --- a/etc/c/zlib/zconf.h +++ b/etc/c/zlib/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -38,6 +38,9 @@ # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound @@ -238,7 +241,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -293,14 +300,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -349,6 +348,9 @@ # ifdef FAR # undef FAR # endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ @@ -467,11 +469,18 @@ typedef uLong FAR uLongf; # undef _LARGEFILE64_SOURCE #endif -#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# if defined(Z_HAVE_UNISTD_H) # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include /* for off_t */ @@ -507,7 +516,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/etc/c/zlib/zlib.3 b/etc/c/zlib/zlib.3 index bcaebd9f02c..c716020ea9c 100644 --- a/etc/c/zlib/zlib.3 +++ b/etc/c/zlib/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "27 Mar 2022" +.TH ZLIB 3 "22 Jan 2024" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -105,9 +105,9 @@ before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS AND LICENSE -Version 1.2.12 +Version 1.3.1 .LP -Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler .LP This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/etc/c/zlib/zlib.h b/etc/c/zlib/zlib.h index 4a98e38bf34..8d4b932eaf6 100644 --- a/etc/c/zlib/zlib.h +++ b/etc/c/zlib/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.12, March 11th, 2022 + version 1.3.1, January 22nd, 2024 - Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.12" -#define ZLIB_VERNUM 0x12c0 +#define ZLIB_VERSION "1.3.1" +#define ZLIB_VERNUM 0x1310 #define ZLIB_VER_MAJOR 1 -#define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 12 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 1 #define ZLIB_VER_SUBREVISION 0 /* @@ -78,8 +78,8 @@ extern "C" { even in the case of corrupted input. */ -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); struct internal_state; @@ -217,7 +217,7 @@ typedef gz_header FAR *gz_headerp; /* basic functions */ -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +ZEXTERN const char * ZEXPORT zlibVersion(void); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check @@ -225,12 +225,12 @@ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); */ /* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default - allocation functions. + allocation functions. total_in, total_out, adler, and msg are initialized. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all @@ -247,7 +247,7 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); */ -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -276,7 +276,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. See deflatePending(), - which can be used if desired to determine whether or not there is more ouput + which can be used if desired to determine whether or not there is more output in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to @@ -320,8 +320,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was @@ -360,7 +360,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -375,7 +375,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by @@ -383,7 +383,8 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); read or consumed. The allocation of a sliding window will be deferred to the first call of inflate (if the decompression does not complete on the first call). If zalloc and zfree are set to Z_NULL, inflateInit updates - them to use default allocation functions. + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -397,7 +398,7 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); */ -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -517,7 +518,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -535,12 +536,12 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); */ /* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); This is another version of deflateInit with more compression options. The fields zalloc, zfree and opaque must be initialized before by the caller. @@ -607,9 +608,9 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. When using the zlib format, this @@ -651,16 +652,16 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, not perform any compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by deflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If deflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. deflateGetDictionary() may return a length less than the window size, even when more than the window size in input has been provided. It may return up @@ -673,8 +674,8 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, stream state is inconsistent. */ -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -691,20 +692,20 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate the internal compression state. The stream will leave the compression level and any other attributes that may have been - set unchanged. + set unchanged. total_in, total_out, adler, and msg are initialized. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2(). This can be @@ -729,7 +730,7 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, Then no more input data should be provided before the deflateParams() call. If this is done, the old level and strategy will be applied to the data compressed before deflateParams(), and the new level and strategy will be - applied to the the data compressed after deflateParams(). + applied to the data compressed after deflateParams(). deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if @@ -740,11 +741,11 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, retried with more output space. */ -ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain)); +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); /* Fine tune deflate's internal compression parameters. This should only be used by someone who understands the algorithm used by zlib's deflate for @@ -757,8 +758,8 @@ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, + uLong sourceLen); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or @@ -772,9 +773,9 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, than Z_FINISH or Z_NO_FLUSH are used. */ -ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, - unsigned *pending, - int *bits)); +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); /* deflatePending() returns the number of bytes and bits of output that have been generated, but not yet provided in the available output. The bytes not @@ -787,9 +788,9 @@ ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits @@ -804,8 +805,8 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, source stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); /* deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called @@ -821,16 +822,17 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gzip file" and give up. If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized @@ -883,9 +885,9 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, deferred until inflate() is called. */ -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, @@ -906,22 +908,22 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, inflate(). */ -ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by inflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If inflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the stream state is inconsistent. */ -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); /* Skips invalid compressed data until a possible full flush point (see above for the description of deflate with Z_FULL_FLUSH) can be found, or until all @@ -934,14 +936,14 @@ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); inflateSync returns Z_OK if a possible full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. - In the success case, the application may save the current current value of - total_in which indicates where valid compressed data was found. In the - error case, the application may repeatedly call inflateSync, providing more - input each time, until success or end of the input data. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -956,18 +958,19 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); /* This function is the same as inflateReset, but it also permits changing the wrap and window size requests. The windowBits parameter is interpreted @@ -980,9 +983,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, the windowBits parameter is invalid. */ -ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); /* This function inserts bits in the inflate input stream. The intent is that this function is used to start inflating at a bit position in the @@ -1001,7 +1004,7 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, stream state was inconsistent. */ -ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); /* This function returns two values, one in the lower 16 bits of the return value, and the other in the remaining upper bits, obtained by shifting the @@ -1029,8 +1032,8 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); source stream state was inconsistent. */ -ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); /* inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after @@ -1070,8 +1073,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, */ /* -ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); Initialize the internal stream state for decompression using inflateBack() calls. The fields zalloc, zfree and opaque in strm must be initialized @@ -1091,13 +1094,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, the version of the header file. */ -typedef unsigned (*in_func) OF((void FAR *, - z_const unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); -ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); /* inflateBack() does a raw inflate with a single call using a call-back interface for input and output. This is potentially more efficient than @@ -1165,7 +1168,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, cannot return Z_OK. */ -ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); /* All memory allocated by inflateBackInit() is freed. @@ -1173,7 +1176,7 @@ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); state was inconsistent. */ -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); /* Return flags indicating compile-time options. Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: @@ -1226,8 +1229,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); you need special options. */ -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1241,9 +1244,9 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, buffer. */ -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -1257,15 +1260,15 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, Z_STREAM_ERROR if the level parameter is invalid. */ -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1282,8 +1285,8 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, buffer with the uncompressed data up to that point. */ -ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong *sourceLen)); +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); /* Same as uncompress, except that sourceLen is a pointer, where the length of the source is *sourceLen. On return, *sourceLen is the number of @@ -1302,7 +1305,7 @@ ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); Open the gzip (.gz) file at path for reading and decompressing, or compressing and writing. The mode parameter is as in fopen ("rb" or "wb") @@ -1339,7 +1342,7 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); file could not be opened. */ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); /* Associate a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (if the file has @@ -1362,7 +1365,7 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); will not detect if fd is invalid (unless fd is -1). */ -ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); /* Set the internal buffer size used by this library's functions for file to size. The default buffer size is 8192 bytes. This function must be called @@ -1378,7 +1381,7 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); too late. */ -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); /* Dynamically update the compression level and strategy for file. See the description of deflateInit2 for the meaning of these parameters. Previously @@ -1389,7 +1392,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); or Z_MEM_ERROR if there is a memory allocation error. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); /* Read and decompress up to len uncompressed bytes from file into buf. If the input file is not in gzip format, gzread copies the given number of @@ -1419,8 +1422,8 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); Z_STREAM_ERROR. */ -ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, - gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); /* Read and decompress up to nitems items of size size from file into buf, otherwise operating as gzread() does. This duplicates the interface of @@ -1437,22 +1440,22 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, In the event that the end of file is reached and only a partial item is available at the end, i.e. the remaining uncompressed data length is not a - multiple of size, then the final partial item is nevetheless read into buf + multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior is the same as the behavior of fread() implementations in common libraries, but it prevents the direct use of gzfread() to read a concurrently written - file, reseting and retrying on end-of-file, when size is not 1. + file, resetting and retrying on end-of-file, when size is not 1. */ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); /* Compress and write the len uncompressed bytes at buf to file. gzwrite returns the number of uncompressed bytes written or 0 in case of error. */ -ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, - z_size_t nitems, gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); /* Compress and write nitems items of size size from buf to file, duplicating the interface of stdio's fwrite(), with size_t request and return types. If @@ -1465,7 +1468,7 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, is returned, and the error state is set to Z_STREAM_ERROR. */ -ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); /* Convert, format, compress, and write the arguments (...) to file under control of the string format, as in fprintf. gzprintf returns the number of @@ -1480,7 +1483,7 @@ ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); This can be determined using zlibCompileFlags(). */ -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); /* Compress and write the given null-terminated string s to file, excluding the terminating null character. @@ -1488,7 +1491,7 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); gzputs returns the number of characters written, or -1 in case of error. */ -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); /* Read and decompress bytes from file into buf, until len-1 characters are read, or until a newline character is read and transferred to buf, or an @@ -1502,13 +1505,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); buf are indeterminate. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); /* Compress and write c, converted to an unsigned char, into file. gzputc returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc(gzFile file); /* Read and decompress one byte from file. gzgetc returns this byte or -1 in case of end of file or error. This is implemented as a macro for speed. @@ -1517,7 +1520,7 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); points to has been clobbered or not. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); /* Push c back onto the stream for file to be read as the first character on the next read. At least one character of push-back is always allowed. @@ -1529,7 +1532,7 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); gzseek() or gzrewind(). */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); /* Flush all pending output to file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function @@ -1545,8 +1548,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); */ /* -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); Set the starting position to offset relative to whence for the next gzread or gzwrite on file. The offset represents a number of bytes in the @@ -1564,7 +1567,7 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, would be before the current position. */ -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +ZEXTERN int ZEXPORT gzrewind(gzFile file); /* Rewind file. This function is supported only for reading. @@ -1572,7 +1575,7 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); */ /* -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); Return the starting position for the next gzread or gzwrite on file. This position represents a number of bytes in the uncompressed data stream, @@ -1583,7 +1586,7 @@ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); */ /* -ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); Return the current compressed (actual) read or write offset of file. This offset includes the count of bytes that precede the gzip stream, for example @@ -1592,7 +1595,7 @@ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); be used for a progress indicator. On error, gzoffset() returns -1. */ -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +ZEXTERN int ZEXPORT gzeof(gzFile file); /* Return true (1) if the end-of-file indicator for file has been set while reading, false (0) otherwise. Note that the end-of-file indicator is set @@ -1607,7 +1610,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); has grown since the previous end of file was detected. */ -ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +ZEXTERN int ZEXPORT gzdirect(gzFile file); /* Return true (1) if file is being copied directly while reading, or false (0) if file is a gzip stream being decompressed. @@ -1628,7 +1631,7 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); gzip file reading and decompression, which may not be desired.) */ -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose(gzFile file); /* Flush all pending output for file, if necessary, close file and deallocate the (de)compression state. Note that once file is closed, you @@ -1641,8 +1644,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); last read ended in the middle of a gzip stream, or Z_OK on success. */ -ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); -ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); /* Same as gzclose(), but gzclose_r() is only for use when reading, and gzclose_w() is only for use when writing or appending. The advantage to @@ -1653,7 +1656,7 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); zlib library. */ -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); /* Return the error message for the last error which occurred on file. errnum is set to zlib error number. If an error occurred in the file system @@ -1669,7 +1672,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); functions above that do not distinguish those cases in their return values. */ -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +ZEXTERN void ZEXPORT gzclearerr(gzFile file); /* Clear the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip @@ -1686,7 +1689,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); library. */ -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. An Adler-32 value is in the range of a 32-bit @@ -1706,15 +1709,15 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ -ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); /* Same as adler32(), but with a size_t length. */ /* -ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, - z_off_t len2)); +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for @@ -1724,7 +1727,7 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, negative, the result has no meaning or utility. */ -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. @@ -1742,30 +1745,30 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); /* Same as crc32(), but with a size_t length. */ /* -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. + len2. len2 must be non-negative. */ /* -ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); Return the operator corresponding to length len2, to be used with - crc32_combine_op(). + crc32_combine_op(). len2 must be non-negative. */ -ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); /* Give the same result as crc32_combine(), using op in place of len2. op is is generated from len2 by crc32_combine_gen(). This will be faster than @@ -1778,20 +1781,20 @@ ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); #ifdef Z_PREFIX_SET # define z_deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) @@ -1836,7 +1839,7 @@ struct gzFile_s { unsigned char *next; z_off64_t pos; }; -ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ #ifdef Z_PREFIX_SET # undef z_gzgetc # define z_gzgetc(g) \ @@ -1853,13 +1856,13 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ * without large file support, _LFS64_LARGEFILE must also be true */ #ifdef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) @@ -1881,50 +1884,50 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define crc32_combine_gen crc32_combine_gen64 # endif # ifndef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); # endif #else - ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif #else /* Z_SOLO */ - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif /* !Z_SOLO */ /* undocumented functions */ -ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); -ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); -ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); -ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); -ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); -ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); #if defined(_WIN32) && !defined(Z_SOLO) -ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, - const char *mode)); +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifndef Z_SOLO -ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, - const char *format, - va_list va)); +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); # endif #endif diff --git a/etc/c/zlib/zutil.c b/etc/c/zlib/zutil.c index dcab28a0d51..b1c5d2d3c6d 100644 --- a/etc/c/zlib/zutil.c +++ b/etc/c/zlib/zutil.c @@ -24,13 +24,11 @@ z_const char * const z_errmsg[10] = { }; -const char * ZEXPORT zlibVersion() -{ +const char * ZEXPORT zlibVersion(void) { return ZLIB_VERSION; } -uLong ZEXPORT zlibCompileFlags() -{ +uLong ZEXPORT zlibCompileFlags(void) { uLong flags; flags = 0; @@ -61,9 +59,11 @@ uLong ZEXPORT zlibCompileFlags() #ifdef ZLIB_DEBUG flags += 1 << 8; #endif + /* #if defined(ASMV) || defined(ASMINF) flags += 1 << 9; #endif + */ #ifdef ZLIB_WINAPI flags += 1 << 10; #endif @@ -119,9 +119,7 @@ uLong ZEXPORT zlibCompileFlags() # endif int ZLIB_INTERNAL z_verbose = verbose; -void ZLIB_INTERNAL z_error (m) - char *m; -{ +void ZLIB_INTERNAL z_error(char *m) { fprintf(stderr, "%s\n", m); exit(1); } @@ -130,9 +128,7 @@ void ZLIB_INTERNAL z_error (m) /* exported to allow conversion of error code to string for compress() and * uncompress() */ -const char * ZEXPORT zError(err) - int err; -{ +const char * ZEXPORT zError(int err) { return ERR_MSG(err); } @@ -146,22 +142,14 @@ const char * ZEXPORT zError(err) #ifndef HAVE_MEMCPY -void ZLIB_INTERNAL zmemcpy(dest, source, len) - Bytef* dest; - const Bytef* source; - uInt len; -{ +void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) { if (len == 0) return; do { *dest++ = *source++; /* ??? to be unrolled */ } while (--len != 0); } -int ZLIB_INTERNAL zmemcmp(s1, s2, len) - const Bytef* s1; - const Bytef* s2; - uInt len; -{ +int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) { uInt j; for (j = 0; j < len; j++) { @@ -170,10 +158,7 @@ int ZLIB_INTERNAL zmemcmp(s1, s2, len) return 0; } -void ZLIB_INTERNAL zmemzero(dest, len) - Bytef* dest; - uInt len; -{ +void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) { if (len == 0) return; do { *dest++ = 0; /* ??? to be unrolled */ @@ -214,8 +199,7 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { voidpf buf; ulg bsize = (ulg)items*size; @@ -240,8 +224,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) return buf; } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { int n; (void)opaque; @@ -277,14 +260,12 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { (void)opaque; return _halloc((long)items, size); } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; _hfree(ptr); } @@ -297,25 +278,18 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) #ifndef MY_ZCALLOC /* Any system without a special alloc function */ #ifndef STDC -extern voidp malloc OF((uInt size)); -extern voidp calloc OF((uInt items, uInt size)); -extern void free OF((voidpf ptr)); +extern voidp malloc(uInt size); +extern voidp calloc(uInt items, uInt size); +extern void free(voidpf ptr); #endif -voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) - voidpf opaque; - unsigned items; - unsigned size; -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { (void)opaque; return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } -void ZLIB_INTERNAL zcfree (opaque, ptr) - voidpf opaque; - voidpf ptr; -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; free(ptr); } diff --git a/etc/c/zlib/zutil.h b/etc/c/zlib/zutil.h index d9a20ae1bf4..48dd7febae6 100644 --- a/etc/c/zlib/zutil.h +++ b/etc/c/zlib/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -56,7 +56,7 @@ typedef unsigned long ulg; extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] +#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] #define ERR_RETURN(strm,err) \ return (strm->msg = ERR_MSG(err), (err)) @@ -137,17 +137,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # endif #endif -#if defined(MACOS) || defined(TARGET_OS_MAC) +#if defined(MACOS) # define OS_CODE 7 -# ifndef Z_SOLO -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ -# endif -# endif -# endif #endif #ifdef __acorn @@ -170,18 +161,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define OS_CODE 19 #endif -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX -# if defined(_WIN32_WCE) -# define fdopen(fd,mode) NULL /* No fdopen() */ -# else -# define fdopen(fd,type) _fdopen(fd,type) -# endif -#endif - #if defined(__BORLANDC__) && !defined(MSDOS) #pragma warn -8004 #pragma warn -8008 @@ -191,8 +170,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* provide prototypes for these when building zlib without LFS */ #if !defined(_WIN32) && \ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); #endif /* common defaults */ @@ -231,16 +211,16 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); + void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); + int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); + void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); #endif /* Diagnostic functions */ #ifdef ZLIB_DEBUG # include extern int ZLIB_INTERNAL z_verbose; - extern void ZLIB_INTERNAL z_error OF((char *m)); + extern void ZLIB_INTERNAL z_error(char *m); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} @@ -257,9 +237,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #endif #ifndef Z_SOLO - voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, - unsigned size)); - void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); + voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, + unsigned size); + void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); #endif #define ZALLOC(strm, items, size) \ diff --git a/phobos/CONTRIBUTING.md b/phobos/CONTRIBUTING.md new file mode 100644 index 00000000000..3cbac0b7f7b --- /dev/null +++ b/phobos/CONTRIBUTING.md @@ -0,0 +1,23 @@ +# Phobos 3 Contributors Guide + +This document refers to contributions specific to Phobos 3. For the full documentation on contributing please see the guide here: [D Contributors Guide](https://github.com/dlang/phobos/blob/master/CONTRIBUTING.md). + +## Naming and Style Guidelines + +Names should follow the existing naming guidelines here: [D Style Guide](https://dlang.org/dstyle.html) + +When selecting a name for a type or method, a quick survey of how other popular languages name the equivalent type/method should be performed. For example, in .NET and Java, the `currTime()` method would be named `now()`. Using the same names as popular languages reduces the friction experienced by the engineer when migrating to D. Be prepared to provide examples from your survey in the Pull Request. In cases where there is no clear agreement or two examples are equally represented an alias *may* be appropriate for the purposes of moving past the block. + +Prefer whole words over abbreviations and dropped letters. For example, prefer `writeLine` over `writeln`. Choose the shortest name that accurately describes the feature. Abbreviations are acceptable where the abbreviation is in common usage and/or would result in a cumbersome name. Furthermore, non-standard abbreviations make it more difficult for non-English speakers to adopt the library. + +Phobos will use a 100 soft and 120 hard character column limit. This will be enforced via `dfmt` and `.editorconfig` files provided with the distribution. + +## Guidelines for Reviewers + +### Silence is Approval + +One of the complaints the community has made about D in general and Phobos in particular is that many PRs go un-reviewed and are left to rot. Therefore, in Phobos 3, if you are listed as a reviewer on a PR and you do not respond to a within 7 days to a pull request, your silence will be considered an approval. If the required reviewer is unavailable for any reason (ex: vacation, emergency, etc.), another reviewer can bypass them. Once they return they can provide comments and submit PR's to address any feedback on the PR's assigned to them that they missed. + +### Disagreement Without Providing a Fix or Alternative is Approval + +Another major community complaint is that PR's are routinely abandoned because somebody disagrees with how the PR does something, or believes that it will cause a problem, causing the PR to stall out. While the reviewer may be correct, simple disagreement cannot be sufficient reason to block a PR without providing any alternative implementation. Therefore, the disagreeing reviewer must either provide a PR/patch to the primary PR or provide an alternative implementation in a new PR that addresses their concern. The disagreeing reviewer must ensure that their PR references the original PR. If no alternatives are provided, the PR will be merged and the disagreeing reviewer is welcome to base their future alternative implementation on the merged work. diff --git a/phobos/Design.md b/phobos/Design.md new file mode 100644 index 00000000000..c7c23ff557b --- /dev/null +++ b/phobos/Design.md @@ -0,0 +1,116 @@ +# Phobos 3 Design Goals + +## Rationale + +Phobos v2 is well over a decade old. As time goes by, best practices have evolved, mistakes have become apparent, needs have changed, and better ideas have appeared. + +Phobos must also evolve. + +## History + +* Phobos v1 was for D1 +* Phobos v2 was for D2 + +## Phobos 2 + +When Phobos v2 was developed, Phobos v1 was obsoleted. This broke a lot of existing code and was a wrenching change for the entire community. Old code needed to be rewritten to use Phobos v2. Some of the discarded v1 modules were restored in the unDead library for the convenience of older code, but the damage had been done. + +The existing roots of `core` for the Runtime, `etc` for C Interfaces, and `std` for the v2 Standard Library are to remain reserved for the foreseeable future. Both v2 and v3 will share usage of the `core` and `etc` roots. The `std` root is to be maintained for compatibility but no new features will be added. + +Therefore, v2 will continue to be supported following these rules moving forward: + +- Will continue to be supported for compatibility purposes. +- Will receive bug fixes and enhancements to adapt to new operating systems and new D Compiler Editions. +- Will not add new functionality. +- Existing Phobos v2 roots remain reserved indefinitely. +- User code must be able to use v2 and v3 capabilities in the same project, however, there may be instances of incompatibility as v2 types are not support in v3 and vice versa. + +## Phobos 3 + +This section is a list of design principles and goals that we have established for Phobos 3. + +### Hybrid single-root/multi-trunk package design + +Phobos v3 will use a single package root `phobos.` with multiple 'trunk' packages. This allows us to keep the old `std` package root while splitting up the new library into smaller, more manageable, components. Splitting the library into multiple packages provides the following benefits: + +1. Only pay for what you use. Different roots can be compiled as separate static/shared libraries and linked as needed, reducing the overall weight of executables. This offers some relief to the long standing community request to break Phobos into individual packages. While we do not agree with atomizing Phobos to the extreme degree of one package per module, multiple package roots allow us to achieve some of that goal in a logical manner. +2. Multiple trunks allow for layering components. The core roots form a foundation upon which to build higher-level packages. +3. Multiple trunks allow for an expanded feature set without adding to package depth. +4. Not all trunks need to be implemented for a given platform to be considered "supported". If only the core roots are required for a platform to be considered supported it becomes significantly less complicated to port D to new platforms. +5. Rules can be applied differently to core vs. non-core roots/trunks. For example, a possible rule could be that core roots/trunks may not throw exceptions under any circumstance, but non-core roots/trunks can. This is not intended to imply that throwing exceptions is encouraged, merely made available to allow more implementation flexibility for more complex constructs. +6. The old `std` root can continue to be maintained and built independently of the new Phobos root. +7. Multiple trunk packages allows Phobos to expand normally without running into the 64k DLL symbol limit on Windows. + +Currently the core roots/trunks for Phobos v3 are `core`, `etc`, and `phobos.sys`. As a rule, the `phobos.sys` trunk is not allowed to import from non-core trunks. + +[Proposed Package Structure for Phobos 3](PackageMap.md) + +### Strings + +#### No Autodecoding + +Autodecoding turned out to be a mistake because it is pervasive and impractical to disable. The user will need to specifically ask for decoding using a filter such as `utf.byDchar`. + +#### No Support For wchar And dchar + +Since v2 was designed, the programming world has more or less standardized on UTF-8. The internals of algorithms, ranges, and functions will only work with UTF-8. Support for `wchar` and `dchar` will come in the form of algorithms `utf.byChar`, `utf.byWchar` and `utf.byDchar`. + +#### Invalid Unicode + +v2 throws an Exception when encountering invalid Unicode. Throwing an Exception entails using the GC, meaning string code cannot be `@nogc` nor `nothrow`. Besides, common processing of strings means being tolerant of invalid Unicode rather than failing. For example, invalid Unicode is commonplace in web pages, and throwing an Exception when rendering such pages is unacceptable. + +Removal of autodecoding will in itself address most of the problem. When decoding code units into code points is needed, APIs should allow callers to specify the desired behavior, such as returning an "error" result, or replacing invalid sequences with the Unicode substitution character. Applications which need to handle untrusted data should be encouraged to use functions such as `std.utf.validate` (which return a `string` from `ubyte[]` only when it is valid UTF-8), or by-code-point decoding which reports errors for individual decoding operations. + +### Memory Management + +#### Minimize Memory Allocation + +Enormous troubles and inefficiencies stem from general purpose library code allocating memory as the library sees fit. This makes the library code far less usable. Memory allocation strategies should be decided upon by the user of the library, not the library. + +The easiest way to achieve this is to design the library to not use memory allocation at all. For example, std.path assembles paths from parts without doing allocations - it returns Voldemort ranges that the user can then use to emit the result into a buffer of the user's choosing. + +Library routines may allocate memory internally, but not in a way that affects the user. + +#### Minimize Exceptions + +Exceptions are inefficient, use the GC, and they cannot be used in `nothrow` code. Examine each use of an Exception to see if it can be designed out of existence, like the Replacement Character method above. Design the return value such that an error is not necessary - for example, a string search function can return an empty string if not found rather than throw an Exception. + +Investigate the use of Option/Sum types for error returns. + +#### Split-Level Design + +To achieve the twin goals of minimizing allocations and exceptions we will pursue a "split-level" design. The low-level function will take in a buffer instead of allocating and will return an error code instead of throwing exceptions. Then the high-level function can then call the low-level function with the appropriate buffers and can convert the error codes into exceptions. This allows us to maintain the simplicity of the high-level API while offering a low-level API those who need the additional performance. + +### Additional Goals + +#### Reduce Template Layering + +Phobos 2 frequently over-uses templates resulting in situations such as `std.conv.to`, which has over 10 layers of templates before the actual implementation is reached. This makes the code virtually impossible to comprehend and significantly increases compile times. Templates in Phobos 2 were often used as a way to add in new functionality without breaking existing code or as premature optimizations, this led to haphazard and frequently unnecessary layering of templates. When porting code from Phobos 2 into Phobos 3, care should be taken to audit the usage of template and determine where reductions can be made. + +#### Source Only + +Currently, Phobos is distributed as a separately compiled library with "header" files that contain only the necessary Template implementations. The net result is that Phobos is primarily a source-only library in practice. By formalizing the library as a source only library, it becomes inured against variations in compiler flags. Whether it's a static or dynamic library becomes irrelevant, and there won't be impedance mismatches. DRuntime will remain a separately compiled library. + +#### Single Script Builds + +The current Phobos build process is convoluted and relies on old or niche tools. This makes the process of building Phobos tedious and discourages active community participation. Phobos 3 will use a single build script written in D. For example, running unittests would be accomplished with the command: `dmd -run build_v3.d unittests`. + +### Versioning and Release Schedule + +Phobos3 versions will be versioned and distributed on the same schedule as the corresponding Compiler Edition. This allows Phobos to adopt the latest features from the in-development edition during the development of that edition. However, while Phobos will follow the same release schedule as the compiler editions, Phobos itself will not use the 'edition' terminology and will instead retain the use of the term 'version'. + +Phobos will use a slightly modified SemVer. The major version will increment with each Phobos release that is tied to a compiler edition, the minor version will increment with the monthly compiler releases, and the patch version will be incremented on any out-of-band bugfix releases that occur. + +## Specific Issues + +### std.stdio + +This module merges file I/O with formatting. Those should be split apart. File I/O should be done with ranges, and the formatting should work with any ranges. `stdin`, `stdout`, and `stderr` match the `stdin`, `stdout` and `stderr` of `core.stdc.stdio`. This causes terrible confusion and will be renamed to `stdIn`, `stdOut`, and `stdErr`. + +#### std.stdio.File + +Does way, way too much. It's incomprehensible. Should be redesigned using building blocks. + +### isXXXX templates + +Are generally very hard to figure out what they do, such as `isSomeChar`. What the heck does that mean? The string ones are even worse. diff --git a/phobos/PackageMap.md b/phobos/PackageMap.md new file mode 100644 index 00000000000..39008ec4661 --- /dev/null +++ b/phobos/PackageMap.md @@ -0,0 +1,87 @@ +## Phobos 3 Package Map + +### Open Questions + +1. `std.container`: Does it belong in `sys` or it's own root? This likely hinges on the status of [DIP1000](https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md) and whether or not it needs a ground up rewrite. +2. `std.concurrency`: It is possible that not all platforms support Concurrency mechanics. Should `std.concurrency` be required in the core roots or moved to a non-core root? +3. `std.parallelism`: It is possible that not all platforms support Task Parallelism mechanics. Should `std.parallelism` be required in the core roots or moved to a non-core root? +4. `std.digest`: Cryptography routines have unique requirements that would be best served by providing them in their own root. But in all cases providing bespoke implementations of cryptography routines is never recommended. Third-party trusted implementations should be used instead. This could be from OpenSSL/LibreSSL (POSIX), SChannel/BCrypt (Windows), or CryptoKit (MacOS/IOS). It is acceptable to provide implementations of Non-Cryptographic routines such as CRC and Murmur. This would entail removing all the digests except CRC and Murmur from this package and building a separate cryptography package. +5. Which, if any, modules should be removed? This could be either a permanent removal or pending replacement with ground-up rewrites. + +### Proposed Package Structure (Existing Modules Only) + +``` +core.* +etc.* +std.* +phobos.sys + | algorithm + | comparison + | iteration + | mutation + | searching + | setops + | sorting + | array + | bigint + | bitmanip + | checkedint + | compiler + | complex + | conv + | datetime + | date + | interval + | stopwatch + | systime + | timezone + | demangle + | exception + | functional + | getopt + | int128 + | io + | console (stdio) + | file + | mmfile + | path + | math + | algebraic + | constants + | exponential + | hardware + | operations + | remainder + | rounding + | traits + | trigonometry + | special + | numeric + | meta + | outbuffer + | process + | random + | range + | signals + | stdint + | string + | sumtype + | system + | traits + | typecons + | uuid + | variant +phobos.data + | base64 + | csv + | json + | zip +phobos.text + | ascii + | encoding + | uni + | utf +phobos.net + | socket + | uri +``` \ No newline at end of file diff --git a/phobos/README.md b/phobos/README.md new file mode 100644 index 00000000000..cbedd061835 --- /dev/null +++ b/phobos/README.md @@ -0,0 +1,21 @@ +# Phobos 3 + +This repo contains all the code required to build the Phobos Standard Library. This library will supersede the Phobos 2 library contained in the `std` folder when completed. + +## Goals + +Phobos 3 is currently under active development and is not ready for use at any level. Aside from the DLang forums, the Phobos goals +* [Design Goals](Design.md) This document discusses what the established goals are for Phobos 3. +* [Phobos V3 Discussions](https://github.com/dlang/PhobosV3-Design/discussions) Visit the GitHub Discussions to discuss additional design goals as well as specific feature ideas for V3 and beyond. + +## How can I contribute? + +We welcome contributions! Many people all over the world have helped make this project better. + +* [D Lanaguage Contributors Guide](https://github.com/dlang/phobos/blob/master/CONTRIBUTING.md) explains the general guidelines for contributing to the D Programming Language. +* [Phobos 3 Contributors Guide](CONTRIBUTING.md) explains the specific guidelines for contributing to Phobos 3. + + +## License + +Phobos is licensed under the [Boost](https://github.com/dlang/phobos/blob/master/LICENSE_1_0.txt) license. \ No newline at end of file diff --git a/phobos/sys/compiler.d b/phobos/sys/compiler.d new file mode 100644 index 00000000000..8181c9e3f10 --- /dev/null +++ b/phobos/sys/compiler.d @@ -0,0 +1,58 @@ +// Written in the D programming language. + +/** + * Identify the compiler used and its various features. + * + * Copyright: Copyright The D Language Foundation 2000 - 2011. + * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). + * Authors: $(HTTP digitalmars.com, Walter Bright), Alex Rønne Petersen + * Source: $(PHOBOSSRC phobos/sys/compiler.d) + */ +/* Copyright The D Language Foundation 2000 - 2011. + * Distributed under the Boost Software License, Version 1.0. + * (See accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +module phobos.sys.compiler; + +immutable +{ + /// Vendor specific string naming the compiler, for example: "Digital Mars D". + string name = __VENDOR__; + + /// Master list of D compiler vendors. + enum Vendor + { + unknown = 0, /// Compiler vendor could not be detected + digitalMars = 1, /// Digital Mars D (DMD) + gnu = 2, /// GNU D Compiler (GDC) + llvm = 3, /// LLVM D Compiler (LDC) + dotNET = 4, /// D.NET + sdc = 5, /// Snazzy D Compiler (SDC) + } + + /// Which vendor produced this compiler. + version (StdDdoc) Vendor vendor; + else version (DigitalMars) Vendor vendor = Vendor.digitalMars; + else version (GNU) Vendor vendor = Vendor.gnu; + else version (LDC) Vendor vendor = Vendor.llvm; + else version (D_NET) Vendor vendor = Vendor.dotNET; + else version (SDC) Vendor vendor = Vendor.sdc; + else Vendor vendor = Vendor.unknown; + + + /** + * The vendor specific version number, as in + * version_major.version_minor + */ + uint version_major = __VERSION__ / 1000; + uint version_minor = __VERSION__ % 1000; /// ditto + + + /** + * The version of the D Programming Language Specification + * supported by the compiler. + */ + uint D_major = 2; + uint D_minor = 0; +} diff --git a/phobos/sys/meta.d b/phobos/sys/meta.d new file mode 100644 index 00000000000..1c31b67a72f --- /dev/null +++ b/phobos/sys/meta.d @@ -0,0 +1,1255 @@ +// Written in the D programming language +/++ + Templates to manipulate + $(DDSUBLINK spec/template, variadic-templates, template parameter sequences) + (also known as $(I alias sequences)). + + Some operations on alias sequences are built into the language, + such as `S[i]`, which accesses the element at index `i` in the + sequence. `S[low .. high]` returns a new alias + sequence that is a slice of the old one. + + For more information, see + $(DDLINK ctarguments, Compile-time Sequences, Compile-time Sequences). + + One thing that should be noted is that while the templates provided in this + module can be extremely useful, they generally should not be used with lists + of values. The language uses alias sequences for a variety of things + (including both parameter lists and argument lists), so they can contain + types, symbols, values, or a mixture of them all. The ability to manipulate + types and symbols within alias sequences is vital, because that's really + the only way to do it. However, because D has CTFE (Compile-Time Function + Evaluation), making it possible to call many functions at compile time, if + code needs to be able to manipulate values at compile-time, CTFE is + typically much more efficient and easier to do. Instantiating a bunch of + templates to manipulate values is incredibly inefficient in comparison. + + So, while many of the templates in this module will work with values simply + because alias sequences can contain values, most code should restrict + itself to using them for operating on types or symbols - i.e. the stuff + where CTFE can't be used. That being said, there will be times when one can + be used to feed into the other. E.G. + --- + alias Types = AliasSeq!(int, byte, ulong, int[10]); + + enum Sizeof(T) = T.sizeof; + + alias sizesAsAliasSeq = Map!(Sizeof, Types); + static assert(sizesAsAliasSeq == AliasSeq!(4, 1, 8, 40)); + + enum size_t[] sizes = [sizesAsAliasSeq]; + static assert(sizes == [4, 1, 8, 40]); + --- + + Just be aware that if CTFE can be used for a particular task, it's better to + use CTFE than to manipulate alias sequences with the kind of templates + provided by this module. + + $(SCRIPT inhibitQuickIndex = 1;) + $(DIVC quickindex, + $(BOOKTABLE , + $(TR $(TH Category) $(TH Templates)) + $(TR $(TD Building blocks) $(TD + $(LREF Alias) + $(LREF AliasSeq) + )) + $(TR $(TD Alias sequence filtering) $(TD + $(LREF Filter) + $(LREF Stride) + $(LREF Unique) + )) + $(TR $(TD Alias sequence transformation) $(TD + $(LREF Map) + $(LREF Reverse) + )) + $(TR $(TD Alias sequence searching) $(TD + $(LREF all) + $(LREF any) + $(LREF indexOf) + )) + $(TR $(TD Template predicates) $(TD + $(LREF And) + $(LREF Not) + $(LREF Or) + )) + $(TR $(TD Template instantiation) $(TD + $(LREF ApplyLeft) + $(LREF ApplyRight) + $(LREF Instantiate) + )) + ) + + References: + Based on ideas in Table 3.1 from + $(LINK2 http://amazon.com/exec/obidos/ASIN/0201704315/ref=ase_classicempire/102-2957199-2585768, + Modern C++ Design), + Andrei Alexandrescu (Addison-Wesley Professional, 2001) + + Copyright: Copyright The D Language Foundation 2005 - 2024. + License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). + Authors: $(HTTP digitalmars.com, Walter Bright), + $(HTTP klickverbot.at, David Nadlinger) + $(HTTP jmdavisprog.com, Jonathan M Davis) + Source: $(PHOBOSSRC phobos/sys/meta) ++/ +module phobos.sys.meta; + +// Example for converting types to values from module documentation. +@safe unittest +{ + alias Types = AliasSeq!(int, byte, ulong, int[10]); + + enum Sizeof(T) = T.sizeof; + + alias sizesAsAliasSeq = Map!(Sizeof, Types); + static assert(sizesAsAliasSeq == AliasSeq!(4, 1, 8, 40)); + + enum size_t[] sizes = [sizesAsAliasSeq]; + static assert(sizes == [4, 1, 8, 40]); +} + +/++ + Creates a sequence of zero or more aliases. This is most commonly + used as template parameters or arguments. + +/ +alias AliasSeq(TList...) = TList; + +/// +@safe unittest +{ + alias TL = AliasSeq!(int, double); + + int foo(TL td) // same as int foo(int, double); + { + return td[0] + cast(int) td[1]; + } +} + +/// +@safe unittest +{ + alias TL = AliasSeq!(int, double); + + alias Types = AliasSeq!(TL, char); + static assert(is(Types == AliasSeq!(int, double, char))); +} + +/// +@safe unittest +{ + static char foo(size_t i, string str) + { + return str[i]; + } + + alias vars = AliasSeq!(2, "dlang"); + + assert(foo(vars) == 'a'); +} + +/++ + Allows aliasing of any single symbol, type or compile-time expression. + + Not everything can be directly aliased. An alias cannot be declared + of - for example - a literal: + --- + alias a = 4; //Error + --- + With this template any single entity can be aliased: + --- + alias b = Alias!4; //OK + --- + See_Also: + To alias more than one thing at once, use $(LREF AliasSeq). + +/ +alias Alias(alias a) = a; + +/// Ditto +alias Alias(T) = T; + +/// +@safe unittest +{ + // Without Alias this would fail if Args[0] were e.g. a value and + // some logic would be needed to detect when to use enum instead. + alias Head(Args...) = Alias!(Args[0]); + alias Tail(Args...) = Args[1 .. $]; + + alias Blah = AliasSeq!(3, int, "hello"); + static assert(Head!Blah == 3); + static assert(is(Head!(Tail!Blah) == int)); + static assert((Tail!Blah)[1] == "hello"); +} + +/// +@safe unittest +{ + { + alias a = Alias!123; + static assert(a == 123); + } + { + enum e = 1; + alias a = Alias!e; + static assert(a == 1); + } + { + alias a = Alias!(3 + 4); + static assert(a == 7); + } + { + alias concat = (s0, s1) => s0 ~ s1; + alias a = Alias!(concat("Hello", " World!")); + static assert(a == "Hello World!"); + } + { + alias A = Alias!int; + static assert(is(A == int)); + } + { + alias A = Alias!(AliasSeq!int); + static assert(!is(typeof(A[0]))); // An Alias is not an AliasSeq. + static assert(is(A == int)); + } + { + auto i = 6; + alias a = Alias!i; + ++a; + assert(i == 7); + } +} + +/++ + Filters an $(D AliasSeq) using the given template predicate. + + The result is an $(D AliasSeq) that contains only the elements which satisfy + the predicate. + +/ +template Filter(alias Pred, Args...) +{ + alias Filter = AliasSeq!(); + static foreach (Arg; Args) + { + static if (Pred!Arg) + Filter = AliasSeq!(Filter, Arg); + } +} + +/// +@safe unittest +{ + import phobos.sys.traits : isDynamicArray, isPointer, isUnsignedInteger; + + alias Types = AliasSeq!(string, int, int[], bool[], ulong, double, ubyte); + + static assert(is(Filter!(isDynamicArray, Types) == + AliasSeq!(string, int[], bool[]))); + + static assert(is(Filter!(isUnsignedInteger, Types) == + AliasSeq!(ulong, ubyte))); + + static assert(is(Filter!(isPointer, Types) == AliasSeq!())); +} + +/++ + Evaluates to an $(LREF AliasSeq) which only contains every nth element from + the $(LREF AliasSeq) that was passed in, where $(D n) is stepSize. + + So, if stepSize is $(D 2), then the result contains every other element from + the original. If stepSize is $(D 3), then the result contains every third + element from the original. Etc. + + If stepSize is negative, then the result is equivalent to using + $(LREF Reverse) on the given $(LREF AliasSeq) and then using Stride on it + with the absolute value of that stepSize. + + If stepSize is positive, then the first element in the original + $(LREF AliasSeq) is the first element in the result, whereas if stepSize is + negative, then the last element in the original is the first element in the + result. Each subsequent element is then the element at the index of the + previous element plus stepSize. + +/ +template Stride(int stepSize, Args...) +if (stepSize != 0) +{ + alias Stride = AliasSeq!(); + static if (stepSize > 0) + { + static foreach (i; 0 .. (Args.length + stepSize - 1) / stepSize) + Stride = AliasSeq!(Stride, Args[i * stepSize]); + } + else + { + static foreach (i; 0 .. (Args.length - stepSize - 1) / -stepSize) + Stride = AliasSeq!(Stride, Args[$ - 1 + i * stepSize]); + } +} + +/// +@safe unittest +{ + static assert(is(Stride!(1, short, int, long) == AliasSeq!(short, int, long))); + static assert(is(Stride!(2, short, int, long) == AliasSeq!(short, long))); + static assert(is(Stride!(3, short, int, long) == AliasSeq!short)); + static assert(is(Stride!(100, short, int, long) == AliasSeq!short)); + + static assert(is(Stride!(-1, short, int, long) == AliasSeq!(long, int, short))); + static assert(is(Stride!(-2, short, int, long) == AliasSeq!(long, short))); + static assert(is(Stride!(-3, short, int, long) == AliasSeq!long)); + static assert(is(Stride!(-100, short, int, long) == AliasSeq!long)); + + alias Types = AliasSeq!(short, int, long, ushort, uint, ulong); + static assert(is(Stride!(3, Types) == AliasSeq!(short, ushort))); + static assert(is(Stride!(3, Types[1 .. $]) == AliasSeq!(int, uint))); + static assert(is(Stride!(-3, Types) == AliasSeq!(ulong, long))); + + static assert(is(Stride!(-2, Types) == Stride!(2, Reverse!Types))); + + static assert(is(Stride!1 == AliasSeq!())); + static assert(is(Stride!100 == AliasSeq!())); +} + +@safe unittest +{ + static assert(!__traits(compiles, Stride!(0, int))); + + alias Types = AliasSeq!(bool, byte, ubyte, short, ushort, int, uint, long, ulong, + char, wchar, dchar, float, double, real, Object); + alias Types2 = AliasSeq!(bool, ubyte, ushort, uint, ulong, wchar, float, real); + alias Types3 = AliasSeq!(bool, short, uint, char, float, Object); + alias Types4 = AliasSeq!(bool, ushort, ulong, float); + alias Types5 = AliasSeq!(bool, int, wchar, Object); + alias Types6 = AliasSeq!(bool, uint, float); + alias Types7 = AliasSeq!(bool, long, real); + alias Types8 = AliasSeq!(bool, ulong); + alias Types9 = AliasSeq!(bool, char); + alias Types10 = AliasSeq!(bool, wchar); + + static assert(is(Stride!(1, Types) == Types)); + static assert(is(Stride!(2, Types) == Types2)); + static assert(is(Stride!(3, Types) == Types3)); + static assert(is(Stride!(4, Types) == Types4)); + static assert(is(Stride!(5, Types) == Types5)); + static assert(is(Stride!(6, Types) == Types6)); + static assert(is(Stride!(7, Types) == Types7)); + static assert(is(Stride!(8, Types) == Types8)); + static assert(is(Stride!(9, Types) == Types9)); + static assert(is(Stride!(10, Types) == Types10)); + + static assert(is(Stride!(-1, Types) == Reverse!Types)); + static assert(is(Stride!(-2, Types) == Stride!(2, Reverse!Types))); + static assert(is(Stride!(-3, Types) == Stride!(3, Reverse!Types))); + static assert(is(Stride!(-4, Types) == Stride!(4, Reverse!Types))); + static assert(is(Stride!(-5, Types) == Stride!(5, Reverse!Types))); + static assert(is(Stride!(-6, Types) == Stride!(6, Reverse!Types))); + static assert(is(Stride!(-7, Types) == Stride!(7, Reverse!Types))); + static assert(is(Stride!(-8, Types) == Stride!(8, Reverse!Types))); + static assert(is(Stride!(-9, Types) == Stride!(9, Reverse!Types))); + static assert(is(Stride!(-10, Types) == Stride!(10, Reverse!Types))); +} + +/++ + Evaluates to an $(LREF AliasSeq) which contains no duplicate elements. + + Unique takes a binary template predicate that it uses to compare elements + for equality. If the predicate is $(D true) when an element in the given + $(LREF AliasSeq) is compared with an element with a lower index, then that + element is not included in the result (so if any elements in the + $(LREF AliasSeq) are considered equal per the predicate, then only the + first one is included in the result). + + Note that the binary predicate must be partially instantiable, e.g. + --- + alias PartialCmp = Cmp!(Args[0]); + enum same = PartialCmp!(Args[1]); + --- + Otherwise, it won't work. + + See_Also: + $(REF isSameSymbol, phobos, sys, traits) + $(REF isSameType, phobos, sys, traits) + +/ +template Unique(alias Cmp, Args...) +{ + alias Unique = AliasSeq!(); + static foreach (i, Arg; Args) + { + static if (i == 0) + Unique = AliasSeq!Arg; + else + Unique = AppendIfUnique!(Cmp, Unique, Arg); + } +} + +// Unfortunately, this can't be done in-place in Unique, because then we get +// errors about reassigning Unique after reading it. +private template AppendIfUnique(alias Cmp, Args...) +{ + static if (indexOf!(Cmp!(Args[$ - 1]), Args[0 .. $ - 1]) == -1) + alias AppendIfUnique = Args; + else + alias AppendIfUnique = Args[0 .. $ - 1]; +} + +/// +@safe unittest +{ + import phobos.sys.traits : isSameType; + + alias Types1 = AliasSeq!(int, long, long, int, int, float, int); + + static assert(is(Unique!(isSameType, Types1) == + AliasSeq!(int, long, float))); + + alias Types2 = AliasSeq!(byte, ubyte, short, ushort, int, uint); + static assert(is(Unique!(isSameType, Types2) == Types2)); + + // Empty AliasSeq. + static assert(Unique!isSameType.length == 0); + + // An AliasSeq with a single element works as well. + static assert(Unique!(isSameType, int).length == 1); +} + +/// +@safe unittest +{ + import phobos.sys.traits : isSameSymbol; + + int i; + string s; + real r; + alias Symbols = AliasSeq!(i, s, i, i, s, r, r, i); + + alias Result = Unique!(isSameSymbol, Symbols); + static assert(Result.length == 3); + static assert(__traits(isSame, Result[0], i)); + static assert(__traits(isSame, Result[1], s)); + static assert(__traits(isSame, Result[2], r)); + + // Comparing AliasSeqs for equality with is expressions only works + // if they only contain types. + static assert(!is(Symbols == Result)); +} + +/// +@safe unittest +{ + alias Types = AliasSeq!(int, uint, long, string, short, int*, ushort); + + template sameSize(T) + { + enum sameSize(U) = T.sizeof == U.sizeof; + } + static assert(is(Unique!(sameSize, Types) == + AliasSeq!(int, long, string, short))); + + // The predicate must be partially instantiable. + enum sameSize_fails(T, U) = T.sizeof == U.sizeof; + static assert(!__traits(compiles, Unique!(sameSize_fails, Types))); +} + +/++ + Map takes a template and applies it to every element in the given + $(D AliasSeq), resulting in an $(D AliasSeq) with the transformed elements. + + So, it's equivalent to + `AliasSeq!(Fun!(Args[0]), Fun!(Args[1]), ..., Fun!(Args[$ - 1]))`. + +/ +template Map(alias Fun, Args...) +{ + alias Map = AliasSeq!(); + static foreach (Arg; Args) + Map = AliasSeq!(Map, Fun!Arg); +} + +/// +@safe unittest +{ + import phobos.sys.traits : Unqualified; + + // empty + alias Empty = Map!Unqualified; + static assert(Empty.length == 0); + + // single + alias Single = Map!(Unqualified, const int); + static assert(is(Single == AliasSeq!int)); + + // several + alias Several = Map!(Unqualified, int, const int, immutable int, uint, + ubyte, byte, short, ushort, const long); + static assert(is(Several == AliasSeq!(int, int, int, uint, + ubyte, byte, short, ushort, long))); + + alias ToDynamicArray(T) = T[]; + + alias Arrays = Map!(ToDynamicArray, int, const ubyte, string); + static assert(is(Arrays == AliasSeq!(int[], const(ubyte)[], string[]))); +} + +// @@@ BUG @@@ The test below exposes failure of the straightforward use. +// See @adamdruppe's comment to https://github.com/dlang/phobos/pull/8039 +@safe unittest +{ + template id(alias what) + { + enum id = __traits(identifier, what); + } + + enum A { a } + static assert(Map!(id, A.a) == AliasSeq!"a"); +} + +// regression test for https://issues.dlang.org/show_bug.cgi?id=21088 +@system unittest // typeid opEquals is @system +{ + enum getTypeId(T) = typeid(T); + alias A = Map!(getTypeId, int); + + assert(A == typeid(int)); +} + +/++ + Takes an $(D AliasSeq) and result in an $(D AliasSeq) where the order of + the elements has been reversed. + +/ +template Reverse(Args...) +{ + alias Reverse = AliasSeq!(); + static foreach_reverse (Arg; Args) + Reverse = AliasSeq!(Reverse, Arg); +} + +/// +@safe unittest +{ + static assert(is(Reverse!(int, byte, long, string) == + AliasSeq!(string, long, byte, int))); + + alias Types = AliasSeq!(int, long, long, int, float, + ubyte, short, ushort, uint); + static assert(is(Reverse!Types == AliasSeq!(uint, ushort, short, ubyte, + float, int, long, long, int))); + + static assert(is(Reverse!() == AliasSeq!())); +} + +/++ + Whether the given template predicate is $(D true) for all of the elements in + the given $(D AliasSeq). + + Evaluation is $(I not) short-circuited if a $(D false) result is + encountered; the template predicate must be instantiable with all the + elements. + +/ +version (StdDdoc) template all(alias Pred, Args...) +{ + import core.internal.traits : allSatisfy; + alias all = allSatisfy!(Pred, Args); +} +else +{ + import core.internal.traits : allSatisfy; + alias all = allSatisfy; +} + +/// +@safe unittest +{ + import phobos.sys.traits : isDynamicArray, isInteger; + + static assert(!all!(isInteger, int, double)); + static assert( all!(isInteger, int, long)); + + alias Types = AliasSeq!(string, int[], bool[]); + + static assert( all!(isDynamicArray, Types)); + static assert(!all!(isInteger, Types)); + + static assert( all!isInteger); +} + +/++ + Whether the given template predicate is $(D true) for any of the elements in + the given $(D AliasSeq). + + Evaluation is $(I not) short-circuited if a $(D true) result is + encountered; the template predicate must be instantiable with all the + elements. + +/ +version (StdDdoc) template any(alias Pred, Args...) +{ + import core.internal.traits : anySatisfy; + alias any = anySatisfy!(Pred, Args); +} +else +{ + import core.internal.traits : anySatisfy; + alias any = anySatisfy; +} + +/// +@safe unittest +{ + import phobos.sys.traits : isDynamicArray, isInteger; + + static assert(!any!(isInteger, string, double)); + static assert( any!(isInteger, int, double)); + + alias Types = AliasSeq!(string, int[], bool[], real, bool); + + static assert( any!(isDynamicArray, Types)); + static assert(!any!(isInteger, Types)); + + static assert(!any!isInteger); +} + +/++ + Evaluates to the index of the first element where $(D Pred!(Args[i])) is + $(D true). + + If $(D Pred!(Args[i])) is not $(D true) for any elements, then the result + is $(D -1). + + Evaluation is $(I not) short-circuited if a $(D true) result is + encountered; the template predicate must be instantiable with all the + elements. + +/ +template indexOf(alias Pred, Args...) +{ + enum ptrdiff_t indexOf = + { + static foreach (i; 0 .. Args.length) + { + static if (Pred!(Args[i])) + return i; + } + return -1; + }(); +} + +/// +@safe unittest +{ + import phobos.sys.traits : isInteger, isSameSymbol, isSameType; + + alias Types1 = AliasSeq!(string, int, long, char[], ubyte, int); + alias Types2 = AliasSeq!(float, double, int[], char[], void); + + static assert(indexOf!(isInteger, Types1) == 1); + static assert(indexOf!(isInteger, Types2) == -1); + + static assert(indexOf!(isSameType!ubyte, Types1) == 4); + static assert(indexOf!(isSameType!ubyte, Types2) == -1); + + int i; + int j; + string s; + int foo() { return 0; } + alias Symbols = AliasSeq!(i, j, foo); + static assert(indexOf!(isSameSymbol!j, Symbols) == 1); + static assert(indexOf!(isSameSymbol!s, Symbols) == -1); + + // Empty AliasSeq. + static assert(indexOf!isInteger == -1); + + // The predicate does not compile with all of the arguments, + // so indexOf does not compile. + static assert(!__traits(compiles, indexOf!(isSameType!int, long, int, 42))); +} + +unittest +{ + import phobos.sys.traits : isSameType; + + static assert(indexOf!(isSameType!int, short, int, long) >= 0); + static assert(indexOf!(isSameType!string, short, int, long) < 0); + + // This is to verify that we don't accidentally end up with the type of + // the result differing based on whether it's -1 or not. Not specifying the + // type at all in indexOf results in -1 being int on all systems and the + // other results being whatever size_t is (ulong on most systems at this + // point), which does generally work, but being explicit with the type + // avoids any subtle issues that might come from the type of the result + // varying based on whether the item is found or not. + static assert(is(typeof(indexOf!(isSameType!int, short, int, long)) == + typeof(indexOf!(isSameType!string, short, int, long)))); + + static assert(indexOf!(isSameType!string, string, string, string, string) == 0); + static assert(indexOf!(isSameType!string, int, string, string, string) == 1); + static assert(indexOf!(isSameType!string, int, int, string, string) == 2); + static assert(indexOf!(isSameType!string, int, int, int, string) == 3); + static assert(indexOf!(isSameType!string, int, int, int, int) == -1); +} + +/++ + Combines multiple template predicates into a single template predicate using + logical AND - i.e. for the resulting predicate to be $(D true) with a + particular argument, all of the predicates must be $(D true) with that + argument. + + Evaluation is $(I not) short-circuited if a $(D false) result is + encountered; the template predicate must be instantiable with all the + elements. + + See_Also: + $(LREF Not) + $(LREF Or) + +/ +template And(Preds...) +{ + enum And(Args...) = + { + static foreach (Pred; Preds) + { + static if (!Pred!Args) + return false; + } + return true; + }(); +} + +/// +@safe unittest +{ + import phobos.sys.traits : isNumeric; + + template isSameSize(size_t size) + { + enum isSameSize(T) = T.sizeof == size; + } + + alias is32BitNumeric = And!(isNumeric, isSameSize!4); + + static assert(!is32BitNumeric!short); + static assert( is32BitNumeric!int); + static assert(!is32BitNumeric!long); + static assert( is32BitNumeric!float); + static assert(!is32BitNumeric!double); + static assert(!is32BitNumeric!(int*)); + + // An empty sequence of predicates always yields true. + alias alwaysTrue = And!(); + static assert(alwaysTrue!int); +} + +/++ + Predicates with multiple parameters are also supported. However, the number + of parameters must match. + +/ +@safe unittest +{ + import phobos.sys.traits : isImplicitlyConvertible, isInteger, isSameType; + + alias isOnlyImplicitlyConvertible + = And!(Not!isSameType, isImplicitlyConvertible); + + static assert( isOnlyImplicitlyConvertible!(int, long)); + static assert(!isOnlyImplicitlyConvertible!(int, int)); + static assert(!isOnlyImplicitlyConvertible!(long, int)); + + static assert( isOnlyImplicitlyConvertible!(string, const(char)[])); + static assert(!isOnlyImplicitlyConvertible!(string, string)); + static assert(!isOnlyImplicitlyConvertible!(const(char)[], string)); + + // Mismatched numbers of parameters. + alias doesNotWork = And!(isInteger, isImplicitlyConvertible); + static assert(!__traits(compiles, doesNotWork!int)); + static assert(!__traits(compiles, doesNotWork!(int, long))); +} + +@safe unittest +{ + enum testAlways(Args...) = true; + enum testNever(Args...) = false; + + static assert( Instantiate!(And!(testAlways, testAlways, testAlways), int)); + static assert(!Instantiate!(And!(testAlways, testAlways, testNever), int)); + static assert(!Instantiate!(And!(testAlways, testNever, testNever), int)); + static assert(!Instantiate!(And!(testNever, testNever, testNever), int)); + static assert(!Instantiate!(And!(testNever, testNever, testAlways), int)); + static assert(!Instantiate!(And!(testNever, testAlways, testAlways), int)); + + static assert( Instantiate!(And!(testAlways, testAlways), int)); + static assert(!Instantiate!(And!(testAlways, testNever), int)); + static assert(!Instantiate!(And!(testNever, testAlways), int)); + static assert(!Instantiate!(And!(testNever, testNever), int)); + + static assert( Instantiate!(And!testAlways, int)); + static assert(!Instantiate!(And!testNever, int)); + + // No short-circuiting. + import phobos.sys.traits : isEqual, isFloatingPoint; + static assert(!Instantiate!(And!isFloatingPoint, int)); + static assert(!__traits(compiles, Instantiate!(And!(isFloatingPoint, isEqual), int))); +} + +/++ + Evaluates to a template predicate which negates the given predicate. + + See_Also: + $(LREF And) + $(LREF Or) + +/ +template Not(alias Pred) +{ + enum Not(Args...) = !Pred!Args; +} + +/// +@safe unittest +{ + import phobos.sys.traits : isDynamicArray, isPointer; + + alias isNotPointer = Not!isPointer; + static assert( isNotPointer!int); + static assert(!isNotPointer!(int*)); + static assert( all!(isNotPointer, string, char, float)); + + static assert(!all!(Not!isDynamicArray, string, char[], int[], long)); + static assert( any!(Not!isDynamicArray, string, char[], int[], long)); +} + +/++ + Predicates with multiple parameters are also supported. + +/ +@safe unittest +{ + import phobos.sys.traits : isImplicitlyConvertible, isInteger; + + alias notImplicitlyConvertible = Not!isImplicitlyConvertible; + + static assert( notImplicitlyConvertible!(long, int)); + static assert(!notImplicitlyConvertible!(int, long)); + + static assert( notImplicitlyConvertible!(const(char)[], string)); + static assert(!notImplicitlyConvertible!(string, const(char)[])); +} + +/++ + Combines multiple template predicates into a single template predicate using + logical OR - i.e. for the resulting predicate to be $(D true) with a + particular argument, at least one of the predicates must be $(D true) with + that argument. + + Evaluation is $(I not) short-circuited if a $(D true) result is + encountered; the template predicate must be instantiable with all the + elements. + + See_Also: + $(LREF And) + $(LREF Not) + +/ +template Or(Preds...) +{ + enum Or(Args...) = + { + static foreach (Pred; Preds) + { + static if (Pred!Args) + return true; + } + return false; + }(); +} + +/// +@safe unittest +{ + import phobos.sys.traits : isFloatingPoint, isSignedInteger; + + alias isSignedNumeric = Or!(isFloatingPoint, isSignedInteger); + + static assert( isSignedNumeric!short); + static assert( isSignedNumeric!long); + static assert( isSignedNumeric!double); + static assert(!isSignedNumeric!uint); + static assert(!isSignedNumeric!ulong); + static assert(!isSignedNumeric!string); + static assert(!isSignedNumeric!(int*)); + + // An empty sequence of predicates always yields false. + alias alwaysFalse = Or!(); + static assert(!alwaysFalse!int); +} + +/++ + Predicates with multiple parameters are also supported. However, the number + of parameters must match. + +/ +@safe unittest +{ + import phobos.sys.traits : isImplicitlyConvertible, isInteger; + + enum isSameSize(T, U) = T.sizeof == U.sizeof; + alias convertibleOrSameSize = Or!(isImplicitlyConvertible, isSameSize); + + static assert( convertibleOrSameSize!(int, int)); + static assert( convertibleOrSameSize!(int, long)); + static assert(!convertibleOrSameSize!(long, int)); + + static assert( convertibleOrSameSize!(int, float)); + static assert( convertibleOrSameSize!(float, int)); + static assert(!convertibleOrSameSize!(double, int)); + static assert(!convertibleOrSameSize!(float, long)); + + static assert( convertibleOrSameSize!(int*, string*)); + + // Mismatched numbers of parameters. + alias doesNotWork = Or!(isInteger, isImplicitlyConvertible); + static assert(!__traits(compiles, doesNotWork!int)); + static assert(!__traits(compiles, doesNotWork!(int, long))); +} + +@safe unittest +{ + enum testAlways(Args...) = true; + enum testNever(Args...) = false; + + static assert( Instantiate!(Or!(testAlways, testAlways, testAlways), int)); + static assert( Instantiate!(Or!(testAlways, testAlways, testNever), int)); + static assert( Instantiate!(Or!(testAlways, testNever, testNever), int)); + static assert(!Instantiate!(Or!(testNever, testNever, testNever), int)); + + static assert( Instantiate!(Or!(testAlways, testAlways), int)); + static assert( Instantiate!(Or!(testAlways, testNever), int)); + static assert( Instantiate!(Or!(testNever, testAlways), int)); + static assert(!Instantiate!(Or!(testNever, testNever), int)); + + static assert( Instantiate!(Or!testAlways, int)); + static assert(!Instantiate!(Or!testNever, int)); + + static assert(Instantiate!(Or!testAlways, int)); + static assert(Instantiate!(Or!testAlways, Map)); + static assert(Instantiate!(Or!testAlways, int, Map)); + + // No short-circuiting. + import phobos.sys.traits : isEqual, isInteger; + static assert( Instantiate!(Or!isInteger, int)); + static assert(!__traits(compiles, Instantiate!(Or!(isInteger, isEqual), int))); +} + +/++ + Instantiates the given template with the given arguments and evaluates to + the result of that template. + + This is used to work around some syntactic limitations that D has with + regards to instantiating templates. Essentially, D requires a name for a + template when instantiating it (be it the name of the template itself or an + alias to the template), which causes problems when you don't have that. + + Specifically, if the template is within an $(LREF AliasSeq) - e.g. + $(D Templates[0]!Args) - or it's the result of another template - e.g + $(D Foo!Bar!Baz) - the instantiation is illegal. This leaves two ways to + solve the problem. The first is to create an alias, e.g. + --- + alias Template = Templates[0]; + enum result = Template!Args; + + alias Partial = Foo!Bar; + alias T = Partial!Baz; + --- + The second is to use Instantiate, e.g. + --- + enum result = Instantiate!(Templates[0], Args); + + alias T = Instiantiate!(Foo!Bar, Baz); + --- + + Of course, the downside to this is that it adds an additional template + instantiation, but it avoids creating an alias just to be able to + instantiate a template. So, whether it makes sense to use Instantiate + instead of an alias naturally depends on the situation, but without it, + we'd be forced to create aliases even in situations where that's + problematic. + + See_Also: + $(LREF ApplyLeft) + $(LREF ApplyRight) + +/ +alias Instantiate(alias Template, Args...) = Template!Args; + +/// +@safe unittest +{ + import phobos.sys.traits : ConstOf, isImplicitlyConvertible, isSameType, isInteger; + + alias Templates = AliasSeq!(isImplicitlyConvertible!int, + isSameType!string, + isInteger, + ConstOf); + + // Templates[0]!long does not compile, because the compiler can't parse it. + + static assert( Instantiate!(Templates[0], long)); + static assert(!Instantiate!(Templates[0], string)); + + static assert(!Instantiate!(Templates[1], long)); + static assert( Instantiate!(Templates[1], string)); + + static assert( Instantiate!(Templates[2], long)); + static assert(!Instantiate!(Templates[2], string)); + + static assert(is(Instantiate!(Templates[3], int) == const int)); + static assert(is(Instantiate!(Templates[3], double) == const double)); +} + +/// +@safe unittest +{ + template hasMember(string member) + { + enum hasMember(T) = __traits(hasMember, T, member); + } + + struct S + { + int foo; + } + + // hasMember!"foo"!S does not compile, + // because having multiple ! arguments is not allowed. + + static assert( Instantiate!(hasMember!"foo", S)); + static assert(!Instantiate!(hasMember!"bar", S)); +} + +/++ + Instantiate also allows us to do template instantations via templates that + take other templates as arguments. + +/ +@safe unittest +{ + import phobos.sys.traits : isInteger, isNumeric, isUnsignedInteger; + + alias Results = Map!(ApplyRight!(Instantiate, int), + isInteger, isNumeric, isUnsignedInteger); + + static assert([Results] == [true, true, false]); +} + +/++ + ApplyLeft does a + $(LINK2 http://en.wikipedia.org/wiki/Partial_application, partial application) + of its arguments, providing a way to bind a set of arguments to the given + template while delaying actually instantiating that template until the full + set of arguments is provided. The "Left" in the name indicates that the + initial arguments are one the left-hand side of the argument list + when the given template is instantiated. + + Essentially, ApplyLeft results in a template that stores Template and Args, + and when that intermediate template is instantiated in turn, it instantiates + Template with Args on the left-hand side of the arguments to Template and + with the arguments to the intermediate template on the right-hand side - + i.e. Args is applied to the left when instantiating Template. + + So, if you have + --- + alias Intermediate = ApplyLeft!(MyTemplate, Arg1, Arg2); + alias Result = Intermediate!(ArgA, ArgB); + --- + then that is equivalent to + --- + alias Result = MyTemplate!(Arg1, Arg2, ArgA, ArgB); + --- + with the difference being that you have an intermediate template which can + be stored or passed to other templates (e.g. as a template predicate). + + The only difference between ApplyLeft and $(LREF ApplyRight) is whether + Args is on the left-hand or the right-hand side of the arguments given to + Template when it's instantiated. + + Note that in many cases, the need for ApplyLeft can be eliminated by making + it so that Template can be partially instantiated. E.G. + --- + enum isSameType(T, U) = is(T == U); + + template isSameType(T) + { + enum isSameType(U) = is(T == U); + } + --- + makes it so that both of these work + --- + enum result1 = isSameType!(int, long); + + alias Intermediate = isSameType!int; + enum result2 = Intermediate!long; + --- + whereas if only the two argument version is provided, then ApplyLeft would + be required for the second use case. + --- + enum result1 = isSameType!(int, long); + + alias Intermediate = ApplyLeft!(isSameType, int); + enum result2 = Intermediate!long; + --- + + See_Also: + $(LREF ApplyRight) + $(LREF Instantiate) + +/ +template ApplyLeft(alias Template, Args...) +{ + alias ApplyLeft(Right...) = Template!(Args, Right); +} + +/// +@safe unittest +{ + { + alias Intermediate = ApplyLeft!(AliasSeq, ubyte, ushort, uint); + alias Result = Intermediate!(char, wchar, dchar); + static assert(is(Result == AliasSeq!(ubyte, ushort, uint, char, wchar, dchar))); + } + { + enum isImplicitlyConvertible(T, U) = is(T : U); + + // i.e. isImplicitlyConvertible!(ubyte, T) is what all is checking for + // with each element in the AliasSeq. + static assert(all!(ApplyLeft!(isImplicitlyConvertible, ubyte), + short, ushort, int, uint, long, ulong)); + } + { + enum hasMember(T, string member) = __traits(hasMember, T, member); + + struct S + { + bool foo; + int bar; + string baz; + } + + static assert(all!(ApplyLeft!(hasMember, S), "foo", "bar", "baz")); + } + { + // Either set of arguments can be empty, since the first set is just + // stored to be applied later, and then when the intermediate template + // is instantiated, they're all applied to the given template in the + // requested order. However, whether the code compiles when + // instantiating the intermediate template depends on what kinds of + // arguments the given template requires. + + alias Intermediate1 = ApplyLeft!AliasSeq; + static assert(Intermediate1!().length == 0); + + enum isSameSize(T, U) = T.sizeof == U.sizeof; + + alias Intermediate2 = ApplyLeft!(isSameSize, int); + static assert(Intermediate2!uint); + + alias Intermediate3 = ApplyLeft!(isSameSize, int, uint); + static assert(Intermediate3!()); + + alias Intermediate4 = ApplyLeft!(isSameSize); + static assert(Intermediate4!(int, uint)); + + // isSameSize requires two arguments + alias Intermediate5 = ApplyLeft!isSameSize; + static assert(!__traits(compiles, Intermediate5!())); + static assert(!__traits(compiles, Intermediate5!int)); + static assert(!__traits(compiles, Intermediate5!(int, long, string))); + } +} + +/++ + ApplyRight does a + $(LINK2 http://en.wikipedia.org/wiki/Partial_application, partial application) + of its arguments, providing a way to bind a set of arguments to the given + template while delaying actually instantiating that template until the full + set of arguments is provided. The "Right" in the name indicates that the + initial arguments are one the right-hand side of the argument list + when the given template is instantiated. + + Essentially, ApplyRight results in a template that stores Template and + Args, and when that intermediate template is instantiated in turn, it + instantiates Template with the arguments to the intermediate template on + the left-hand side and with Args on the right-hand side - i.e. Args is + applied to the right when instantiating Template. + + So, if you have + --- + alias Intermediate = ApplyRight!(MyTemplate, Arg1, Arg2); + alias Result = Intermediate!(ArgA, ArgB); + --- + then that is equivalent to + --- + alias Result = MyTemplate!(ArgA, ArgB, Arg1, Arg2); + --- + with the difference being that you have an intermediate template which can + be stored or passed to other templates (e.g. as a template predicate). + + The only difference between $(LREF ApplyLeft) and ApplyRight is whether + Args is on the left-hand or the right-hand side of the arguments given to + Template when it's instantiated. + + See_Also: + $(LREF ApplyLeft) + $(LREF Instantiate) + +/ +template ApplyRight(alias Template, Args...) +{ + alias ApplyRight(Left...) = Template!(Left, Args); +} + +/// +@safe unittest +{ + { + alias Intermediate = ApplyRight!(AliasSeq, ubyte, ushort, uint); + alias Result = Intermediate!(char, wchar, dchar); + static assert(is(Result == AliasSeq!(char, wchar, dchar, ubyte, ushort, uint))); + } + { + enum isImplicitlyConvertible(T, U) = is(T : U); + + // i.e. isImplicitlyConvertible!(T, short) is what Filter is checking + // for with each element in the AliasSeq. + static assert(is(Filter!(ApplyRight!(isImplicitlyConvertible, short), + ubyte, string, short, float, int) == + AliasSeq!(ubyte, short))); + } + { + enum hasMember(T, string member) = __traits(hasMember, T, member); + + struct S1 + { + bool foo; + } + + struct S2 + { + int foo() { return 42; } + } + + static assert(all!(ApplyRight!(hasMember, "foo"), S1, S2)); + } + { + // Either set of arguments can be empty, since the first set is just + // stored to be applied later, and then when the intermediate template + // is instantiated, they're all applied to the given template in the + // requested order. However, whether the code compiles when + // instantiating the intermediate template depends on what kinds of + // arguments the given template requires. + + alias Intermediate1 = ApplyRight!AliasSeq; + static assert(Intermediate1!().length == 0); + + enum isSameSize(T, U) = T.sizeof == U.sizeof; + + alias Intermediate2 = ApplyRight!(isSameSize, int); + static assert(Intermediate2!uint); + + alias Intermediate3 = ApplyRight!(isSameSize, int, uint); + static assert(Intermediate3!()); + + alias Intermediate4 = ApplyRight!(isSameSize); + static assert(Intermediate4!(int, uint)); + + // isSameSize requires two arguments + alias Intermediate5 = ApplyRight!isSameSize; + static assert(!__traits(compiles, Intermediate5!())); + static assert(!__traits(compiles, Intermediate5!int)); + } +} diff --git a/phobos/sys/system.d b/phobos/sys/system.d new file mode 100644 index 00000000000..1c8f22a2d2f --- /dev/null +++ b/phobos/sys/system.d @@ -0,0 +1,160 @@ +// Written in the D programming language. + +/** + * Information about the target operating system, environment, and CPU. + * + * Copyright: Copyright The D Language Foundation 2000 - 2011 + * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). + * Authors: $(HTTP digitalmars.com, Walter Bright) and + $(HTTP jmdavisprog.com, Jonathan M Davis) + * Source: $(PHOBOSSRC phobos/sys/system.d) + */ +module phobos.sys.system; + +immutable +{ + /++ + Operating system. + + Note: + This is for cases where you need a value representing the OS at + runtime. If you're doing something which should compile differently + on different OSes, then please use `version (Windows)`, + `version (linux)`, etc. + + See_Also: + $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) + +/ + enum OS + { + win32 = 1, /// Microsoft 32 bit Windows systems + win64, /// Microsoft 64 bit Windows systems + linux, /// All Linux Systems, except for Android + osx, /// Mac OS X + iOS, /// iOS + tvOS, /// tvOS + watchOS, /// watchOS + freeBSD, /// FreeBSD + netBSD, /// NetBSD + openBSD, /// OpenBSD + dragonFlyBSD, /// DragonFlyBSD + solaris, /// Solaris + haiku, /// HaikuOS + android, /// Android + otherPosix, /// Other Posix Systems + unknown, /// Unknown + } + + /// The OS that the program was compiled for. + version (Win32) OS os = OS.win32; + else version (Win64) OS os = OS.win64; + else version (Android) OS os = OS.android; + else version (linux) OS os = OS.linux; + else version (OSX) OS os = OS.osx; + else version (iOS) OS os = OS.iOS; + else version (tvOS) OS os = OS.tvOS; + else version (watchOS) OS os = OS.watchOS; + else version (FreeBSD) OS os = OS.freeBSD; + else version (NetBSD) OS os = OS.netBSD; + else version (OpenBSD) OS os = OS.openBSD; + else version (DragonFlyBSD) OS os = OS.dragonFlyBSD; + else version (Solaris) OS os = OS.solaris; + else version (Haiku) OS os = OS.haiku; + else version (Posix) OS os = OS.otherPosix; + else OS os = OS.unknown; + + /++ + Byte order endianness. + + Note: + This is intended for cases where you need to deal with endianness at + runtime. If you're doing something which should compile differently + depending on whether you're compiling on a big endian or little + endian machine, then please use `version (BigEndian)` and + `version (LittleEndian)`. + + See_Also: + $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) + +/ + enum Endian + { + bigEndian, /// Big endian byte order + littleEndian /// Little endian byte order + } + + /// The endianness that the program was compiled for. + version (LittleEndian) Endian endian = Endian.littleEndian; + else Endian endian = Endian.bigEndian; + /++ + Instruction Set Architecture. + + Note: + This is intended for cases where you need a value representing the + instruction set architecture at runtime. If you're doing something + which should compile differently depending on instruction set + architecture, then please use `version (X86_64)`, `version (ARM)`, + etc. + + See_Also: + $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) + +/ + enum ISA + { + x86, /// Intel and AMD 32-bit processors + x86_64, /// Intel and AMD 64-bit processors + arm, /// The ARM architecture (32-bit) (AArch32 et al) + aarch64, /// The Advanced RISC Machine architecture (64-bit) + asmJS, /// The asm.js intermediate programming language + avr, /// 8-bit Atmel AVR Microcontrollers + epiphany, /// The Epiphany architecture + ppc, /// The PowerPC architecture, 32-bit + ppc64, /// The PowerPC architecture, 64-bit + ia64, /// The Itanium architecture (64-bit) + mips32, /// The MIPS architecture, 32-bit + mips64, /// The MIPS architecture, 64-bit + msp430, /// The MSP430 architecture + nvptx, /// The Nvidia Parallel Thread Execution (PTX) architecture, 32-bit + nvptx64, /// The Nvidia Parallel Thread Execution (PTX) architecture, 64-bit + riscv32, /// The RISC-V architecture, 32-bit + riscv64, /// The RISC-V architecture, 64-bit + sparc, /// The SPARC architecture, 32-bit + sparc64, /// The SPARC architecture, 64-bit + s390, /// The System/390 architecture, 32-bit + systemZ, /// The System Z architecture, 64-bit + hppa, /// The HP PA-RISC architecture, 32-bit + hppa64, /// The HP PA-RISC architecture, 64-bit + sh, /// The SuperH architecture, 32-bit + webAssembly, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit + alpha, /// The Alpha architecture + unknown, /// Unknown + } + + /// The instruction set architecture that the program was compiled for. + version (X86) ISA instructionSetArchitecture = ISA.x86; + else version (X86_64) ISA instructionSetArchitecture = ISA.x86_64; + else version (ARM) ISA instructionSetArchitecture = ISA.arm; + else version (AArch64) ISA instructionSetArchitecture = ISA.aarch64; + else version (AsmJS) ISA instructionSetArchitecture = ISA.asmJS; + else version (AVR) ISA instructionSetArchitecture = ISA.avr; + else version (Epiphany) ISA instructionSetArchitecture = ISA.epiphany; + else version (PPC) ISA instructionSetArchitecture = ISA.ppc; + else version (PPC64) ISA instructionSetArchitecture = ISA.ppc64; + else version (IA64) ISA instructionSetArchitecture = ISA.ia64; + else version (MIPS32) ISA instructionSetArchitecture = ISA.mips32; + else version (MIPS64) ISA instructionSetArchitecture = ISA.mips64; + else version (MSP430) ISA instructionSetArchitecture = ISA.msp430; + else version (NVPTX) ISA instructionSetArchitecture = ISA.nvptx; + else version (NVPTX64) ISA instructionSetArchitecture = ISA.nvptx64; + else version (RISCV32) ISA instructionSetArchitecture = ISA.riscv32; + else version (RISCV64) ISA instructionSetArchitecture = ISA.riscv64; + else version (SPARC) ISA instructionSetArchitecture = ISA.sparc; + else version (SPARC64) ISA instructionSetArchitecture = ISA.sparc64; + else version (S390) ISA instructionSetArchitecture = ISA.s390; + else version (SystemZ) ISA instructionSetArchitecture = ISA.systemZ; + else version (HPPA) ISA instructionSetArchitecture = ISA.hppa; + else version (HPPA64) ISA instructionSetArchitecture = ISA.hppa64; + else version (SH) ISA instructionSetArchitecture = ISA.sh; + else version (WebAssembly) ISA instructionSetArchitecture = ISA.webAssembly; + else version (Alpha) ISA instructionSetArchitecture = ISA.alpha; + else ISA instructionSetArchitecture = ISA.unknown; +} diff --git a/phobos/sys/traits.d b/phobos/sys/traits.d new file mode 100644 index 00000000000..595dc7a15b6 --- /dev/null +++ b/phobos/sys/traits.d @@ -0,0 +1,4002 @@ +// Written in the D programming language +/++ + Templates which extract information about types and symbols at compile time. + + In the context of phobos.sys.traits, a "trait" is a template which provides + information about a type or symbol. Most traits evaluate to + $(D true) or $(D false), telling the code using it whether the given + arguments match / have that specific trait (e.g. whether the given type is + a dynamic array or whether the given function is $(D @safe)). However, some + traits may provide other kinds of information about a type (e.g. the trait + could evaluate to the base type for an enum type, or it could strip + $(D const) from the type to provide the mutable version of that type). + + These traits are then used primarily in template constraints so that they + can test that the template arguments meet the criteria required by those + templates, though they can be useful in a variety of compile-time contexts + (e.g. the condition of a $(D static if)). + + Note that unless otherwise specified, the isXXXX and hasXXX traits in this + module are checking for exact matches, so base types (e.g. with enums) and + other implicit conversions do not factor into whether such traits are true + or false. The type itself is being checked, not what it can be converted + to. + + This is because these traits are often used in templated constraints, and + having a type pass a template constraint based on an implicit conversion + but then not have the implicit conversion actually take place (which it + won't unless the template does something to force it internally) can lead + to either compilation errors or subtle behavioral differences - and even + when the conversion is done explicitly within a templated function, since + it's not done at the call site, it can still lead to subtle bugs in some + cases (e.g. if slicing a static array is involved). + + So, it's typically best to be explicit and clear about a template constraint + accepting any kind of implicit conversion rather than having it buried in a + trait where programmers stand a good chance of using the trait without + realizing that enums might pass based on their base type - or that a type + might pass based on some other implicit conversion. + + Regardless of what a trait is testing for, the documentation strives to be + $(I very) clear about what the trait does, and of course, the names do try + to make it clear as well - though obviously, only so much information can + be put into a name, and some folks will misintrepret some symbols no matter + how well they're named. So, please be sure that you clearly understand what + these traits do when using them, since messing up template constraints can + unfortunately be a great way to introduce subtle bugs into your program. + Either way, of course, unit tests are your friends. + + $(SCRIPT inhibitQuickIndex = 1;) + + $(BOOKTABLE , + $(TR $(TH Category) $(TH Templates)) + $(TR $(TD Categories of types) $(TD + $(LREF isAggregateType) + $(LREF isDynamicArray) + $(LREF isFloatingPoint) + $(LREF isInstantiationOf) + $(LREF isInteger) + $(LREF isNumeric) + $(LREF isPointer) + $(LREF isSignedInteger) + $(LREF isStaticArray) + $(LREF isUnsignedInteger) + )) + $(TR $(TD Aggregate Type traits) $(TD + $(LREF EnumMembers) + )) + $(TR $(TD Traits testing for type conversions) $(TD + $(LREF isImplicitlyConvertible) + $(LREF isQualifierConvertible) + )) + $(TR $(TD Traits for comparisons) $(TD + $(LREF isEqual) + $(LREF isSameSymbol) + $(LREF isSameType) + )) + $(TR $(TD Aggregate Type Traits) $(TD + $(LREF FieldNames) + $(LREF FieldSymbols) + $(LREF FieldTypes) + )) + $(TR $(TD General Types) $(TD + $(LREF KeyType) + $(LREF OriginalType) + $(LREF ValueType) + )) + $(TR $(TD Traits for removing type qualfiers) $(TD + $(LREF Unconst) + $(LREF Unshared) + $(LREF Unqualified) + )) + $(TR $(TD Type Constructors) $(TD + $(LREF ConstOf) + $(LREF ImmutableOf) + $(LREF InoutOf) + $(LREF SharedOf) + )) + $(TR $(TD Misc) $(TD + $(LREF lvalueOf) + $(LREF rvalueOf) + )) + ) + + Copyright: Copyright The D Language Foundation 2005 - 2024. + License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). + Authors: $(HTTP jmdavisprog.com, Jonathan M Davis) + $(HTTP digitalmars.com, Walter Bright), + Tomasz Stachowiak (`isExpressions`), + $(HTTP erdani.org, Andrei Alexandrescu), + Shin Fujishiro, + $(HTTP octarineparrot.com, Robert Clipsham), + $(HTTP klickverbot.at, David Nadlinger), + Kenji Hara, + Shoichi Kato + Source: $(PHOBOSSRC phobos/sys/traits) ++/ +module phobos.sys.traits; + +/++ + Whether the given type is an "aggregate type" - i.e. a struct, class, + interface, or union. + +/ +enum isAggregateType(T) = is(T == struct) || is(T == class) || is(T == interface) || is(T == union); + +@safe unittest +{ + struct S {} + class C {} + interface I {} + union U {} + + static assert( isAggregateType!S); + static assert( isAggregateType!C); + static assert( isAggregateType!I); + static assert( isAggregateType!U); + static assert( isAggregateType!(const S)); + static assert( isAggregateType!(shared C)); + + static assert(!isAggregateType!int); + static assert(!isAggregateType!string); + static assert(!isAggregateType!(S*)); + static assert(!isAggregateType!(C[])); + static assert(!isAggregateType!(I[string])); +} + +/++ + Whether the given type is a dynamic array (or what is sometimes referred to + as a slice, since a dynamic array in D is a slice of memory). + + Note that this does not include implicit conversions or enum types. The + type itself must be a dynamic array. + + Remember that D's dynamic arrays are essentially: + --- + struct DynamicArray(T) + { + size_t length; + T* ptr; + } + --- + where $(D ptr) points to the first element in the array, and $(D length) is + the number of elements in the array. + + A dynamic array is not a pointer (unlike arrays in C/C++), and its elements + do not live inside the dynamic array itself. The dynamic array is simply a + slice of memory and does not own or manage its own memory. It can be a + slice of any piece of memory, including GC-allocated memory, the stack, + malloc-ed memory, etc. (with what kind of memory it is of course being + determined by how the dynamic array was created in the first place) + - though if you do any operations on it which end up requiring allocation + (e.g. appending to it if it doesn't have the capacity to expand in-place, + which it won't if it isn't a slice of GC-allocated memory), then that + reallocation will result in the dynamic array being a slice of newly + allocated, GC-backed memory (regardless of what it was a slice of before), + since it's the GC that deals with those allocations. + + As long as code just accesses the elements or members of the dynamic array + - or reduces its length so that it's a smaller slice - it will continue to + point to whatever block of memory it pointed to originally. And because the + GC makes sure that appending to a dynamic array does not stomp on the + memory of any other dynamic arrays, appending to a dynamic array will not + affect any other dynamic array which is a slice of that same block of + memory whether a reallocation occurs or not. + + Regardless, since what allocated the memory that the dynamic array is a + slice of is irrevelant to the type of the dynamic array, whether a given + type is a dynamic array has nothing to do with the kind of memory that's + backing it. A dynamic array which is a slice of a static array of $(D int) + is the the same type as a dynamic array of $(D int) allocated with $(D new) + - i.e. both are $(D int[]). So, this trait will not tell you anything about + what kind of memory a dynamic array is a slice of. It just tells you + whether the type is a dynamic array or not. + + If for some reason, it matters for a function what kind of memory backs one + of its parameters which is a dynamic array, or it needs to be made clear + whether the function will possibly cause that dynamic array to be + reallocated, then that needs to be indicated by the documentation and + cannot be enforced with a template constraint. A template constraint can + enforce that a type used with a template meets certain criteria (e.g. that + it's a dynamic array), but it cannot enforce anything about how the + template actually uses the type. + + However, it $(D is) possible to enforce that a function doesn't use any + operations on a dynamic array which might cause it to be reallocated by + marking that function as $(D @nogc). + + In most cases though, code can be written to not care what kind of memory + backs a dynamic array, because none of the operations on a dynamic array + actually care what kind of memory it's a slice of. It mostly just matters + when you need to track the lifetime of the memory, because it wasn't + allocated by the GC, or when it matters whether a dynamic array could be + reallocated or not (e.g. because the code needs to have that dynamic array + continue to point to the same block of memory). + + See_Also: + $(LREF isPointer) + $(LREF isStaticArray) + $(DDSUBLINK spec/arrays, , The language spec for arrays) + +/ +enum isDynamicArray(T) = is(T == U[], U); + +/// +@safe unittest +{ + // Some types which are dynamic arrays. + static assert( isDynamicArray!(int[])); + static assert( isDynamicArray!(const int[])); + static assert( isDynamicArray!(inout int[])); + static assert( isDynamicArray!(shared(int)[])); + static assert( isDynamicArray!string); + + static assert( isDynamicArray!(typeof([1, 2, 3]))); + static assert( isDynamicArray!(typeof("dlang"))); + + int[] arr; + static assert( isDynamicArray!(typeof(arr))); + + // Some types which aren't dynamic arrays. + static assert(!isDynamicArray!int); + static assert(!isDynamicArray!(int*)); + static assert(!isDynamicArray!real); + + static struct S + { + int[] arr; + } + static assert(!isDynamicArray!S); + + // The struct itself isn't considered a dynamic array, + // but its member variable is when checked directly. + static assert( isDynamicArray!(typeof(S.arr))); + + // Static arrays. + static assert(!isDynamicArray!(int[5])); + static assert(!isDynamicArray!(const(int)[5])); + + int[2] sArr = [42, 97]; + static assert(!isDynamicArray!(typeof(sArr))); + + // While a static array is not a dynamic array, + // a slice of a static array is a dynamic array. + static assert( isDynamicArray!(typeof(sArr[]))); + + // Dynamic array of static arrays. + static assert( isDynamicArray!(long[3][])); + + // Static array of dynamic arrays. + static assert(!isDynamicArray!(long[][3])); + + // Associative array. + static assert(!isDynamicArray!(int[string])); + + // While typeof(null) gets treated as void[] in some contexts, it is + // distinct from void[] and is not considered to be a dynamic array. + static assert(!isDynamicArray!(typeof(null))); + + // However, naturally, if null is cast to a dynamic array, it's a + // dynamic array, since the cast forces the type. + static assert( isDynamicArray!(typeof(cast(int[]) null))); + + enum E : int[] + { + a = [1, 2, 3], + } + + // Enums do not count. + static assert(!isDynamicArray!E); + + static struct AliasThis + { + int[] arr; + alias this = arr; + } + + // Other implicit conversions do not count. + static assert(!isDynamicArray!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(int[], char[], string, long[3][], double[string][])) + { + enum E : Q!T { a = Q!T.init } + + static assert( isDynamicArray!(Q!T)); + static assert(!isDynamicArray!E); + static assert(!isDynamicArray!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(int, int[51], int[][2], + char[][int][11], immutable char[13u], + const(real)[1], const(real)[1][1], void[0])) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isDynamicArray!(Q!T)); + static assert(!isDynamicArray!E); + static assert(!isDynamicArray!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether type $(D T) is a static array. + + Note that this does not include implicit conversions or enum types. The + type itself must be a static array. This is in contrast to + $(D __traits(isStaticArray, T)) which is true for enums (but not for other + implict conversions to static arrays). + + As explained in the module documentation, traits like this one are not true + for enums (unlike most of the $(D __traits) traits) in order to avoid + testing for implicit conversions by default with template constraints, + since that tends to lead to subtle bugs when the code isn't carefully + written to take implicit conversions into account. + + See also: + $(DDSUBLINK spec/traits, isStaticArray, $(D __traits(isStaticArray, T))) + $(DDSUBLINK spec/arrays, , The language spec for arrays) + +/ +enum isStaticArray(T) = is(T == U[n], U, size_t n); + +/// +@safe unittest +{ + // Some types which are static arrays. + static assert( isStaticArray!(int[12])); + static assert( isStaticArray!(const int[42])); + static assert( isStaticArray!(inout int[0])); + static assert( isStaticArray!(shared(int)[907])); + static assert( isStaticArray!(immutable(char)[5])); + + // D doesn't have static array literals, but you get the same effect + // by casting a dynamic array literal to a static array, and of course, + // the result is typed as a static array. + static assert( isStaticArray!(typeof(cast(int[3]) [1, 2, 3]))); + + int[2] sArr = [1, 2]; + static assert( isStaticArray!(typeof(sArr))); + + // Some types which are not static arrays. + static assert(!isStaticArray!int); + static assert(!isStaticArray!(int*)); + static assert(!isStaticArray!real); + + static struct S + { + int[4] arr; + } + static assert(!isStaticArray!S); + + // The struct itself isn't considered a static array, + // but its member variable is when checked directly. + static assert( isStaticArray!(typeof(S.arr))); + + // Dynamic arrays. + static assert(!isStaticArray!(int[])); + static assert(!isStaticArray!(const(int)[])); + static assert(!isStaticArray!string); + + int[] arr; + static assert(!isStaticArray!(typeof(arr))); + + // A slice of a static array is of course not a static array, + // because it's a dynamic array. + static assert(!isStaticArray!(typeof(sArr[]))); + + // Static array of dynamic arrays. + static assert( isStaticArray!(long[][3])); + + // Dynamic array of static arrays. + static assert(!isStaticArray!(long[3][])); + + // Associative array. + static assert(!isStaticArray!(int[string])); + + // Of course, null is not considered to be a static array. + static assert(!isStaticArray!(typeof(null))); + + enum E : int[3] + { + a = [1, 2, 3], + } + + // Enums do not count. + static assert(!isStaticArray!E); + + // This is where isStaticArray differs from __traits(isStaticArray, ...) + static assert( __traits(isStaticArray, E)); + + static struct AliasThis + { + int[] arr; + alias this = arr; + } + + // Other implicit conversions do not count. + static assert(!isStaticArray!AliasThis); + + static assert(!__traits(isStaticArray, AliasThis)); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(int[51], int[][2], + char[][int][11], immutable char[13u], + const(real)[1], const(real)[1][1], void[0])) + { + enum E : Q!T { a = Q!T.init, } + + static assert( isStaticArray!(Q!T)); + static assert(!isStaticArray!E); + static assert(!isStaticArray!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(int, int[], char[], string, long[3][], double[string][])) + { + enum E : Q!T { a = Q!T.init, } + + static assert(!isStaticArray!(Q!T)); + static assert(!isStaticArray!E); + static assert(!isStaticArray!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is one of the built-in integer types, ignoring all + qualifiers. + + $(TABLE + $(TR $(TH Integer Types)) + $(TR $(TD byte)) + $(TR $(TD ubyte)) + $(TR $(TD short)) + $(TR $(TD ushort)) + $(TR $(TD int)) + $(TR $(TD uint)) + $(TR $(TD long)) + $(TR $(TD ulong)) + ) + + Note that this does not include implicit conversions or enum types. The + type itself must be one of the built-in integer types. + + This trait does have some similarities with $(D __traits(isIntegral, T)), + but $(D isIntegral) accepts a $(I lot) more types than isInteger does. + isInteger is specifically for testing for the built-in integer types, + whereas $(D isIntegral) tests for a whole set of types that are vaguely + integer-like (including $(D bool), the three built-in character types, and + some of the vector types from core.simd). So, for most code, isInteger is + going to be more appropriate, but obviously, it depends on what the code is + trying to do. + + See also: + $(DDSUBLINK spec/traits, isIntegral, $(D __traits(isIntegral, T))) + $(LREF isFloatingPoint) + $(LREF isSignedInteger) + $(LREF isNumeric) + $(LREF isUnsignedInteger) + +/ +enum isInteger(T) = is(immutable T == immutable byte) || + is(immutable T == immutable ubyte) || + is(immutable T == immutable short) || + is(immutable T == immutable ushort) || + is(immutable T == immutable int) || + is(immutable T == immutable uint) || + is(immutable T == immutable long) || + is(immutable T == immutable ulong); + +/// +@safe unittest +{ + // Some types which are integer types. + static assert( isInteger!byte); + static assert( isInteger!ubyte); + static assert( isInteger!short); + static assert( isInteger!ushort); + static assert( isInteger!int); + static assert( isInteger!uint); + static assert( isInteger!long); + static assert( isInteger!ulong); + + static assert( isInteger!(const ubyte)); + static assert( isInteger!(immutable short)); + static assert( isInteger!(inout int)); + static assert( isInteger!(shared uint)); + static assert( isInteger!(const shared ulong)); + + static assert( isInteger!(typeof(42))); + static assert( isInteger!(typeof(1234567890L))); + + int i; + static assert( isInteger!(typeof(i))); + + // Some types which aren't integer types. + static assert(!isInteger!bool); + static assert(!isInteger!char); + static assert(!isInteger!wchar); + static assert(!isInteger!dchar); + static assert(!isInteger!(int[])); + static assert(!isInteger!(ubyte[4])); + static assert(!isInteger!(int*)); + static assert(!isInteger!double); + static assert(!isInteger!string); + + static struct S + { + int i; + } + static assert(!isInteger!S); + + // The struct itself isn't considered an integer, + // but its member variable is when checked directly. + static assert( isInteger!(typeof(S.i))); + + enum E : int + { + a = 42 + } + + // Enums do not count. + static assert(!isInteger!E); + + static struct AliasThis + { + int i; + alias this = i; + } + + // Other implicit conversions do not count. + static assert(!isInteger!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + // The actual core.simd types available vary from system to system, so we + // have to be a bit creative here. The reason that we're testing these types + // is because __traits(isIntegral, T) accepts them, but isInteger is not + // supposed to. + template SIMDTypes() + { + import core.simd; + + alias SIMDTypes = AliasSeq!(); + static if (is(ubyte16)) + SIMDTypes = AliasSeq!(SIMDTypes, ubyte16); + static if (is(int4)) + SIMDTypes = AliasSeq!(SIMDTypes, int4); + static if (is(double2)) + SIMDTypes = AliasSeq!(SIMDTypes, double2); + static if (is(void16)) + SIMDTypes = AliasSeq!(SIMDTypes, void16); + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(byte, ubyte, short, ushort, int, uint, long, ulong)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isInteger!(Q!T)); + static assert(!isInteger!E); + static assert(!isInteger!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(bool, char, wchar, dchar, float, double, real, SIMDTypes!(), + int[], ubyte[8], dchar[], void[], long*)) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isInteger!(Q!T)); + static assert(!isInteger!E); + static assert(!isInteger!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is one of the built-in signed integer types, ignoring + all qualifiers. + + $(TABLE + $(TR $(TH Signed Integer Types)) + $(TR $(TD byte)) + $(TR $(TD short)) + $(TR $(TD int)) + $(TR $(TD long)) + ) + + Note that this does not include implicit conversions or enum types. The + type itself must be one of the built-in signed integer types. + + See also: + $(LREF isFloatingPoint) + $(LREF isInteger) + $(LREF isNumeric) + $(LREF isUnsignedInteger) + +/ +enum isSignedInteger(T) = is(immutable T == immutable byte) || + is(immutable T == immutable short) || + is(immutable T == immutable int) || + is(immutable T == immutable long); + +/// +@safe unittest +{ + // Some types which are signed integer types. + static assert( isSignedInteger!byte); + static assert( isSignedInteger!short); + static assert( isSignedInteger!int); + static assert( isSignedInteger!long); + + static assert( isSignedInteger!(const byte)); + static assert( isSignedInteger!(immutable short)); + static assert( isSignedInteger!(inout int)); + static assert( isSignedInteger!(shared int)); + static assert( isSignedInteger!(const shared long)); + + static assert( isSignedInteger!(typeof(42))); + static assert( isSignedInteger!(typeof(1234567890L))); + + int i; + static assert( isSignedInteger!(typeof(i))); + + // Some types which aren't signed integer types. + static assert(!isSignedInteger!ubyte); + static assert(!isSignedInteger!ushort); + static assert(!isSignedInteger!uint); + static assert(!isSignedInteger!ulong); + + static assert(!isSignedInteger!bool); + static assert(!isSignedInteger!char); + static assert(!isSignedInteger!wchar); + static assert(!isSignedInteger!dchar); + static assert(!isSignedInteger!(int[])); + static assert(!isSignedInteger!(ubyte[4])); + static assert(!isSignedInteger!(int*)); + static assert(!isSignedInteger!double); + static assert(!isSignedInteger!string); + + static struct S + { + int i; + } + static assert(!isSignedInteger!S); + + // The struct itself isn't considered a signed integer, + // but its member variable is when checked directly. + static assert( isSignedInteger!(typeof(S.i))); + + enum E : int + { + a = 42 + } + + // Enums do not count. + static assert(!isSignedInteger!E); + + static struct AliasThis + { + int i; + alias this = i; + } + + // Other implicit conversions do not count. + static assert(!isSignedInteger!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + // The actual core.simd types available vary from system to system, so we + // have to be a bit creative here. The reason that we're testing these types + // is because __traits(isIntegral, T) accepts them, but isSignedInteger is + // not supposed to. + template SIMDTypes() + { + import core.simd; + + alias SIMDTypes = AliasSeq!(); + static if (is(ubyte16)) + SIMDTypes = AliasSeq!(SIMDTypes, ubyte16); + static if (is(int4)) + SIMDTypes = AliasSeq!(SIMDTypes, int4); + static if (is(double2)) + SIMDTypes = AliasSeq!(SIMDTypes, double2); + static if (is(void16)) + SIMDTypes = AliasSeq!(SIMDTypes, void16); + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(byte, short, int, long)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isSignedInteger!(Q!T)); + static assert(!isSignedInteger!E); + static assert(!isSignedInteger!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(ubyte, ushort, uint, ulong, + bool, char, wchar, dchar, float, double, real, SIMDTypes!(), + int[], ubyte[8], dchar[], void[], long*)) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isSignedInteger!(Q!T)); + static assert(!isSignedInteger!E); + static assert(!isSignedInteger!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is one of the built-in unsigned integer types, + ignoring all qualifiers. + + $(TABLE + $(TR $(TH Integer Types)) + $(TR $(TD ubyte)) + $(TR $(TD ushort)) + $(TR $(TD uint)) + $(TR $(TD ulong)) + ) + + Note that this does not include implicit conversions or enum types. The + type itself must be one of the built-in unsigned integer types. + + This trait does have some similarities with $(D __traits(isUnsigned, T)), + but $(D isUnsigned) accepts a $(I lot) more types than isUnsignedInteger + does. isUnsignedInteger is specifically for testing for the built-in + unsigned integer types, whereas $(D isUnsigned) tests for a whole set of + types that are unsigned and vaguely integer-like (including $(D bool), the + three built-in character types, and some of the vector types from + core.simd). So, for most code, isUnsignedInteger is going to be more + appropriate, but obviously, it depends on what the code is trying to do. + + See also: + $(DDSUBLINK spec/traits, isUnsigned, $(D __traits(isUnsigned, T))) + $(LREF isFloatingPoint) + $(LREF isInteger) + $(LREF isSignedInteger) + $(LREF isNumeric) + +/ +enum isUnsignedInteger(T) = is(immutable T == immutable ubyte) || + is(immutable T == immutable ushort) || + is(immutable T == immutable uint) || + is(immutable T == immutable ulong); + +/// +@safe unittest +{ + // Some types which are unsigned integer types. + static assert( isUnsignedInteger!ubyte); + static assert( isUnsignedInteger!ushort); + static assert( isUnsignedInteger!uint); + static assert( isUnsignedInteger!ulong); + + static assert( isUnsignedInteger!(const ubyte)); + static assert( isUnsignedInteger!(immutable ushort)); + static assert( isUnsignedInteger!(inout uint)); + static assert( isUnsignedInteger!(shared uint)); + static assert( isUnsignedInteger!(const shared ulong)); + + static assert( isUnsignedInteger!(typeof(42u))); + static assert( isUnsignedInteger!(typeof(1234567890UL))); + + uint u; + static assert( isUnsignedInteger!(typeof(u))); + + // Some types which aren't unsigned integer types. + static assert(!isUnsignedInteger!byte); + static assert(!isUnsignedInteger!short); + static assert(!isUnsignedInteger!int); + static assert(!isUnsignedInteger!long); + + static assert(!isUnsignedInteger!bool); + static assert(!isUnsignedInteger!char); + static assert(!isUnsignedInteger!wchar); + static assert(!isUnsignedInteger!dchar); + static assert(!isUnsignedInteger!(int[])); + static assert(!isUnsignedInteger!(ubyte[4])); + static assert(!isUnsignedInteger!(int*)); + static assert(!isUnsignedInteger!double); + static assert(!isUnsignedInteger!string); + + static struct S + { + uint u; + } + static assert(!isUnsignedInteger!S); + + // The struct itself isn't considered an unsigned integer, + // but its member variable is when checked directly. + static assert( isUnsignedInteger!(typeof(S.u))); + + enum E : uint + { + a = 42 + } + + // Enums do not count. + static assert(!isUnsignedInteger!E); + + static struct AliasThis + { + uint u; + alias this = u; + } + + // Other implicit conversions do not count. + static assert(!isUnsignedInteger!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + // The actual core.simd types available vary from system to system, so we + // have to be a bit creative here. The reason that we're testing these types + // is because __traits(isIntegral, T) and __traits(isUnsigned, T) accept + // them, but isUnsignedInteger is not supposed to. + template SIMDTypes() + { + import core.simd; + + alias SIMDTypes = AliasSeq!(); + static if (is(ubyte16)) + SIMDTypes = AliasSeq!(SIMDTypes, ubyte16); + static if (is(int4)) + SIMDTypes = AliasSeq!(SIMDTypes, int4); + static if (is(double2)) + SIMDTypes = AliasSeq!(SIMDTypes, double2); + static if (is(void16)) + SIMDTypes = AliasSeq!(SIMDTypes, void16); + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(ubyte, ushort, uint, ulong)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isUnsignedInteger!(Q!T)); + static assert(!isUnsignedInteger!E); + static assert(!isUnsignedInteger!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(byte, short, int, long, + bool, char, wchar, dchar, float, double, real, SIMDTypes!(), + int[], ubyte[8], dchar[], void[], long*)) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isUnsignedInteger!(Q!T)); + static assert(!isUnsignedInteger!E); + static assert(!isUnsignedInteger!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is one of the built-in floating-point types, ignoring + all qualifiers. + + $(TABLE + $(TR $(TH Floating-Point Types)) + $(TR $(TD float)) + $(TR $(TD double)) + $(TR $(TD real)) + ) + + Note that this does not include implicit conversions or enum types. The + type itself must be one of the built-in floating-point types. + + This trait does have some similarities with $(D __traits(isFloating, T)), + but $(D isFloating) accepts more types than isFloatingPoint does. + isFloatingPoint is specifically for testing for the built-in floating-point + types, whereas $(D isFloating) tests for a whole set of types that are + vaguely float-like (including enums with a base type which is a + floating-point type and some of the vector types from core.simd). So, for + most code, isFloatingPoint is going to be more appropriate, but obviously, + it depends on what the code is trying to do. + + See also: + $(DDSUBLINK spec/traits, isFloating, $(D __traits(isFloating, T))) + $(LREF isInteger) + $(LREF isSignedInteger) + $(LREF isNumeric) + $(LREF isUnsignedInteger) + +/ +enum isFloatingPoint(T) = is(immutable T == immutable float) || + is(immutable T == immutable double) || + is(immutable T == immutable real); + +/// +@safe unittest +{ + // Some types which are floating-point types. + static assert( isFloatingPoint!float); + static assert( isFloatingPoint!double); + static assert( isFloatingPoint!real); + + static assert( isFloatingPoint!(const float)); + static assert( isFloatingPoint!(immutable float)); + static assert( isFloatingPoint!(inout double)); + static assert( isFloatingPoint!(shared double)); + static assert( isFloatingPoint!(const shared real)); + + static assert( isFloatingPoint!(typeof(42.0))); + static assert( isFloatingPoint!(typeof(42f))); + static assert( isFloatingPoint!(typeof(1e5))); + static assert( isFloatingPoint!(typeof(97.4L))); + + double d; + static assert( isFloatingPoint!(typeof(d))); + + // Some types which aren't floating-point types. + static assert(!isFloatingPoint!bool); + static assert(!isFloatingPoint!char); + static assert(!isFloatingPoint!dchar); + static assert(!isFloatingPoint!int); + static assert(!isFloatingPoint!long); + static assert(!isFloatingPoint!(float[])); + static assert(!isFloatingPoint!(double[4])); + static assert(!isFloatingPoint!(real*)); + static assert(!isFloatingPoint!string); + + static struct S + { + double d; + } + static assert(!isFloatingPoint!S); + + // The struct itself isn't considered a floating-point type, + // but its member variable is when checked directly. + static assert( isFloatingPoint!(typeof(S.d))); + + enum E : double + { + a = 12.34 + } + + // Enums do not count. + static assert(!isFloatingPoint!E); + + static struct AliasThis + { + double d; + alias this = d; + } + + // Other implicit conversions do not count. + static assert(!isFloatingPoint!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + // The actual core.simd types available vary from system to system, so we + // have to be a bit creative here. The reason that we're testing these types + // is because __traits(isFloating, T) accepts them, but isFloatingPoint is + // not supposed to. + template SIMDTypes() + { + import core.simd; + + alias SIMDTypes = AliasSeq!(); + static if (is(int4)) + SIMDTypes = AliasSeq!(SIMDTypes, int4); + static if (is(double2)) + SIMDTypes = AliasSeq!(SIMDTypes, double2); + static if (is(void16)) + SIMDTypes = AliasSeq!(SIMDTypes, void16); + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(float, double, real)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isFloatingPoint!(Q!T)); + static assert(!isFloatingPoint!E); + static assert(!isFloatingPoint!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(bool, char, wchar, dchar, byte, ubyte, short, ushort, + int, uint, long, ulong, SIMDTypes!(), + int[], float[8], real[], void[], double*)) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isFloatingPoint!(Q!T)); + static assert(!isFloatingPoint!E); + static assert(!isFloatingPoint!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is one of the built-in numeric types, ignoring all + qualifiers. It's equivalent to $(D isInteger!T || isFloatingPoint!T), but + it only involves a single template instantation instead of two. + + $(TABLE + $(TR $(TH Numeric Types)) + $(TR $(TD byte)) + $(TR $(TD ubyte)) + $(TR $(TD short)) + $(TR $(TD ushort)) + $(TR $(TD int)) + $(TR $(TD uint)) + $(TR $(TD long)) + $(TR $(TD ulong)) + $(TR $(TD float)) + $(TR $(TD double)) + $(TR $(TD real)) + ) + + Note that this does not include implicit conversions or enum types. The + type itself must be one of the built-in numeric types. + + See_Also: + $(LREF isFloatingPoint) + $(LREF isInteger) + $(LREF isSignedInteger) + $(LREF isUnsignedInteger) + +/ +enum isNumeric(T) = is(immutable T == immutable byte) || + is(immutable T == immutable ubyte) || + is(immutable T == immutable short) || + is(immutable T == immutable ushort) || + is(immutable T == immutable int) || + is(immutable T == immutable uint) || + is(immutable T == immutable long) || + is(immutable T == immutable ulong) || + is(immutable T == immutable float) || + is(immutable T == immutable double) || + is(immutable T == immutable real); + +/// +@safe unittest +{ + // Some types which are numeric types. + static assert( isNumeric!byte); + static assert( isNumeric!ubyte); + static assert( isNumeric!short); + static assert( isNumeric!ushort); + static assert( isNumeric!int); + static assert( isNumeric!uint); + static assert( isNumeric!long); + static assert( isNumeric!ulong); + static assert( isNumeric!float); + static assert( isNumeric!double); + static assert( isNumeric!real); + + static assert( isNumeric!(const short)); + static assert( isNumeric!(immutable int)); + static assert( isNumeric!(inout uint)); + static assert( isNumeric!(shared long)); + static assert( isNumeric!(const shared real)); + + static assert( isNumeric!(typeof(42))); + static assert( isNumeric!(typeof(1234657890L))); + static assert( isNumeric!(typeof(42.0))); + static assert( isNumeric!(typeof(42f))); + static assert( isNumeric!(typeof(1e5))); + static assert( isNumeric!(typeof(97.4L))); + + int i; + static assert( isNumeric!(typeof(i))); + + // Some types which aren't numeric types. + static assert(!isNumeric!bool); + static assert(!isNumeric!char); + static assert(!isNumeric!dchar); + static assert(!isNumeric!(int[])); + static assert(!isNumeric!(double[4])); + static assert(!isNumeric!(real*)); + static assert(!isNumeric!string); + + static struct S + { + int i; + } + static assert(!isNumeric!S); + + // The struct itself isn't considered a numeric type, + // but its member variable is when checked directly. + static assert( isNumeric!(typeof(S.i))); + + enum E : int + { + a = 42 + } + + // Enums do not count. + static assert(!isNumeric!E); + + static struct AliasThis + { + int i; + alias this = i; + } + + // Other implicit conversions do not count. + static assert(!isNumeric!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + // The actual core.simd types available vary from system to system, so we + // have to be a bit creative here. The reason that we're testing these types + // is because __traits(isInteger, T) and __traits(isFloating, T) accept + // them, but isNumeric is not supposed to. + template SIMDTypes() + { + import core.simd; + + alias SIMDTypes = AliasSeq!(); + static if (is(int4)) + SIMDTypes = AliasSeq!(SIMDTypes, int4); + static if (is(double2)) + SIMDTypes = AliasSeq!(SIMDTypes, double2); + static if (is(void16)) + SIMDTypes = AliasSeq!(SIMDTypes, void16); + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(byte, ubyte, short, ushort, int, uint, long, ulong, float, double, real)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isNumeric!(Q!T)); + static assert(!isNumeric!E); + static assert(!isNumeric!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(bool, char, wchar, dchar, SIMDTypes!(), + int[], float[8], real[], void[], double*)) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isNumeric!(Q!T)); + static assert(!isNumeric!E); + static assert(!isNumeric!(AliasThis!(Q!T))); + } + } +} + +/++ + Whether the given type is a pointer. + + Note that this does not include implicit conversions or enum types. The + type itself must be a pointer. + + Also, remember that unlike C/C++, D's arrays are not pointers. Rather, a + dynamic array in D is a slice of memory which has a member which is a + pointer to its first element and another member which is the length of the + array as $(D size_t). So, a dynamic array / slice has a $(D ptr) member + which is a pointer, but the dynamic array itself is not a pointer. + + See_Also: + $(LREF isDynamicArray) + +/ +enum isPointer(T) = is(T == U*, U); + +/// +@system unittest +{ + // Some types which are pointers. + static assert( isPointer!(bool*)); + static assert( isPointer!(int*)); + static assert( isPointer!(int**)); + static assert( isPointer!(real*)); + static assert( isPointer!(string*)); + + static assert( isPointer!(const int*)); + static assert( isPointer!(immutable int*)); + static assert( isPointer!(inout int*)); + static assert( isPointer!(shared int*)); + static assert( isPointer!(const shared int*)); + + static assert( isPointer!(typeof("foobar".ptr))); + + int* ptr; + static assert( isPointer!(typeof(ptr))); + + int i; + static assert( isPointer!(typeof(&i))); + + // Some types which aren't pointers. + static assert(!isPointer!bool); + static assert(!isPointer!int); + static assert(!isPointer!dchar); + static assert(!isPointer!(int[])); + static assert(!isPointer!(double[4])); + static assert(!isPointer!string); + + static struct S + { + int* ptr; + } + static assert(!isPointer!S); + + // The struct itself isn't considered a numeric type, + // but its member variable is when checked directly. + static assert( isPointer!(typeof(S.ptr))); + + enum E : immutable(char*) + { + a = "foobar".ptr + } + + // Enums do not count. + static assert(!isPointer!E); + + static struct AliasThis + { + int* ptr; + alias this = ptr; + } + + // Other implicit conversions do not count. + static assert(!isPointer!AliasThis); +} + +@safe unittest +{ + import phobos.sys.meta : Alias, AliasSeq; + + static struct AliasThis(T) + { + T member; + alias this = member; + } + + static struct S + { + int i; + } + + foreach (Q; AliasSeq!(Alias, ConstOf, ImmutableOf, SharedOf)) + { + foreach (T; AliasSeq!(long*, S*, S**, S***, double[]*)) + { + enum E : Q!T { a = Q!T.init } + + static assert( isPointer!(Q!T)); + static assert(!isPointer!E); + static assert(!isPointer!(AliasThis!(Q!T))); + } + + foreach (T; AliasSeq!(bool, char, wchar, dchar, byte, int, uint, long, + int[], float[8], real[], void[])) + { + enum E : Q!T { a = Q!T.init } + + static assert(!isPointer!(Q!T)); + static assert(!isPointer!E); + static assert(!isPointer!(AliasThis!(Q!T))); + } + } +} + +/++ + Evaluates to $(D true) if the given type or symbol is an instantiation of + the given template. + + The overload which takes $(D T) operates on types and indicates whether an + aggregate type (i.e. struct, class, interface, or union) is an + instantiation of the given template. + + The overload which takes $(D Symbol) operates on function templates, + because unlike with aggregate types, the type of a function does not retain + the fact that it was instantiated from a template. So, for functions, it's + necessary to pass the function itself as a symbol rather than pass the type + of the function. + + The overload which takes $(D Symbol) also works with templates which are + not types or functions. + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + +/ +template isInstantiationOf(alias Template, T) +if (__traits(isTemplate, Template)) +{ + enum isInstantiationOf = is(T == Template!Args, Args...); +} + +/++ Ditto +/ +template isInstantiationOf(alias Template, alias Symbol) +if (__traits(isTemplate, Template)) +{ + enum impl(alias T : Template!Args, Args...) = true; + enum impl(alias T) = false; + enum isInstantiationOf = impl!Symbol; +} + +/++ Ditto +/ +template isInstantiationOf(alias Template) +if (__traits(isTemplate, Template)) +{ + enum isInstantiationOf(T) = is(T == Template!Args, Args...); + + template isInstantiationOf(alias Symbol) + { + enum impl(alias T : Template!Args, Args...) = true; + enum impl(alias T) = false; + enum isInstantiationOf = impl!Symbol; + } +} + +/// Examples of templated types. +@safe unittest +{ + static struct S(T) {} + static class C(T) {} + + static assert( isInstantiationOf!(S, S!int)); + static assert( isInstantiationOf!(S, S!int)); + static assert( isInstantiationOf!(S, S!string)); + static assert( isInstantiationOf!(S, const S!string)); + static assert( isInstantiationOf!(S, shared S!string)); + static assert(!isInstantiationOf!(S, int)); + static assert(!isInstantiationOf!(S, C!int)); + static assert(!isInstantiationOf!(S, C!string)); + static assert(!isInstantiationOf!(S, C!(S!int))); + + static assert( isInstantiationOf!(C, C!int)); + static assert( isInstantiationOf!(C, C!string)); + static assert( isInstantiationOf!(C, const C!string)); + static assert( isInstantiationOf!(C, shared C!string)); + static assert(!isInstantiationOf!(C, int)); + static assert(!isInstantiationOf!(C, S!int)); + static assert(!isInstantiationOf!(C, S!string)); + static assert(!isInstantiationOf!(C, S!(C!int))); + + static struct Variadic(T...) {} + + static assert( isInstantiationOf!(Variadic, Variadic!())); + static assert( isInstantiationOf!(Variadic, Variadic!int)); + static assert( isInstantiationOf!(Variadic, Variadic!(int, string))); + static assert( isInstantiationOf!(Variadic, Variadic!(int, string, int))); + static assert( isInstantiationOf!(Variadic, const Variadic!(int, short))); + static assert( isInstantiationOf!(Variadic, shared Variadic!(int, short))); + static assert(!isInstantiationOf!(Variadic, int)); + static assert(!isInstantiationOf!(Variadic, S!int)); + static assert(!isInstantiationOf!(Variadic, C!int)); + + static struct ValueArg(int i) {} + static assert( isInstantiationOf!(ValueArg, ValueArg!42)); + static assert( isInstantiationOf!(ValueArg, ValueArg!256)); + static assert( isInstantiationOf!(ValueArg, const ValueArg!1024)); + static assert( isInstantiationOf!(ValueArg, shared ValueArg!1024)); + static assert(!isInstantiationOf!(ValueArg, int)); + static assert(!isInstantiationOf!(ValueArg, S!int)); + + int i; + + static struct AliasArg(alias Symbol) {} + static assert( isInstantiationOf!(AliasArg, AliasArg!42)); + static assert( isInstantiationOf!(AliasArg, AliasArg!int)); + static assert( isInstantiationOf!(AliasArg, AliasArg!i)); + static assert( isInstantiationOf!(AliasArg, const AliasArg!i)); + static assert( isInstantiationOf!(AliasArg, shared AliasArg!i)); + static assert(!isInstantiationOf!(AliasArg, int)); + static assert(!isInstantiationOf!(AliasArg, S!int)); + + // An uninstantiated template is not an instance of any template, + // not even itself. + static assert(!isInstantiationOf!(S, S)); + static assert(!isInstantiationOf!(S, C)); + static assert(!isInstantiationOf!(C, C)); + static assert(!isInstantiationOf!(C, S)); + + // Variables of a templated type are not considered instantiations of that + // type. For templated types, the overload which takes a type must be used. + S!int s; + C!string c; + static assert(!isInstantiationOf!(S, s)); + static assert(!isInstantiationOf!(C, c)); +} + +// Examples of templated functions. +@safe unittest +{ + static int foo(T...)() { return 42; } + static void bar(T...)(T var) {} + static void baz(T)(T var) {} + static bool frobozz(alias pred)(int) { return true; } + + static assert( isInstantiationOf!(foo, foo!int)); + static assert( isInstantiationOf!(foo, foo!string)); + static assert( isInstantiationOf!(foo, foo!(int, string))); + static assert(!isInstantiationOf!(foo, bar!int)); + static assert(!isInstantiationOf!(foo, bar!string)); + static assert(!isInstantiationOf!(foo, bar!(int, string))); + + static assert( isInstantiationOf!(bar, bar!int)); + static assert( isInstantiationOf!(bar, bar!string)); + static assert( isInstantiationOf!(bar, bar!(int, string))); + static assert(!isInstantiationOf!(bar, foo!int)); + static assert(!isInstantiationOf!(bar, foo!string)); + static assert(!isInstantiationOf!(bar, foo!(int, string))); + + static assert( isInstantiationOf!(baz, baz!int)); + static assert( isInstantiationOf!(baz, baz!string)); + static assert(!isInstantiationOf!(baz, foo!(int, string))); + + static assert( isInstantiationOf!(frobozz, frobozz!(a => a))); + static assert( isInstantiationOf!(frobozz, frobozz!(a => a > 2))); + static assert(!isInstantiationOf!(frobozz, baz!int)); + + // Unfortunately, the function type is not considered an instantiation of + // the template, because that information is not part of the type, unlike + // with templated structs or classes. + static assert(!isInstantiationOf!(foo, typeof(foo!int))); + static assert(!isInstantiationOf!(bar, typeof(bar!int))); +} + +// Examples of templates which aren't types or functions. +@safe unittest +{ + template SingleArg(T) {} + template Variadic(T...) {} + template ValueArg(string s) {} + template Alias(alias symbol) {} + + static assert( isInstantiationOf!(SingleArg, SingleArg!int)); + static assert( isInstantiationOf!(SingleArg, SingleArg!string)); + static assert(!isInstantiationOf!(SingleArg, int)); + static assert(!isInstantiationOf!(SingleArg, Variadic!int)); + + static assert( isInstantiationOf!(Variadic, Variadic!())); + static assert( isInstantiationOf!(Variadic, Variadic!int)); + static assert( isInstantiationOf!(Variadic, Variadic!string)); + static assert( isInstantiationOf!(Variadic, Variadic!(short, int, long))); + static assert(!isInstantiationOf!(Variadic, int)); + static assert(!isInstantiationOf!(Variadic, SingleArg!int)); + + static assert( isInstantiationOf!(ValueArg, ValueArg!"dlang")); + static assert( isInstantiationOf!(ValueArg, ValueArg!"foobar")); + static assert(!isInstantiationOf!(ValueArg, string)); + static assert(!isInstantiationOf!(ValueArg, Variadic!string)); + + int i; + + static assert( isInstantiationOf!(Alias, Alias!int)); + static assert( isInstantiationOf!(Alias, Alias!42)); + static assert( isInstantiationOf!(Alias, Alias!i)); + static assert(!isInstantiationOf!(Alias, int)); + static assert(!isInstantiationOf!(Alias, SingleArg!int)); +} + +/// Examples of partial instantation. +@safe unittest +{ + static struct SingleArg(T) {} + static struct Variadic(T...) {} + + alias isSingleArg = isInstantiationOf!SingleArg; + alias isVariadic = isInstantiationOf!Variadic; + + static assert( isSingleArg!(SingleArg!int)); + static assert( isSingleArg!(const SingleArg!int)); + static assert(!isSingleArg!int); + static assert(!isSingleArg!(Variadic!int)); + + static assert( isVariadic!(Variadic!())); + static assert( isVariadic!(Variadic!int)); + static assert( isVariadic!(shared Variadic!int)); + static assert( isVariadic!(Variadic!(int, string))); + static assert(!isVariadic!int); + static assert(!isVariadic!(SingleArg!int)); + + T foo(T)(T t) { return t; } + T likeFoo(T)(T t) { return t; } + bool bar(alias pred)(int i) { return pred(i); } + + alias isFoo = isInstantiationOf!foo; + alias isBar = isInstantiationOf!bar; + + static assert( isFoo!(foo!int)); + static assert( isFoo!(foo!string)); + static assert(!isFoo!int); + static assert(!isFoo!(likeFoo!int)); + static assert(!isFoo!(bar!(a => true))); + + static assert( isBar!(bar!(a => true))); + static assert( isBar!(bar!(a => a > 2))); + static assert(!isBar!int); + static assert(!isBar!(foo!int)); + static assert(!isBar!(likeFoo!int)); +} + +/++ + Evaluates to an $(D AliasSeq) containing the members of an enum type. + + The elements of the $(D AliasSeq) are in the same order as they are in the + enum declaration. + + An enum can have multiple members with the same value, so if code needs the + enum values to be unique (e.g. if it's generating a switch statement from + them), then $(REF Unique, phobos, sys, meta) can be used to filter out the + duplicate values - e.g. $(D Unique!(isEqual, EnumMembers!E)). + +/ +template EnumMembers(E) +if (is(E == enum)) +{ + import phobos.sys.meta : AliasSeq; + + alias EnumMembers = AliasSeq!(); + static foreach (member; __traits(allMembers, E)) + EnumMembers = AliasSeq!(EnumMembers, __traits(getMember, E, member)); +} + +/// Create an array of enum values. +@safe unittest +{ + enum Sqrts : real + { + one = 1, + two = 1.41421, + three = 1.73205 + } + auto sqrts = [EnumMembers!Sqrts]; + assert(sqrts == [Sqrts.one, Sqrts.two, Sqrts.three]); +} + +/++ + A generic function $(D rank(v)) in the following example uses this template + for finding a member $(D e) in an enum type $(D E). + +/ +@safe unittest +{ + // Returns i if e is the i-th member of E. + static size_t rank(E)(E e) + if (is(E == enum)) + { + static foreach (i, member; EnumMembers!E) + { + if (e == member) + return i; + } + assert(0, "Not an enum member"); + } + + enum Mode + { + read = 1, + write = 2, + map = 4 + } + assert(rank(Mode.read) == 0); + assert(rank(Mode.write) == 1); + assert(rank(Mode.map) == 2); +} + +/// Use EnumMembers to generate a switch statement using static foreach. +@safe unittest +{ + static class Foo + { + string calledMethod; + void foo() @safe { calledMethod = "foo"; } + void bar() @safe { calledMethod = "bar"; } + void baz() @safe { calledMethod = "baz"; } + } + + enum FuncName : string { foo = "foo", bar = "bar", baz = "baz" } + + auto foo = new Foo; + + s: final switch (FuncName.bar) + { + static foreach (member; EnumMembers!FuncName) + { + // Generate a case for each enum value. + case member: + { + // Call foo.{enum value}(). + __traits(getMember, foo, member)(); + break s; + } + } + } + + // Since we passed FuncName.bar to the switch statement, the bar member + // function was called. + assert(foo.calledMethod == "bar"); +} + +@safe unittest +{ + { + enum A { a } + static assert([EnumMembers!A] == [A.a]); + enum B { a, b, c, d, e } + static assert([EnumMembers!B] == [B.a, B.b, B.c, B.d, B.e]); + } + { + enum A : string { a = "alpha", b = "beta" } + static assert([EnumMembers!A] == [A.a, A.b]); + + static struct S + { + int value; + int opCmp(S rhs) const nothrow { return value - rhs.value; } + } + enum B : S { a = S(1), b = S(2), c = S(3) } + static assert([EnumMembers!B] == [B.a, B.b, B.c]); + } + { + enum A { a = 0, b = 0, c = 1, d = 1, e } + static assert([EnumMembers!A] == [A.a, A.b, A.c, A.d, A.e]); + } + { + enum E { member, a = 0, b = 0 } + + static assert(__traits(isSame, EnumMembers!E[0], E.member)); + static assert(__traits(isSame, EnumMembers!E[1], E.a)); + static assert(__traits(isSame, EnumMembers!E[2], E.b)); + + static assert(__traits(identifier, EnumMembers!E[0]) == "member"); + static assert(__traits(identifier, EnumMembers!E[1]) == "a"); + static assert(__traits(identifier, EnumMembers!E[2]) == "b"); + } +} + +// https://issues.dlang.org/show_bug.cgi?id=14561: huge enums +@safe unittest +{ + static string genEnum() + { + string result = "enum TLAs {"; + foreach (c0; '0' .. '2' + 1) + { + foreach (c1; '0' .. '9' + 1) + { + foreach (c2; '0' .. '9' + 1) + { + foreach (c3; '0' .. '9' + 1) + { + result ~= '_'; + result ~= c0; + result ~= c1; + result ~= c2; + result ~= c3; + result ~= ','; + } + } + } + } + result ~= '}'; + return result; + } + mixin(genEnum); + static assert(EnumMembers!TLAs[0] == TLAs._0000); + static assert(EnumMembers!TLAs[$ - 1] == TLAs._2999); +} + +/++ + Whether the type $(D From) is implicitly convertible to the type $(D To). + + Note that template constraints should be very careful about when they test + for implicit conversions and in general should prefer to either test for an + exact set of types or for types which compile with a particular piece of + code rather than being designed to accept any type which implicitly converts + to a particular type. + + This is because having a type pass a template constraint based on an + implicit conversion but then not have the implicit conversion actually take + place (which it won't unless the template does something to force it + internally) can lead to either compilation errors or subtle behavioral + differences - and even when the conversion is done explicitly within a + templated function, since it's not done at the call site, it can still lead + to subtle bugs in some cases (e.g. if slicing a static array is involved). + + For situations where code needs to verify that a type is implicitly + convertible based solely on its qualifiers, $(LREF isQualifierConvertible) + would be a more appropriate choice than isImplicitlyConvertible. + + Given how trivial the $(D is) expression for isImplicitlyConvertible is - + $(D is(To : From)) - this trait is provided primarily so that it can be + used in conjunction with templates that use a template predicate (such as + many of the templates in phobos.sys.meta). + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + + See_Also: + $(DDSUBLINK dlang.org/spec/type, implicit-conversions, Spec on implicit conversions) + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, Spec for implicit qualifier conversions) + $(LREF isQualifierConvertible) + +/ +enum isImplicitlyConvertible(From, To) = is(From : To); + +/++ Ditto +/ +template isImplicitlyConvertible(From) +{ + enum isImplicitlyConvertible(To) = is(From : To); +} + +/// +@safe unittest +{ + static assert( isImplicitlyConvertible!(byte, long)); + static assert( isImplicitlyConvertible!(ushort, long)); + static assert( isImplicitlyConvertible!(int, long)); + static assert( isImplicitlyConvertible!(long, long)); + static assert( isImplicitlyConvertible!(ulong, long)); + + static assert( isImplicitlyConvertible!(ubyte, int)); + static assert( isImplicitlyConvertible!(short, int)); + static assert( isImplicitlyConvertible!(int, int)); + static assert( isImplicitlyConvertible!(uint, int)); + static assert(!isImplicitlyConvertible!(long, int)); + static assert(!isImplicitlyConvertible!(ulong, int)); + + static assert(!isImplicitlyConvertible!(int, string)); + static assert(!isImplicitlyConvertible!(int, int[])); + static assert(!isImplicitlyConvertible!(int, int*)); + + static assert(!isImplicitlyConvertible!(string, int)); + static assert(!isImplicitlyConvertible!(int[], int)); + static assert(!isImplicitlyConvertible!(int*, int)); + + // For better or worse, bool and the built-in character types will + // implicitly convert to integer or floating-point types if the target type + // is large enough. Sometimes, this is desirable, whereas at other times, + // it can have very surprising results, so it's one reason why code should + // be very careful when testing for implicit conversions. + static assert( isImplicitlyConvertible!(bool, int)); + static assert( isImplicitlyConvertible!(char, int)); + static assert( isImplicitlyConvertible!(wchar, int)); + static assert( isImplicitlyConvertible!(dchar, int)); + + static assert( isImplicitlyConvertible!(bool, ubyte)); + static assert( isImplicitlyConvertible!(char, ubyte)); + static assert(!isImplicitlyConvertible!(wchar, ubyte)); + static assert(!isImplicitlyConvertible!(dchar, ubyte)); + + static assert( isImplicitlyConvertible!(bool, double)); + static assert( isImplicitlyConvertible!(char, double)); + static assert( isImplicitlyConvertible!(wchar, double)); + static assert( isImplicitlyConvertible!(dchar, double)); + + // Value types can be implicitly converted regardless of their qualifiers + // thanks to the fact that they're copied. + static assert( isImplicitlyConvertible!(int, int)); + static assert( isImplicitlyConvertible!(const int, int)); + static assert( isImplicitlyConvertible!(immutable int, int)); + static assert( isImplicitlyConvertible!(inout int, int)); + + static assert( isImplicitlyConvertible!(int, const int)); + static assert( isImplicitlyConvertible!(int, immutable int)); + static assert( isImplicitlyConvertible!(int, inout int)); + + // Reference types are far more restrictive about which implicit conversions + // they allow, because qualifiers in D are transitive. + static assert( isImplicitlyConvertible!(int*, int*)); + static assert(!isImplicitlyConvertible!(const int*, int*)); + static assert(!isImplicitlyConvertible!(immutable int*, int*)); + + static assert( isImplicitlyConvertible!(int*, const int*)); + static assert( isImplicitlyConvertible!(const int*, const int*)); + static assert( isImplicitlyConvertible!(immutable int*, const int*)); + + static assert(!isImplicitlyConvertible!(int*, immutable int*)); + static assert(!isImplicitlyConvertible!(const int*, immutable int*)); + static assert( isImplicitlyConvertible!(immutable int*, immutable int*)); + + // Note that inout gets a bit weird, since it's only used with function + // parameters, and it's a stand-in for whatever mutability qualifiers the + // type actually has. So, a function parameter that's inout accepts any + // mutability, but you can't actually implicitly convert to inout, because + // it's unknown within the function what the actual mutability of the type + // is. It will differ depending on the function arguments of a specific + // call to that function, so the same code has to work with all combinations + // of mutability qualifiers. + static assert(!isImplicitlyConvertible!(int*, inout int*)); + static assert(!isImplicitlyConvertible!(const int*, inout int*)); + static assert(!isImplicitlyConvertible!(immutable int*, inout int*)); + static assert( isImplicitlyConvertible!(inout int*, inout int*)); + + static assert(!isImplicitlyConvertible!(inout int*, int*)); + static assert( isImplicitlyConvertible!(inout int*, const int*)); + static assert(!isImplicitlyConvertible!(inout int*, immutable int*)); + + // Enums implicitly convert to their base type. + enum E : int + { + a = 42 + } + static assert( isImplicitlyConvertible!(E, int)); + static assert( isImplicitlyConvertible!(E, long)); + static assert(!isImplicitlyConvertible!(E, int[])); + + // Structs only implicit convert to another type via declaring an + // alias this. + static struct S + { + int i; + } + static assert(!isImplicitlyConvertible!(S, int)); + static assert(!isImplicitlyConvertible!(S, long)); + static assert(!isImplicitlyConvertible!(S, string)); + + static struct AliasThis + { + int i; + alias this = i; + } + static assert( isImplicitlyConvertible!(AliasThis, int)); + static assert( isImplicitlyConvertible!(AliasThis, long)); + static assert(!isImplicitlyConvertible!(AliasThis, string)); + + static struct AliasThis2 + { + AliasThis at; + alias this = at; + } + static assert( isImplicitlyConvertible!(AliasThis2, AliasThis)); + static assert( isImplicitlyConvertible!(AliasThis2, int)); + static assert( isImplicitlyConvertible!(AliasThis2, long)); + static assert(!isImplicitlyConvertible!(AliasThis2, string)); + + static struct AliasThis3 + { + AliasThis2 at; + alias this = at; + } + static assert( isImplicitlyConvertible!(AliasThis3, AliasThis2)); + static assert( isImplicitlyConvertible!(AliasThis3, AliasThis)); + static assert( isImplicitlyConvertible!(AliasThis3, int)); + static assert( isImplicitlyConvertible!(AliasThis3, long)); + static assert(!isImplicitlyConvertible!(AliasThis3, string)); + + // D does not support implicit conversions via construction. + static struct Cons + { + this(int i) + { + this.i = i; + } + + int i; + } + static assert(!isImplicitlyConvertible!(int, Cons)); + + // Classes support implicit conversion based on their class and + // interface hierarchies. + static interface I1 {} + static class Base : I1 {} + + static interface I2 {} + static class Foo : Base, I2 {} + + static class Bar : Base {} + + static assert( isImplicitlyConvertible!(Base, Base)); + static assert(!isImplicitlyConvertible!(Base, Foo)); + static assert(!isImplicitlyConvertible!(Base, Bar)); + static assert( isImplicitlyConvertible!(Base, I1)); + static assert(!isImplicitlyConvertible!(Base, I2)); + + static assert( isImplicitlyConvertible!(Foo, Base)); + static assert( isImplicitlyConvertible!(Foo, Foo)); + static assert(!isImplicitlyConvertible!(Foo, Bar)); + static assert( isImplicitlyConvertible!(Foo, I1)); + static assert( isImplicitlyConvertible!(Foo, I2)); + + static assert( isImplicitlyConvertible!(Bar, Base)); + static assert(!isImplicitlyConvertible!(Bar, Foo)); + static assert( isImplicitlyConvertible!(Bar, Bar)); + static assert( isImplicitlyConvertible!(Bar, I1)); + static assert(!isImplicitlyConvertible!(Bar, I2)); + + static assert(!isImplicitlyConvertible!(I1, Base)); + static assert(!isImplicitlyConvertible!(I1, Foo)); + static assert(!isImplicitlyConvertible!(I1, Bar)); + static assert( isImplicitlyConvertible!(I1, I1)); + static assert(!isImplicitlyConvertible!(I1, I2)); + + static assert(!isImplicitlyConvertible!(I2, Base)); + static assert(!isImplicitlyConvertible!(I2, Foo)); + static assert(!isImplicitlyConvertible!(I2, Bar)); + static assert(!isImplicitlyConvertible!(I2, I1)); + static assert( isImplicitlyConvertible!(I2, I2)); + + // Note that arrays are not implicitly convertible even when their elements + // are implicitly convertible. + static assert(!isImplicitlyConvertible!(ubyte[], uint[])); + static assert(!isImplicitlyConvertible!(Foo[], Base[])); + static assert(!isImplicitlyConvertible!(Bar[], Base[])); + + // However, like with pointers, dynamic arrays are convertible based on + // constness. + static assert( isImplicitlyConvertible!(Base[], const Base[])); + static assert( isImplicitlyConvertible!(Base[], const(Base)[])); + static assert(!isImplicitlyConvertible!(Base[], immutable(Base)[])); + static assert(!isImplicitlyConvertible!(const Base[], immutable Base[])); + static assert( isImplicitlyConvertible!(const Base[], const Base[])); + static assert(!isImplicitlyConvertible!(const Base[], immutable Base[])); +} + +/++ + isImplicitlyConvertible can be used with partial instantiation so that it + can be passed to a template which takes a unary predicate. + +/ +@safe unittest +{ + import phobos.sys.meta : AliasSeq, all, indexOf; + + // byte is implicitly convertible to byte, short, int, and long. + static assert(all!(isImplicitlyConvertible!byte, short, int, long)); + + // const(char)[] at index 2 is the first type in the AliasSeq which string + // can be implicitly converted to. + alias Types = AliasSeq!(int, char[], const(char)[], string, int*); + static assert(indexOf!(isImplicitlyConvertible!string, Types) == 2); +} + +/++ + Whether $(D From) is + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) + to $(D To). + + This is testing whether $(D From) and $(D To) are the same type - minus the + qualifiers - and whether the qualifiers on $(D From) can be implicitly + converted to the qualifiers on $(D To). No other implicit conversions are + taken into account. + + For instance, $(D const int*) is not implicitly convertible to $(D int*), + because that would violate $(D const). That means that $(D const) is not + qualifier convertible to mutable. And as such, $(I any) $(D const) type + is not qualifier convertible to a mutable type even if it's implicitly + convertible. E.G. $(D const int) is implicitly convertible to $(D int), + because it can be copied to avoid violating $(D const), but it's still not + qualifier convertible, because $(D const) types in general cannot be + implicitly converted to mutable. + + The exact types being tested matter, because they need to be the same + (minus the qualifiers) in order to be considered convertible, but beyond + that, all that matters for the conversion is whether those qualifers would + be convertible regardless of which types they were on. So, if you're having + trouble picturing whether $(D From) would be qualifier convertible to + $(D To), then consider which conversions would be allowed from $(D From[]) + to $(D To[]) (and remember that dynamic arrays are only implicitly + convertible based on their qualifers). + + The $(DDSUBLINK spec/const3, implicit_qualifier_conversions, spec) provides + a table of which qualifiers can be implcitly converted to which other + qualifers (and of course, there a bunch of examples below). + + So, isQualifierConvertible can be used in a case like + $(D isQualifierConvertible!(ReturnType!(typeof(foo(bar))), const char), + which would be testing that the return type of $(D foo(bar)) was $(D char), + $(D const char), or $(D immutable char) (since those are the only types + which are qualifier convertible to $(D const char)). + + This is in contrast to + $(D isImplicitlyConvertible!(ReturnType!(typeof(foo(bar))), const char), + which would be $(D true) for $(I any) type which was implicitly convertible + to $(D const char) rather than just $(D char), $(D const char), and + $(D immutable char). + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + + See_Also: + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, Spec for implicit qualifier conversions) + $(LREF isImplicitlyConvertible) + +/ +enum isQualifierConvertible(From, To) = is(immutable From == immutable To) && is(From* : To*); + +/++ Ditto +/ +template isQualifierConvertible(From) +{ + enum isQualifierConvertible(To) = is(immutable From == immutable To) && is(From* : To*); +} + +/// +@safe unittest +{ + // i.e. char* -> const char* + static assert( isQualifierConvertible!(char, const char)); + + // i.e. const char* -> char* + static assert(!isQualifierConvertible!(const char, char)); + + static assert( isQualifierConvertible!(int, int)); + static assert( isQualifierConvertible!(int, const int)); + static assert(!isQualifierConvertible!(int, immutable int)); + + static assert(!isQualifierConvertible!(const int, int)); + static assert( isQualifierConvertible!(const int, const int)); + static assert(!isQualifierConvertible!(const int, immutable int)); + + static assert(!isQualifierConvertible!(immutable int, int)); + static assert( isQualifierConvertible!(immutable int, const int)); + static assert( isQualifierConvertible!(immutable int, immutable int)); + + // Note that inout gets a bit weird, since it's only used with function + // parameters, and it's a stand-in for whatever mutability qualifiers the + // type actually has. So, a function parameter that's inout accepts any + // mutability, but you can't actually implicitly convert to inout, because + // it's unknown within the function what the actual mutability of the type + // is. It will differ depending on the function arguments of a specific + // call to that function, so the same code has to work with all combinations + // of mutability qualifiers. + static assert(!isQualifierConvertible!(int, inout int)); + static assert(!isQualifierConvertible!(const int, inout int)); + static assert(!isQualifierConvertible!(immutable int, inout int)); + static assert( isQualifierConvertible!(inout int, inout int)); + + static assert(!isQualifierConvertible!(inout int, int)); + static assert( isQualifierConvertible!(inout int, const int)); + static assert(!isQualifierConvertible!(inout int, immutable int)); + + // shared is of course also a qualifier. + static assert(!isQualifierConvertible!(int, shared int)); + static assert(!isQualifierConvertible!(int, const shared int)); + static assert(!isQualifierConvertible!(const int, shared int)); + static assert(!isQualifierConvertible!(const int, const shared int)); + static assert(!isQualifierConvertible!(immutable int, shared int)); + static assert( isQualifierConvertible!(immutable int, const shared int)); + + static assert(!isQualifierConvertible!(shared int, int)); + static assert(!isQualifierConvertible!(shared int, const int)); + static assert(!isQualifierConvertible!(shared int, immutable int)); + static assert( isQualifierConvertible!(shared int, shared int)); + static assert( isQualifierConvertible!(shared int, const shared int)); + + static assert(!isQualifierConvertible!(const shared int, int)); + static assert(!isQualifierConvertible!(const shared int, const int)); + static assert(!isQualifierConvertible!(const shared int, immutable int)); + static assert(!isQualifierConvertible!(const shared int, shared int)); + static assert( isQualifierConvertible!(const shared int, const shared int)); + + // Implicit conversions don't count unless they're based purely on + // qualifiers. + enum E : int + { + a = 1 + } + + static assert(!isQualifierConvertible!(E, int)); + static assert(!isQualifierConvertible!(E, const int)); + static assert( isQualifierConvertible!(E, E)); + static assert( isQualifierConvertible!(E, const E)); + static assert(!isQualifierConvertible!(E, immutable E)); + + static struct AliasThis + { + int i; + alias this = i; + } + + static assert(!isQualifierConvertible!(AliasThis, int)); + static assert(!isQualifierConvertible!(AliasThis, const int)); + static assert( isQualifierConvertible!(AliasThis, AliasThis)); + static assert( isQualifierConvertible!(AliasThis, const AliasThis)); + static assert(!isQualifierConvertible!(AliasThis, immutable AliasThis)); + + // The qualifiers are irrelevant if the types aren't the same when + // stripped of all qualifers. + static assert(!isQualifierConvertible!(int, long)); + static assert(!isQualifierConvertible!(int, const long)); + static assert(!isQualifierConvertible!(string, const(ubyte)[])); +} + +/++ + isQualifierConvertible can be used with partial instantiation so that it + can be passed to a template which takes a unary predicate. + +/ +@safe unittest +{ + import phobos.sys.meta : AliasSeq, all, indexOf; + + // byte is qualifier convertible to byte and const byte. + static assert(all!(isQualifierConvertible!byte, byte, const byte)); + + // const(char[]) at index 2 is the first type in the AliasSeq which string + // is qualifier convertible to. + alias Types = AliasSeq!(int, char[], const(char[]), string, int*); + static assert(indexOf!(isQualifierConvertible!string, Types) == 2); +} + +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + alias Types = AliasSeq!(int, const int, shared int, inout int, const shared int, + const inout int, inout shared int, const inout shared int, immutable int); + + // https://dlang.org/spec/const3.html#implicit_qualifier_conversions + enum _ = 0; + static immutable bool[Types.length][Types.length] conversions = [ + // m c s i cs ci is cis im + [1, 1, _, _, _, _, _, _, _], // mutable + [_, 1, _, _, _, _, _, _, _], // const + [_, _, 1, _, 1, _, _, _, _], // shared + [_, 1, _, 1, _, 1, _, _, _], // inout + [_, _, _, _, 1, _, _, _, _], // const shared + [_, 1, _, _, _, 1, _, _, _], // const inout + [_, _, _, _, 1, _, 1, 1, _], // inout shared + [_, _, _, _, 1, _, _, 1, _], // const inout shared + [_, 1, _, _, 1, 1, _, 1, 1], // immutable + ]; + + foreach (i, From; Types) + { + foreach (j, To; Types) + { + static assert(isQualifierConvertible!(From, To) == conversions[i][j], + "`isQualifierConvertible!(" ~ From.stringof ~ ", " ~ To.stringof ~ ")`" ~ + " should be `" ~ (conversions[i][j] ? "true`" : "false`")); + } + } +} + +/++ + Whether the given values are equal per $(D ==). + + All this does is $(D lhs == rhs) but in an eponymous template, so most code + shouldn't use it. It's intended to be used in conjunction with templates + that take a template predicate - such as those in phobos.sys.meta. + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + + Note that in most cases, even when comparing values at compile time, using + isEqual makes no sense, because you can use CTFE to just compare two values + (or expressions which evaluate to values), but in rare cases where you need + to compare symbols in an $(D AliasSeq) by value with a template predicate + while still leaving them as symbols in an $(D AliasSeq), then isEqual would + be needed. + + A prime example of this would be $(D Unique!(isEqual, EnumMembers!MyEnum)), + which results in an $(D AliasSeq) containing the list of members of + $(D MyEnum) but without any duplicate values (e.g. to use when doing code + generation to create a final switch). + + Alternatively, code such as $(D [EnumMembers!MyEnum].sort().unique()) could + be used to get a dynamic array of the enum members with no duplicate values + via CTFE, thus avoiding the need for template predicates or anything from + phobos.sys.meta. However, you then have a dynamic array of enum values + rather than an $(D AliasSeq) of symbols for those enum members, which + affects what you can do with type introspection. So, which approach is + better depends on what the code needs to do with the enum members. + + In general, however, if code doesn't need an $(D AliasSeq), and an array of + values will do the trick, then it's more efficient to operate on an array of + values with CTFE and avoid using isEqual or other templates to operate on + the values as an $(D AliasSeq). + + See_Also: + $(LREF isSameSymbol) + $(LREF isSameType) + +/ +enum isEqual(alias lhs, alias rhs) = lhs == rhs; + +/++ Ditto +/ +template isEqual(alias lhs) +{ + enum isEqual(alias rhs) = lhs == rhs; +} + +/// It acts just like ==, but it's a template. +@safe unittest +{ + enum a = 42; + + static assert( isEqual!(a, 42)); + static assert( isEqual!(20, 10 + 10)); + + static assert(!isEqual!(a, 120)); + static assert(!isEqual!(77, 19 * 7 + 2)); + + // b cannot be read at compile time, so it won't work with isEqual. + int b = 99; + static assert(!__traits(compiles, isEqual!(b, 99))); +} + +/++ + Comparing some of the differences between an $(D AliasSeq) of enum members + and an array of enum values created from an $(D AliasSeq) of enum members. + +/ +@safe unittest +{ + import phobos.sys.meta : AliasSeq, Unique; + + enum E + { + a = 0, + b = 22, + c = 33, + d = 0, + e = 256, + f = 33, + g = 7 + } + + alias uniqueMembers = Unique!(isEqual, EnumMembers!E); + static assert(uniqueMembers.length == 5); + + static assert(__traits(isSame, uniqueMembers[0], E.a)); + static assert(__traits(isSame, uniqueMembers[1], E.b)); + static assert(__traits(isSame, uniqueMembers[2], E.c)); + static assert(__traits(isSame, uniqueMembers[3], E.e)); + static assert(__traits(isSame, uniqueMembers[4], E.g)); + + static assert(__traits(identifier, uniqueMembers[0]) == "a"); + static assert(__traits(identifier, uniqueMembers[1]) == "b"); + static assert(__traits(identifier, uniqueMembers[2]) == "c"); + static assert(__traits(identifier, uniqueMembers[3]) == "e"); + static assert(__traits(identifier, uniqueMembers[4]) == "g"); + + // Same value but different symbol. + static assert(uniqueMembers[0] == E.d); + static assert(!__traits(isSame, uniqueMembers[0], E.d)); + + // is expressions compare types, not symbols or values, and these AliasSeqs + // contain the list of symbols for the enum members, not types, so the is + // expression evaluates to false even though the symbols are the same. + static assert(!is(uniqueMembers == AliasSeq!(E.a, E.b, E.c, E.e, E.g))); + + // Once the members are converted to an array, the types are the same, and + // the values are the same, but the symbols are not the same. Instead of + // being the symbols E.a, E.b, etc., they're just values with the type E + // which match the values of E.a, E.b, etc. + enum arr = [uniqueMembers]; + static assert(is(typeof(arr) == E[])); + + static assert(arr == [E.a, E.b, E.c, E.e, E.g]); + static assert(arr == [E.d, E.b, E.f, E.e, E.g]); + + static assert(!__traits(isSame, arr[0], E.a)); + static assert(!__traits(isSame, arr[1], E.b)); + static assert(!__traits(isSame, arr[2], E.c)); + static assert(!__traits(isSame, arr[3], E.e)); + static assert(!__traits(isSame, arr[4], E.g)); + + // Since arr[0] is just a value of type E, it's no longer the symbol, E.a, + // even though its type is E, and its value is the same as that of E.a. And + // unlike the actual members of an enum, an element of an array does not + // have an identifier, so __traits(identifier, ...) doesn't work with it. + static assert(!__traits(compiles, __traits(identifier, arr[0]))); + + // Similarly, once an enum member from the AliasSeq is assigned to a + // variable, __traits(identifer, ...) operates on the variable, not the + // symbol from the AliasSeq or the value of the variable. + auto var = uniqueMembers[0]; + static assert(__traits(identifier, var) == "var"); + + // The same with a manifest constant. + enum constant = uniqueMembers[0]; + static assert(__traits(identifier, constant) == "constant"); +} + +/++ + Whether the given symbols are the same symbol. + + All this does is $(D __traits(isSame, lhs, rhs)), so most code shouldn't + use it. It's intended to be used in conjunction with templates that take a + template predicate - such as those in phobos.sys.meta. + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + + See_Also: + $(DDSUBLINK spec/traits, isSame, $(D __traits(isSame, lhs, rhs))) + $(LREF isEqual) + $(LREF isSameType) + +/ +enum isSameSymbol(alias lhs, alias rhs) = __traits(isSame, lhs, rhs); + +/++ Ditto +/ +template isSameSymbol(alias lhs) +{ + enum isSameSymbol(alias rhs) = __traits(isSame, lhs, rhs); +} + +/// +@safe unittest +{ + int i; + int j; + real r; + + static assert( isSameSymbol!(i, i)); + static assert(!isSameSymbol!(i, j)); + static assert(!isSameSymbol!(i, r)); + + static assert(!isSameSymbol!(j, i)); + static assert( isSameSymbol!(j, j)); + static assert(!isSameSymbol!(j, r)); + + static assert(!isSameSymbol!(r, i)); + static assert(!isSameSymbol!(r, j)); + static assert( isSameSymbol!(r, r)); + + auto foo() { return 0; } + auto bar() { return 0; } + + static assert( isSameSymbol!(foo, foo)); + static assert(!isSameSymbol!(foo, bar)); + static assert(!isSameSymbol!(foo, i)); + + static assert(!isSameSymbol!(bar, foo)); + static assert( isSameSymbol!(bar, bar)); + static assert(!isSameSymbol!(bar, i)); + + // Types are symbols too. However, in most cases, they should be compared + // as types, not symbols (be it with is expressions or with isSameType), + // because the results aren't consistent between scalar types and + // user-defined types with regards to type qualifiers when they're compared + // as symbols. + static assert( isSameSymbol!(double, double)); + static assert(!isSameSymbol!(double, const double)); + static assert(!isSameSymbol!(double, int)); + static assert( isSameSymbol!(Object, Object)); + static assert( isSameSymbol!(Object, const Object)); + + static assert(!isSameSymbol!(i, int)); + static assert( isSameSymbol!(typeof(i), int)); + + // Lambdas can be compared with __traits(isSame, ...), + // so they can be compared with isSameSymbol. + static assert( isSameSymbol!(a => a + 42, a => a + 42)); + static assert(!isSameSymbol!(a => a + 42, a => a + 99)); + + // Partial instantiation allows it to be used with templates that expect + // a predicate that takes only a single argument. + import phobos.sys.meta : AliasSeq, indexOf; + alias Types = AliasSeq!(i, j, r, int, long, foo); + static assert(indexOf!(isSameSymbol!j, Types) == 1); + static assert(indexOf!(isSameSymbol!int, Types) == 3); + static assert(indexOf!(isSameSymbol!bar, Types) == -1); +} + +/++ + Whether the given types are the same type. + + All this does is $(D is(T == U)), so most code shouldn't use it. It's + intended to be used in conjunction with templates that take a template + predicate - such as those in phobos.sys.meta. + + The single-argument overload makes it so that it can be partially + instantiated with the first argument, which will often be necessary with + template predicates. + + See_Also: + $(LREF isEqual) + $(LREF isSameSymbol) + +/ +enum isSameType(T, U) = is(T == U); + +/++ Ditto +/ +template isSameType(T) +{ + enum isSameType(U) = is(T == U); +} + +/// +@safe unittest +{ + static assert( isSameType!(long, long)); + static assert(!isSameType!(long, const long)); + static assert(!isSameType!(long, string)); + static assert( isSameType!(string, string)); + + int i; + real r; + static assert( isSameType!(int, typeof(i))); + static assert(!isSameType!(int, typeof(r))); + + static assert(!isSameType!(real, typeof(i))); + static assert( isSameType!(real, typeof(r))); + + // Partial instantiation allows it to be used with templates that expect + // a predicate that takes only a single argument. + import phobos.sys.meta : AliasSeq, indexOf; + alias Types = AliasSeq!(float, string, int, double); + static assert(indexOf!(isSameType!int, Types) == 2); +} + +/++ + Evaluates to an $(D AliasSeq) of the names (as $(D string)s) of the member + variables of an aggregate type (i.e. a struct, class, interface, or union). + + These are fields which take up memory space within an instance of the type + (i.e. not enums / manifest constants, since they don't take up memory + space, and not static member variables, since they don't take up memory + space within an instance). + + Hidden fields (like the virtual function table pointer or the context + pointer for nested types) are not included. + + For classes, only the direct member variables are included and not those + of any base classes. + + For interfaces, the result of FieldNames is always empty, because + interfaces cannot have member variables. However, because interfaces are + aggregate types, they work with FieldNames for consistency so that code + that's written to work on aggregate types doesn't have to worry about + whether it's dealing with an interface. + + See_Also: + $(LREF FieldSymbols) + $(LREF FieldTypes) + $(DDSUBLINK spec/struct.html, struct_instance_properties, $(D tupleof)) + +/ +template FieldNames(T) +if (isAggregateType!T) +{ + import phobos.sys.meta : AliasSeq; + + static if (is(T == struct) && __traits(isNested, T)) + private alias Fields = AliasSeq!(T.tupleof[0 .. $ - 1]); + else + private alias Fields = T.tupleof; + + alias FieldNames = AliasSeq!(); + static foreach (Field; Fields) + FieldNames = AliasSeq!(FieldNames, Field.stringof); +} + +/// +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + struct S + { + int x; + float y; + } + static assert(FieldNames!S == AliasSeq!("x", "y")); + + // Since the AliasSeq contains values, all of which are of the same type, + // it can be used to create a dynamic array, which would be more + // efficient than operating on an AliasSeq in the cases where an + // AliasSeq is not necessary. + static assert([FieldNames!S] == ["x", "y"]); + + class C + { + // static variables are not included. + static int var; + + // Manifest constants are not included. + enum lang = "dlang"; + + // Functions are not included, even if they're @property functions. + @property int foo() { return 42; } + + string s; + int i; + int[] arr; + } + static assert(FieldNames!C == AliasSeq!("s", "i", "arr")); + + static assert([FieldNames!C] == ["s", "i", "arr"]); + + // Only direct member variables are included. Member variables from any base + // classes are not. + class D : C + { + real r; + } + static assert(FieldNames!D == AliasSeq!"r"); + + static assert([FieldNames!D] == ["r"]); + + // FieldNames will always be empty for an interface, since it's not legal + // for interfaces to have member variables. + interface I + { + } + static assert(FieldNames!I.length == 0); + + union U + { + int i; + double d; + long l; + S s; + } + static assert(FieldNames!U == AliasSeq!("i", "d", "l", "s")); + + static assert([FieldNames!U] == ["i", "d", "l", "s"]);; + + // FieldNames only operates on aggregate types. + static assert(!__traits(compiles, FieldNames!int)); + static assert(!__traits(compiles, FieldNames!(S*))); + static assert(!__traits(compiles, FieldNames!(C[]))); +} + +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + { + static struct S0 {} + static assert(FieldNames!S0.length == 0); + + static struct S1 { int a; } + static assert(FieldNames!S1 == AliasSeq!"a"); + + static struct S2 { int a; string b; } + static assert(FieldNames!S2 == AliasSeq!("a", "b")); + + static struct S3 { int a; string b; real c; } + static assert(FieldNames!S3 == AliasSeq!("a", "b", "c")); + } + { + int i; + struct S0 { void foo() { i = 0; }} + static assert(FieldNames!S0.length == 0); + static assert(__traits(isNested, S0)); + + struct S1 { int a; void foo() { i = 0; } } + static assert(FieldNames!S1 == AliasSeq!"a"); + static assert(__traits(isNested, S1)); + + struct S2 { int a; string b; void foo() { i = 0; } } + static assert(FieldNames!S2 == AliasSeq!("a", "b")); + static assert(__traits(isNested, S2)); + + struct S3 { int a; string b; real c; void foo() { i = 0; } } + static assert(FieldNames!S3 == AliasSeq!("a", "b", "c")); + static assert(__traits(isNested, S3)); + } + { + static class C0 {} + static assert(FieldNames!C0.length == 0); + + static class C1 { int a; } + static assert(FieldNames!C1 == AliasSeq!"a"); + + static class C2 { int a; string b; } + static assert(FieldNames!C2 == AliasSeq!("a", "b")); + + static class C3 { int a; string b; real c; } + static assert(FieldNames!C3 == AliasSeq!("a", "b", "c")); + + static class D0 : C3 {} + static assert(FieldNames!D0.length == 0); + + static class D1 : C3 { bool x; } + static assert(FieldNames!D1 == AliasSeq!"x"); + + static class D2 : C3 { bool x; int* y; } + static assert(FieldNames!D2 == AliasSeq!("x", "y")); + + static class D3 : C3 { bool x; int* y; short[] z; } + static assert(FieldNames!D3 == AliasSeq!("x", "y", "z")); + } + { + int i; + class C0 { void foo() { i = 0; }} + static assert(FieldNames!C0.length == 0); + static assert(__traits(isNested, C0)); + + class C1 { int a; void foo() { i = 0; } } + static assert(FieldNames!C1 == AliasSeq!"a"); + static assert(__traits(isNested, C1)); + + class C2 { int a; string b; void foo() { i = 0; } } + static assert(FieldNames!C2 == AliasSeq!("a", "b")); + static assert(__traits(isNested, C2)); + + class C3 { int a; string b; real c; void foo() { i = 0; } } + static assert(FieldNames!C3 == AliasSeq!("a", "b", "c")); + static assert(__traits(isNested, C3)); + + class D0 : C3 {} + static assert(FieldNames!D0.length == 0); + static assert(__traits(isNested, D0)); + + class D1 : C3 { bool x; } + static assert(FieldNames!D1 == AliasSeq!"x"); + static assert(__traits(isNested, D1)); + + class D2 : C3 { bool x; int* y; } + static assert(FieldNames!D2 == AliasSeq!("x", "y")); + static assert(__traits(isNested, D2)); + + class D3 : C3 { bool x; int* y; short[] z; } + static assert(FieldNames!D3 == AliasSeq!("x", "y", "z")); + static assert(__traits(isNested, D3)); + } + { + static union U0 {} + static assert(FieldNames!U0.length == 0); + + static union U1 { int a; } + static assert(FieldNames!U1 == AliasSeq!"a"); + + static union U2 { int a; string b; } + static assert(FieldNames!U2 == AliasSeq!("a", "b")); + + static union U3 { int a; string b; real c; } + static assert(FieldNames!U3 == AliasSeq!("a", "b", "c")); + } + { + static struct S + { + enum e = 42; + static str = "foobar"; + + string name() { return "foo"; } + + int[] arr; + + struct Inner1 { int i; } + + static struct Inner2 { long gnol; } + + union { int a; string b; } + + alias Foo = Inner1; + } + + static assert(FieldNames!S == AliasSeq!("arr", "a", "b")); + static assert(FieldNames!(const S) == AliasSeq!("arr", "a", "b")); + static assert(FieldNames!(S.Inner1) == AliasSeq!"i"); + static assert(FieldNames!(S.Inner2) == AliasSeq!"gnol"); + } +} + +/++ + Evaluates to an $(D AliasSeq) of the symbols for the member variables of an + aggregate type (i.e. a struct, class, interface, or union). + + These are fields which take up memory space within an instance of the type + (i.e. not enums / manifest constants, since they don't take up memory + space, and not static member variables, since they don't take up memory + space within an instance). + + Hidden fields (like the virtual function table pointer or the context + pointer for nested types) are not included. + + For classes, only the direct member variables are included and not those + of any base classes. + + For interfaces, the result of FieldSymbols is always empty, because + interfaces cannot have member variables. However, because interfaces are + aggregate types, they work with FieldSymbols for consistency so that code + that's written to work on aggregate types doesn't have to worry about + whether it's dealing with an interface. + + In most cases, $(D FieldSymbols!T) has the same result as $(D T.tupleof). + The difference is that for nested structs with a context pointer, + $(D T.tupleof) includes the context pointer, whereas $(D FieldSymbols!T) + does not. For non-nested structs, and for classes, interfaces, and unions, + $(D FieldSymbols!T) and $(D T.tupleof) are the same. + + So, for most cases, $(D T.tupleof) is sufficient and avoids instantiating + an additional template, but FieldSymbols is provided so that the code that + needs to avoid including context pointers in the list of fields can do so + without the programmer having to figure how to do that correctly. It also + provides a template that's equivalent to what $(LREF FieldNames) and + $(LREF FieldTypes) do in terms of which fields it gives (the difference of + course then being whether you get the symbols, names, or types for the + fields), whereas the behavior for $(D tupleof) is subtly different. + + See_Also: + $(LREF FieldNames) + $(LREF FieldTypes) + $(DDSUBLINK spec/struct.html, struct_instance_properties, $(D tupleof)) + $(DDSUBLINK spec/traits, isNested, $(D __traits(isNested, ...))). + $(DDSUBLINK spec/traits, isSame, $(D __traits(isSame, ...))). + +/ +template FieldSymbols(T) +if (isAggregateType!T) +{ + static if (is(T == struct) && __traits(isNested, T)) + { + import phobos.sys.meta : AliasSeq; + alias FieldSymbols = AliasSeq!(T.tupleof[0 .. $ - 1]); + } + else + alias FieldSymbols = T.tupleof; +} + +/// +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + struct S + { + int x; + float y; + } + static assert(__traits(isSame, FieldSymbols!S, AliasSeq!(S.x, S.y))); + + // FieldSymbols!S and S.tupleof are the same, because S is not nested. + static assert(__traits(isSame, FieldSymbols!S, S.tupleof)); + + // Note that type qualifiers _should_ be passed on to the result, but due + // to https://issues.dlang.org/show_bug.cgi?id=24516, they aren't. + // FieldTypes does not have this problem, because it aliases the types + // rather than the symbols, so if you need the types from the symbols, you + // should use either FieldTypes or tupleof until the compiler bug has been + // fixed (and if you use tupleof, you need to avoid aliasing the result + // before getting the types from it). + static assert(is(typeof(FieldSymbols!S[0]) == int)); + + // These currently fail when they shouldn't: + //static assert(is(typeof(FieldSymbols!(const S)[0]) == const int)); + //static assert(is(typeof(FieldSymbols!(shared S)[0]) == shared int)); + + class C + { + // static variables are not included. + static int var; + + // Manifest constants are not included. + enum lang = "dlang"; + + // Functions are not included, even if they're @property functions. + @property int foo() { return 42; } + + string s; + int i; + int[] arr; + } + static assert(__traits(isSame, FieldSymbols!C, AliasSeq!(C.s, C.i, C.arr))); + + // FieldSymbols!C and C.tupleof have the same symbols, because they are + // always the same for classes. + static assert(__traits(isSame, FieldSymbols!C, C.tupleof)); + + // Only direct member variables are included. Member variables from any base + // classes are not. + class D : C + { + real r; + } + static assert(__traits(isSame, FieldSymbols!D, AliasSeq!(D.r))); + static assert(__traits(isSame, FieldSymbols!D, D.tupleof)); + + // FieldSymbols will always be empty for an interface, since it's not legal + // for interfaces to have member variables. + interface I + { + } + static assert(FieldSymbols!I.length == 0); + static assert(I.tupleof.length == 0); + + union U + { + int i; + double d; + long l; + S s; + } + static assert(__traits(isSame, FieldSymbols!U, AliasSeq!(U.i, U.d, U.l, U.s))); + + // FieldSymbols!C and C.tupleof have the same symbols, because they are + // always the same for unions. + static assert(__traits(isSame, FieldSymbols!U, U.tupleof)); + + // FieldSymbols only operates on aggregate types. + static assert(!__traits(compiles, FieldSymbols!int)); + static assert(!__traits(compiles, FieldSymbols!(S*))); + static assert(!__traits(compiles, FieldSymbols!(C[]))); +} + +/// Some examples with nested types. +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + int outside; + + struct S + { + long l; + string s; + + void foo() { outside = 2; } + } + static assert(__traits(isNested, S)); + static assert(__traits(isSame, FieldSymbols!S, AliasSeq!(S.l, S.s))); + + // FieldSymbols!S and S.tupleof are not the same, because S is nested, and + // the context pointer to the outer scope is included in S.tupleof, whereas + // it is excluded from FieldSymbols!S. + static assert(__traits(isSame, S.tupleof[0 .. $ - 1], AliasSeq!(S.l, S.s))); + static assert(S.tupleof[$ - 1].stringof == "this"); + + class C + { + bool b; + int* ptr; + + void foo() { outside = 7; } + } + static assert(__traits(isNested, C)); + static assert(__traits(isSame, FieldSymbols!C, AliasSeq!(C.b, C.ptr))); + + // FieldSymbols!C and C.tupleof have the same symbols, because they are + // always the same for classes. No context pointer is provided as part of + // tupleof for nested classes. + static assert(__traits(isSame, FieldSymbols!C, C.tupleof)); + + // __traits(isNested, ...) is never true for interfaces or unions, since + // they cannot have a context pointer to an outer scope. So, tupleof and + // FieldSymbols will always be the same for interfaces and unions. +} + +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + { + static struct S0 {} + static assert(FieldSymbols!S0.length == 0); + + static struct S1 { int a; } + static assert(__traits(isSame, FieldSymbols!S1, AliasSeq!(S1.a))); + + static struct S2 { int a; string b; } + static assert(__traits(isSame, FieldSymbols!S2, AliasSeq!(S2.a, S2.b))); + + static struct S3 { int a; string b; real c; } + static assert(__traits(isSame, FieldSymbols!S3, AliasSeq!(S3.a, S3.b, S3.c))); + } + { + int i; + struct S0 { void foo() { i = 0; }} + static assert(FieldSymbols!S0.length == 0); + static assert(__traits(isNested, S0)); + + struct S1 { int a; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!S1, AliasSeq!(S1.a))); + static assert(__traits(isNested, S1)); + + struct S2 { int a; string b; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!S2, AliasSeq!(S2.a, S2.b))); + static assert(__traits(isNested, S2)); + + struct S3 { int a; string b; real c; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!S3, AliasSeq!(S3.a, S3.b, S3.c))); + static assert(__traits(isNested, S3)); + } + { + static class C0 {} + static assert(FieldSymbols!C0.length == 0); + + static class C1 { int a; } + static assert(__traits(isSame, FieldSymbols!C1, AliasSeq!(C1.a))); + + static class C2 { int a; string b; } + static assert(__traits(isSame, FieldSymbols!C2, AliasSeq!(C2.a, C2.b))); + + static class C3 { int a; string b; real c; } + static assert(__traits(isSame, FieldSymbols!C3, AliasSeq!(C3.a, C3.b, C3.c))); + + static class D0 : C3 {} + static assert(FieldSymbols!D0.length == 0); + + static class D1 : C3 { bool x; } + static assert(__traits(isSame, FieldSymbols!D1, AliasSeq!(D1.x))); + + static class D2 : C3 { bool x; int* y; } + static assert(__traits(isSame, FieldSymbols!D2, AliasSeq!(D2.x, D2.y))); + + static class D3 : C3 { bool x; int* y; short[] z; } + static assert(__traits(isSame, FieldSymbols!D3, AliasSeq!(D3.x, D3.y, D3.z))); + } + { + int i; + class C0 { void foo() { i = 0; }} + static assert(FieldSymbols!C0.length == 0); + static assert(__traits(isNested, C0)); + + class C1 { int a; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!C1, AliasSeq!(C1.a))); + static assert(__traits(isNested, C1)); + + class C2 { int a; string b; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!C2, AliasSeq!(C2.a, C2.b))); + static assert(__traits(isNested, C2)); + + class C3 { int a; string b; real c; void foo() { i = 0; } } + static assert(__traits(isSame, FieldSymbols!C3, AliasSeq!(C3.a, C3.b, C3.c))); + static assert(__traits(isNested, C3)); + + class D0 : C3 {} + static assert(FieldSymbols!D0.length == 0); + static assert(__traits(isNested, D0)); + + class D1 : C3 { bool x; } + static assert(__traits(isSame, FieldSymbols!D1, AliasSeq!(D1.x))); + static assert(__traits(isNested, D1)); + + class D2 : C3 { bool x; int* y; } + static assert(__traits(isSame, FieldSymbols!D2, AliasSeq!(D2.x, D2.y))); + static assert(__traits(isNested, D2)); + + class D3 : C3 { bool x; int* y; short[] z; } + static assert(__traits(isSame, FieldSymbols!D3, AliasSeq!(D3.x, D3.y, D3.z))); + static assert(__traits(isNested, D3)); + } + { + static union U0 {} + static assert(FieldSymbols!U0.length == 0); + + static union U1 { int a; } + static assert(__traits(isSame, FieldSymbols!U1, AliasSeq!(U1.a))); + + static union U2 { int a; string b; } + static assert(__traits(isSame, FieldSymbols!U2, AliasSeq!(U2.a, U2.b))); + + static union U3 { int a; string b; real c; } + static assert(__traits(isSame, FieldSymbols!U3, AliasSeq!(U3.a, U3.b, U3.c))); + } + { + static struct S + { + enum e = 42; + static str = "foobar"; + + string name() { return "foo"; } + + int[] arr; + + struct Inner1 { int i; } + + static struct Inner2 { long gnol; } + + union { int a; string b; } + + alias Foo = Inner1; + } + + static assert(__traits(isSame, FieldSymbols!S, AliasSeq!(S.arr, S.a, S.b))); + static assert(__traits(isSame, FieldSymbols!(const S), AliasSeq!(S.arr, S.a, S.b))); + static assert(__traits(isSame, FieldSymbols!(S.Inner1), AliasSeq!(S.Inner1.i))); + static assert(__traits(isSame, FieldSymbols!(S.Inner2), AliasSeq!(S.Inner2.gnol))); + } +} + +/++ + Evaluates to an $(D AliasSeq) of the types of the member variables of an + aggregate type (i.e. a struct, class, interface, or union). + + These are fields which take up memory space within an instance of the type + (i.e. not enums / manifest constants, since they don't take up memory + space, and not static member variables, since they don't take up memory + space within an instance). + + Hidden fields (like the virtual function table pointer or the context + pointer for nested types) are not included. + + For classes, only the direct member variables are included and not those + of any base classes. + + For interfaces, the result of FieldTypes is always empty, because + interfaces cannot have member variables. However, because interfaces are + aggregate types, they work with FieldTypes for consistency so that code + that's written to work on aggregate types doesn't have to worry about + whether it's dealing with an interface. + + See_Also: + $(LREF FieldNames) + $(LREF FieldSymbols) + $(DDSUBLINK spec/struct.html, struct_instance_properties, $(D tupleof)) + +/ +template FieldTypes(T) +if (isAggregateType!T) +{ + static if (is(T == struct) && __traits(isNested, T)) + alias FieldTypes = typeof(T.tupleof[0 .. $ - 1]); + else + alias FieldTypes = typeof(T.tupleof); +} + +/// +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + struct S + { + int x; + float y; + } + static assert(is(FieldTypes!S == AliasSeq!(int, float))); + + // Type qualifers will be passed on to the result. + static assert(is(FieldTypes!(const S) == AliasSeq!(const int, const float))); + static assert(is(FieldTypes!(shared S) == AliasSeq!(shared int, shared float))); + + class C + { + // static variables are not included. + static int var; + + // Manifest constants are not included. + enum lang = "dlang"; + + // Functions are not included, even if they're @property functions. + @property int foo() { return 42; } + + string s; + int i; + int[] arr; + } + static assert(is(FieldTypes!C == AliasSeq!(string, int, int[]))); + + // Only direct member variables are included. Member variables from any base + // classes are not. + class D : C + { + real r; + } + static assert(is(FieldTypes!D == AliasSeq!real)); + + // FieldTypes will always be empty for an interface, since it's not legal + // for interfaces to have member variables. + interface I + { + } + static assert(FieldTypes!I.length == 0); + + union U + { + int i; + double d; + long l; + S s; + } + static assert(is(FieldTypes!U == AliasSeq!(int, double, long, S))); + + // FieldTypes only operates on aggregate types. + static assert(!__traits(compiles, FieldTypes!int)); + static assert(!__traits(compiles, FieldTypes!(S*))); + static assert(!__traits(compiles, FieldTypes!(C[]))); +} + +@safe unittest +{ + import phobos.sys.meta : AliasSeq; + + { + static struct S0 {} + static assert(FieldTypes!S0.length == 0); + + static struct S1 { int a; } + static assert(is(FieldTypes!S1 == AliasSeq!int)); + + static struct S2 { int a; string b; } + static assert(is(FieldTypes!S2 == AliasSeq!(int, string))); + + static struct S3 { int a; string b; real c; } + static assert(is(FieldTypes!S3 == AliasSeq!(int, string, real))); + } + { + int i; + struct S0 { void foo() { i = 0; }} + static assert(FieldTypes!S0.length == 0); + static assert(__traits(isNested, S0)); + + struct S1 { int a; void foo() { i = 0; } } + static assert(is(FieldTypes!S1 == AliasSeq!int)); + static assert(__traits(isNested, S1)); + + struct S2 { int a; string b; void foo() { i = 0; } } + static assert(is(FieldTypes!S2 == AliasSeq!(int, string))); + static assert(__traits(isNested, S2)); + + struct S3 { int a; string b; real c; void foo() { i = 0; } } + static assert(is(FieldTypes!S3 == AliasSeq!(int, string, real))); + static assert(__traits(isNested, S3)); + } + { + static class C0 {} + static assert(FieldTypes!C0.length == 0); + + static class C1 { int a; } + static assert(is(FieldTypes!C1 == AliasSeq!int)); + + static class C2 { int a; string b; } + static assert(is(FieldTypes!C2 == AliasSeq!(int, string))); + + static class C3 { int a; string b; real c; } + static assert(is(FieldTypes!C3 == AliasSeq!(int, string, real))); + + static class D0 : C3 {} + static assert(FieldTypes!D0.length == 0); + + static class D1 : C3 { bool x; } + static assert(is(FieldTypes!D1 == AliasSeq!bool)); + + static class D2 : C3 { bool x; int* y; } + static assert(is(FieldTypes!D2 == AliasSeq!(bool, int*))); + + static class D3 : C3 { bool x; int* y; short[] z; } + static assert(is(FieldTypes!D3 == AliasSeq!(bool, int*, short[]))); + } + { + int i; + class C0 { void foo() { i = 0; }} + static assert(FieldTypes!C0.length == 0); + static assert(__traits(isNested, C0)); + + class C1 { int a; void foo() { i = 0; } } + static assert(is(FieldTypes!C1 == AliasSeq!int)); + static assert(__traits(isNested, C1)); + + class C2 { int a; string b; void foo() { i = 0; } } + static assert(is(FieldTypes!C2 == AliasSeq!(int, string))); + static assert(__traits(isNested, C2)); + + class C3 { int a; string b; real c; void foo() { i = 0; } } + static assert(is(FieldTypes!C3 == AliasSeq!(int, string, real))); + static assert(__traits(isNested, C3)); + + class D0 : C3 {} + static assert(FieldTypes!D0.length == 0); + static assert(__traits(isNested, D0)); + + class D1 : C3 { bool x; } + static assert(is(FieldTypes!D1 == AliasSeq!bool)); + static assert(__traits(isNested, D1)); + + class D2 : C3 { bool x; int* y; } + static assert(is(FieldTypes!D2 == AliasSeq!(bool, int*))); + static assert(__traits(isNested, D2)); + + class D3 : C3 { bool x; int* y; short[] z; } + static assert(is(FieldTypes!D3 == AliasSeq!(bool, int*, short[]))); + static assert(__traits(isNested, D3)); + } + { + static union U0 {} + static assert(FieldTypes!U0.length == 0); + + static union U1 { int a; } + static assert(is(FieldTypes!U1 == AliasSeq!int)); + + static union U2 { int a; string b; } + static assert(is(FieldTypes!U2 == AliasSeq!(int, string))); + + static union U3 { int a; string b; real c; } + static assert(is(FieldTypes!U3 == AliasSeq!(int, string, real))); + } + { + static struct S + { + enum e = 42; + static str = "foobar"; + + string name() { return "foo"; } + + int[] arr; + + struct Inner1 { int i; } + + static struct Inner2 { long gnol; } + + union { int a; string b; } + + alias Foo = Inner1; + } + + static assert(is(FieldTypes!S == AliasSeq!(int[], int, string))); + static assert(is(FieldTypes!(const S) == AliasSeq!(const(int[]), const int, const string))); + static assert(is(FieldTypes!(S.Inner1) == AliasSeq!int)); + static assert(is(FieldTypes!(S.Inner2) == AliasSeq!long)); + } +} + +/++ + Takes a type which is an associative array and evaluates to the type of the + keys in that associative array. + + See_Also: + $(LREF ValueType) + +/ +alias KeyType(V : V[K], K) = K; + +/// +@safe unittest +{ + static assert(is(KeyType!(int[string]) == string)); + static assert(is(KeyType!(string[int]) == int)); + + static assert(is(KeyType!(string[const int]) == const int)); + static assert(is(KeyType!(const int[string]) == string)); + + struct S + { + int i; + } + + string[S] aa1; + static assert(is(KeyType!(typeof(aa1)) == S)); + + S[string] aa2; + static assert(is(KeyType!(typeof(aa2)) == string)); + + KeyType!(typeof(aa1)) key1 = S(42); + KeyType!(typeof(aa2)) key2 = "foo"; + + // Key types with indirections have their inner layers treated as const + // by the compiler, because the values of keys can't change, or the hash + // value could change, putting the associative array in an invalid state. + static assert(is(KeyType!(bool[string[]]) == const(string)[])); + static assert(is(KeyType!(bool[int*]) == const(int)*)); + + // If the given type is not an AA, then KeyType won't compile. + static assert(!__traits(compiles, KeyType!int)); + static assert(!__traits(compiles, KeyType!(int[]))); +} + +/++ + Takes a type which is an associative array and evaluates to the type of the + values in that associative array. + + See_Also: + $(LREF KeyType) + +/ +alias ValueType(V : V[K], K) = V; + +/// +@safe unittest +{ + static assert(is(ValueType!(int[string]) == int)); + static assert(is(ValueType!(string[int]) == string)); + + static assert(is(ValueType!(string[const int]) == string)); + static assert(is(ValueType!(const int[string]) == const int)); + + struct S + { + int i; + } + + string[S] aa1; + static assert(is(ValueType!(typeof(aa1)) == string)); + + S[string] aa2; + static assert(is(ValueType!(typeof(aa2)) == S)); + + ValueType!(typeof(aa1)) value1 = "foo"; + ValueType!(typeof(aa2)) value2 = S(42); + + // If the given type is not an AA, then ValueType won't compile. + static assert(!__traits(compiles, ValueType!int)); + static assert(!__traits(compiles, ValueType!(int[]))); +} + +/++ + Evaluates to the original / ultimate base type of an enum type - or for + non-enum types, it evaluates to the type that it's given. + + If the base type of the given enum type is not an enum, then the result of + OriginalType is its direct base type. However, if the base type of the + given enum is also an enum, then OriginalType gives the ultimate base type + - that is, it keeps getting the base type for each succesive enum in the + chain until it gets to a base type that isn't an enum, and that's the + result. So, the result will never be an enum type. + + If the given type has any qualifiers, the result will have those same + qualifiers. + +/ +version (StdDdoc) template OriginalType(T) +{ + import core.internal.traits : CoreOriginalType = OriginalType; + alias OriginalType = CoreOriginalType!T; +} +else +{ + import core.internal.traits : CoreOriginalType = OriginalType; + alias OriginalType = CoreOriginalType; +} + +/// +@safe unittest +{ + enum E { a, b, c } + static assert(is(OriginalType!E == int)); + + enum F : E { x = E.a } + static assert(is(OriginalType!F == int)); + + enum G : F { y = F.x } + static assert(is(OriginalType!G == int)); + static assert(is(OriginalType!(const G) == const int)); + static assert(is(OriginalType!(immutable G) == immutable int)); + static assert(is(OriginalType!(shared G) == shared int)); + + enum C : char { a = 'a', b = 'b' } + static assert(is(OriginalType!C == char)); + + enum D : string { d = "dlang" } + static assert(is(OriginalType!D == string)); + + static assert(is(OriginalType!int == int)); + static assert(is(OriginalType!(const long) == const long)); + static assert(is(OriginalType!string == string)); + + // OriginalType gets the base type of enums and for all other types gives + // the same type back. It does nothing special for other types - like + // classes - where one could talk about the type having a base type. + class Base {} + class Derived : Base {} + static assert(is(OriginalType!Base == Base)); + static assert(is(OriginalType!Derived == Derived)); +} + +/++ + Removes the outer layer of $(D const), $(D inout), or $(D immutable) + from type $(D T). + + If none of those qualifiers have been applied to the outer layer of + type $(D T), then the result is $(D T). + + For the built-in scalar types (that is $(D bool), the character types, and + the numeric types), they only have one layer, so $(D const U) simply becomes + $(D U). + + Where the layers come in is pointers and arrays. $(D const(U*)) becomes + $(D const(U)*), and $(D const(U[])), becomes $(D const(U)[]). So, a pointer + goes from being fully $(D const) to being a mutable pointer to $(D const), + and a dynamic array goes from being fully $(D const) to being a mutable + dynamic array of $(D const) elements. And if there are multiple layers of + pointers or arrays, it's just that outer layer which is affected - e.g. + $(D const(U**)) would become $(D const(U*)*). + + For user-defined types, the effect is that $(D const U) becomes $(D U), and + how that affects member variables depends on the type of the member + variable. If a member variable is explicitly marked with any mutability + qualifiers, then it will continue to have those qualifiers even after + Unconst has stripped all mutability qualifiers from the containing type. + However, if a mutability qualifier was on the member variable only because + the containing type had that qualifier, then when Unconst removes the + qualifier from the containing type, it is removed from the member variable + as well. + + Also, Unconst has no effect on what a templated type is instantiated + with, so if a templated type is instantiated with a template argument which + has a mutability qualifier, the template instantiation will not change. + +/ +version (StdDdoc) template Unconst(T) +{ + import core.internal.traits : CoreUnconst = Unconst; + alias Unconst = CoreUnconst!T; +} +else +{ + import core.internal.traits : CoreUnconst = Unconst; + alias Unconst = CoreUnconst; +} + +/// +@safe unittest +{ + static assert(is(Unconst!( int) == int)); + static assert(is(Unconst!( const int) == int)); + static assert(is(Unconst!( inout int) == int)); + static assert(is(Unconst!( inout const int) == int)); + static assert(is(Unconst!(shared int) == shared int)); + static assert(is(Unconst!(shared const int) == shared int)); + static assert(is(Unconst!(shared inout int) == shared int)); + static assert(is(Unconst!(shared inout const int) == shared int)); + static assert(is(Unconst!( immutable int) == int)); + + // Only the outer layer of immutable is removed. + // immutable(int[]) -> immutable(int)[] + alias ImmIntArr = immutable(int[]); + static assert(is(Unconst!ImmIntArr == immutable(int)[])); + + // Only the outer layer of const is removed. + // immutable(int*) -> immutable(int)* + alias ConstIntPtr = const(int*); + static assert(is(Unconst!ConstIntPtr == const(int)*)); + + // const(int)* -> const(int)* + alias PtrToConstInt = const(int)*; + static assert(is(Unconst!PtrToConstInt == const(int)*)); + + static struct S + { + int* ptr; + const int* cPtr; + shared int* sPtr; + } + + const S s; + static assert(is(typeof(s) == const S)); + static assert(is(typeof(typeof(s).ptr) == const int*)); + static assert(is(typeof(typeof(s).cPtr) == const int*)); + static assert(is(typeof(typeof(s).sPtr) == const shared int*)); + + // For user-defined types, all mutability qualifiers that are applied to + // member variables only because the containing type has them are removed, + // but the ones that are directly on those member variables remain. + + // const S -> S + static assert(is(Unconst!(typeof(s)) == S)); + static assert(is(typeof(Unconst!(typeof(s)).ptr) == int*)); + static assert(is(typeof(Unconst!(typeof(s)).cPtr) == const int*)); + static assert(is(typeof(Unconst!(typeof(s)).sPtr) == shared int*)); + + static struct Foo(T) + { + T* ptr; + } + + // The qualifier on the type is removed, but the qualifier on the template + // argument is not. + static assert(is(Unconst!(const(Foo!(const int))) == Foo!(const int))); + static assert(is(Unconst!(Foo!(const int)) == Foo!(const int))); + static assert(is(Unconst!(const(Foo!int)) == Foo!int)); +} + +/++ + Removes the outer layer of $(D shared) from type $(D T). + + If $(D shared) has not been applied to the outer layer of type $(D T), then + the result is $(D T). + + Note that while $(D immutable) is implicitly $(D shared), it is unaffected + by Unshared. Only explicit $(D shared) is removed. + + For the built-in scalar types (that is $(D bool), the character types, and + the numeric types), they only have one layer, so $(D shared U) simply + becomes $(D U). + + Where the layers come in is pointers and arrays. $(D shared(U*)) becomes + $(D shared(U)*), and $(D shared(U[])), becomes $(D shared(U)[]). So, a + pointer goes from being fully $(D shared) to being a mutable pointer to + $(D shared), and a dynamic array goes from being fully $(D shared) to being + a mutable dynamic array of $(D shared) elements. And if there are multiple + layers of pointers or arrays, it's just that outer layer which is affected + - e.g. $(D shared(U**)) would become $(D shared(U*)*). + + For user-defined types, the effect is that $(D shared U) becomes $(D U), + and how that affects member variables depends on the type of the member + variable. If a member variable is explicitly marked with $(D shared), then + it will continue to be $(D shared) even after Unshared has stripped + $(D shared) from the containing type. However, if $(D shared) was on the + member variable only because the containing type was $(D shared), then when + Unshared removes the qualifier from the containing type, it is removed from + the member variable as well. + + Also, Unshared has no effect on what a templated type is instantiated + with, so if a templated type is instantiated with a template argument which + has a type qualifier, the template instantiation will not change. + +/ +template Unshared(T) +{ + static if (is(T == shared U, U)) + alias Unshared = U; + else + alias Unshared = T; +} + +/// +@safe unittest +{ + static assert(is(Unshared!( int) == int)); + static assert(is(Unshared!( const int) == const int)); + static assert(is(Unshared!( inout int) == inout int)); + static assert(is(Unshared!( inout const int) == inout const int)); + static assert(is(Unshared!(shared int) == int)); + static assert(is(Unshared!(shared const int) == const int)); + static assert(is(Unshared!(shared inout int) == inout int)); + static assert(is(Unshared!(shared inout const int) == inout const int)); + static assert(is(Unshared!( immutable int) == immutable int)); + + // Only the outer layer of shared is removed. + // shared(int[]) -> shared(int)[] + alias SharedIntArr = shared(int[]); + static assert(is(Unshared!SharedIntArr == shared(int)[])); + + // Only the outer layer of shared is removed. + // shared(int*) -> shared(int)* + alias SharedIntPtr = shared(int*); + static assert(is(Unshared!SharedIntPtr == shared(int)*)); + + // shared(int)* -> shared(int)* + alias PtrToSharedInt = shared(int)*; + static assert(is(Unshared!PtrToSharedInt == shared(int)*)); + + // immutable is unaffected + alias ImmutableArr = immutable(int[]); + static assert(is(Unshared!ImmutableArr == immutable(int[]))); + + static struct S + { + int* ptr; + const int* cPtr; + shared int* sPtr; + } + + shared S s; + static assert(is(typeof(s) == shared S)); + static assert(is(typeof(typeof(s).ptr) == shared int*)); + static assert(is(typeof(typeof(s).cPtr) == const shared int*)); + static assert(is(typeof(typeof(s).sPtr) == shared int*)); + + // For user-defined types, if shared is applied to a member variable only + // because the containing type is shared, then shared is removed from that + // member variable, but if the member variable is directly marked as shared, + // then it continues to be shared. + + // shared S -> S + static assert(is(Unshared!(typeof(s)) == S)); + static assert(is(typeof(Unshared!(typeof(s)).ptr) == int*)); + static assert(is(typeof(Unshared!(typeof(s)).cPtr) == const int*)); + static assert(is(typeof(Unshared!(typeof(s)).sPtr) == shared int*)); + + static struct Foo(T) + { + T* ptr; + } + + // The qualifier on the type is removed, but the qualifier on the template + // argument is not. + static assert(is(Unshared!(shared(Foo!(shared int))) == Foo!(shared int))); + static assert(is(Unshared!(Foo!(shared int)) == Foo!(shared int))); + static assert(is(Unshared!(shared(Foo!int)) == Foo!int)); +} + +/++ + Removes the outer layer of all type qualifiers from type $(D T) - this + includes $(D shared). + + If no type qualifiers have been applied to the outer layer of type $(D T), + then the result is $(D T). + + For the built-in scalar types (that is $(D bool), the character types, and + the numeric types), they only have one layer, so $(D const U) simply becomes + $(D U). + + Where the layers come in is pointers and arrays. $(D const(U*)) becomes + $(D const(U)*), and $(D const(U[])), becomes $(D const(U)[]). So, a pointer + goes from being fully $(D const) to being a mutable pointer to $(D const), + and a dynamic array goes from being fully $(D const) to being a mutable + dynamic array of $(D const) elements. And if there are multiple layers of + pointers or arrays, it's just that outer layer which is affected - e.g. + $(D shared(U**)) would become $(D shared(U*)*). + + For user-defined types, the effect is that $(D const U) becomes $(D U), and + how that affects member variables depends on the type of the member + variable. If a member variable is explicitly marked with any qualifiers, + then it will continue to have those qualifiers even after Unqualified has + stripped all qualifiers from the containing type. However, if a qualifier + was on the member variable only because the containing type had that + qualifier, then when Unqualified removes the qualifier from the containing + type, it is removed from the member variable as well. + + Also, Unqualified has no effect on what a templated type is instantiated + with, so if a templated type is instantiated with a template argument which + has a type qualifier, the template instantiation will not change. + + Note that in most cases, $(LREF Unconst) or $(LREF Unshared) should be used + rather than Unqualified, because in most cases, code is not designed to + work with $(D shared) and thus doing type checks which remove $(D shared) + will allow $(D shared) types to pass template constraints when they won't + actually work with the code. And when code is designed to work with + $(D shared), it's often the case that the type checks need to take + $(D const) into account in order to avoid accidentally mutating $(D const) + data and violating the type system. + + In particular, historically, a lot of D code has used + $(REF Unqual, std, traits) (which is equivalent to phobos.sys.traits' + Unqualified) when the programmer's intent was to remove $(D const), and + $(D shared) wasn't actually considered at all. And in such cases, the code + really should use $(LREF Unconst) instead. + + But of course, if a template constraint or $(D static if) really needs to + strip off both the mutability qualifiers and $(D shared) for what it's + testing for, then that's what Unqualified is for. It's just that it's best + practice to use $(LREF Unconst) when it's not clear that $(D shared) should + be removed as well. + +/ +version (StdDdoc) template Unqualified(T) +{ + import core.internal.traits : CoreUnqualified = Unqual; + alias Unqualified = CoreUnqualified!(T); +} +else +{ + import core.internal.traits : CoreUnqualified = Unqual; + alias Unqualified = CoreUnqualified; +} + +/// +@safe unittest +{ + static assert(is(Unqualified!( int) == int)); + static assert(is(Unqualified!( const int) == int)); + static assert(is(Unqualified!( inout int) == int)); + static assert(is(Unqualified!( inout const int) == int)); + static assert(is(Unqualified!(shared int) == int)); + static assert(is(Unqualified!(shared const int) == int)); + static assert(is(Unqualified!(shared inout int) == int)); + static assert(is(Unqualified!(shared inout const int) == int)); + static assert(is(Unqualified!( immutable int) == int)); + + // Only the outer layer of immutable is removed. + // immutable(int[]) -> immutable(int)[] + alias ImmIntArr = immutable(int[]); + static assert(is(Unqualified!ImmIntArr == immutable(int)[])); + + // Only the outer layer of const is removed. + // const(int*) -> const(int)* + alias ConstIntPtr = const(int*); + static assert(is(Unqualified!ConstIntPtr == const(int)*)); + + // const(int)* -> const(int)* + alias PtrToConstInt = const(int)*; + static assert(is(Unqualified!PtrToConstInt == const(int)*)); + + // Only the outer layer of shared is removed. + // shared(int*) -> shared(int)* + alias SharedIntPtr = shared(int*); + static assert(is(Unqualified!SharedIntPtr == shared(int)*)); + + // shared(int)* -> shared(int)* + alias PtrToSharedInt = shared(int)*; + static assert(is(Unqualified!PtrToSharedInt == shared(int)*)); + + // Both const and shared are removed from the outer layer. + // shared const int[] -> shared(const(int))[] + alias SharedConstIntArr = shared const(int[]); + static assert(is(Unqualified!SharedConstIntArr == shared(const(int))[])); + + static struct S + { + int* ptr; + const int* cPtr; + shared int* sPtr; + } + + shared const S s; + static assert(is(typeof(s) == shared const S)); + static assert(is(typeof(typeof(s).ptr) == shared const int*)); + static assert(is(typeof(typeof(s).cPtr) == shared const int*)); + static assert(is(typeof(typeof(s).sPtr) == shared const int*)); + + // For user-defined types, all qualifiers that are applied to member + // variables only because the containing type has them are removed, but the + // ones that are directly on those member variables remain. + + // shared const S -> S + static assert(is(Unqualified!(typeof(s)) == S)); + static assert(is(typeof(Unqualified!(typeof(s)).ptr) == int*)); + static assert(is(typeof(Unqualified!(typeof(s)).cPtr) == const int*)); + static assert(is(typeof(Unqualified!(typeof(s)).sPtr) == shared int*)); + + static struct Foo(T) + { + T* ptr; + } + + // The qualifiers on the type are removed, but the qualifiers on the + // template argument are not. + static assert(is(Unqualified!(const(Foo!(const int))) == Foo!(const int))); + static assert(is(Unqualified!(Foo!(const int)) == Foo!(const int))); + static assert(is(Unqualified!(const(Foo!int)) == Foo!int)); +} + +/++ + Applies $(D const) to the given type. + + This is primarily useful in conjunction with templates that take a template + predicate (such as many of the templates in phobos.sys.meta), since while in + most cases, you can simply do $(D const T) or $(D const(T)) to make $(D T) + $(D const), with something like $(REF Map, phobos, sys, meta), you need to + pass a template to be applied. + + See_Also: + $(LREF ImmutableOf) + $(LREF InoutOf) + $(LREF SharedOf) + +/ +alias ConstOf(T) = const T; + +/// +@safe unittest +{ + static assert(is(ConstOf!int == const int)); + static assert(is(ConstOf!(const int) == const int)); + static assert(is(ConstOf!(inout int) == inout const int)); + static assert(is(ConstOf!(shared int) == const shared int)); + + // Note that const has no effect on immutable. + static assert(is(ConstOf!(immutable int) == immutable int)); + + import phobos.sys.meta : AliasSeq, Map; + + alias Types = AliasSeq!(int, long, + bool*, ubyte[], + string, immutable(string)); + alias WithConst = Map!(ConstOf, Types); + static assert(is(WithConst == + AliasSeq!(const int, const long, + const(bool*), const(ubyte[]), + const(string), immutable(string)))); +} + +/++ + Applies $(D immutable) to the given type. + + This is primarily useful in conjunction with templates that take a template + predicate (such as many of the templates in phobos.sys.meta), since while in + most cases, you can simply do $(D immutable T) or $(D immutable(T)) to make + $(D T) $(D immutable), with something like $(REF Map, phobos, sys, meta), + you need to pass a template to be applied. + + See_Also: + $(LREF ConstOf) + $(LREF InoutOf) + $(LREF SharedOf) + +/ +alias ImmutableOf(T) = immutable T; + +/// +@safe unittest +{ + static assert(is(ImmutableOf!int == immutable int)); + + // Note that immutable overrides const and inout. + static assert(is(ImmutableOf!(const int) == immutable int)); + static assert(is(ImmutableOf!(inout int) == immutable int)); + + // Note that immutable overrides shared, since immutable is implicitly + // shared. + static assert(is(ImmutableOf!(shared int) == immutable int)); + + static assert(is(ImmutableOf!(immutable int) == immutable int)); + + import phobos.sys.meta : AliasSeq, Map; + + alias Types = AliasSeq!(int, long, + bool*, ubyte[], + string, immutable(string)); + alias WithImmutable = Map!(ImmutableOf, Types); + static assert(is(WithImmutable == + AliasSeq!(immutable int, immutable long, + immutable(bool*), immutable(ubyte[]), + immutable(string), immutable(string)))); +} + +/++ + Applies $(D inout) to the given type. + + This is primarily useful in conjunction with templates that take a template + predicate (such as many of the templates in phobos.sys.meta), since while in + most cases, you can simply do $(D inout T) or $(D inout(T)) to make $(D T) + $(D inout), with something like $(REF Map, phobos, sys, meta), you need to + pass a template to be applied. + + See_Also: + $(LREF ConstOf) + $(LREF ImmutableOf) + $(LREF SharedOf) + +/ +alias InoutOf(T) = inout T; + +/// +@safe unittest +{ + static assert(is(InoutOf!int == inout int)); + static assert(is(InoutOf!(const int) == inout const int)); + static assert(is(InoutOf!(inout int) == inout int)); + static assert(is(InoutOf!(shared int) == inout shared int)); + + // Note that inout has no effect on immutable. + static assert(is(InoutOf!(immutable int) == immutable int)); + + import phobos.sys.meta : AliasSeq, Map; + + alias Types = AliasSeq!(int, long, + bool*, ubyte[], + string, immutable(string)); + alias WithInout = Map!(InoutOf, Types); + static assert(is(WithInout == + AliasSeq!(inout int, inout long, + inout(bool*), inout(ubyte[]), + inout(string), immutable(string)))); +} + +/++ + Applies $(D shared) to the given type. + + This is primarily useful in conjunction with templates that take a template + predicate (such as many of the templates in phobos.sys.meta), since while in + most cases, you can simply do $(D shared T) or $(D shared(T)) to make $(D T) + $(D shared), with something like $(REF Map, phobos, sys, meta), you need to + pass a template to be applied. + + See_Also: + $(LREF ConstOf) + $(LREF ImmutableOf) + $(LREF InoutOf) + +/ +alias SharedOf(T) = shared T; + +/// +@safe unittest +{ + static assert(is(SharedOf!int == shared int)); + static assert(is(SharedOf!(const int) == const shared int)); + static assert(is(SharedOf!(inout int) == inout shared int)); + static assert(is(SharedOf!(shared int) == shared int)); + + // Note that shared has no effect on immutable, since immutable is + // implicitly shared. + static assert(is(SharedOf!(immutable int) == immutable int)); + + import phobos.sys.meta : AliasSeq, Map; + + alias Types = AliasSeq!(int, long, + bool*, ubyte[], + string, immutable(string)); + alias WithShared = Map!(SharedOf, Types); + static assert(is(WithShared == + AliasSeq!(shared int, shared long, + shared(bool*), shared(ubyte[]), + shared(string), immutable(string)))); +} + +// Needed for rvalueOf/lvalueOf because +// "inout on return means inout must be on a parameter as well" +private struct __InoutWorkaroundStruct {} + +/++ + Creates an lvalue or rvalue of type T to be used in conjunction with + $(D is(typeof(...))) or + $(DDSUBLINK spec/traits, compiles, $(D __traits(compiles, ...))). + + The idea is that some traits or other forms of conditional compilation need + to verify that a particular piece of code compiles with an rvalue or an + lvalue of a specific type, and these $(D @property) functions allow you to + get an rvalue or lvalue of a specific type to use within an expression that + is then tested to see whether it compiles. + + They're $(D @property) functions so that using $(D typeof) on them gives + the return type rather than the type of the function. + + Note that these functions are $(I not) defined, so if they're actually used + outside of type introspection, they'll result in linker errors. They're + entirely for testing that a particular piece of code compiles with an rvalue + or lvalue of the given type. + + The $(D __InoutWorkaroundStruct) parameter is entirely to make it so that + these work when the given type has the $(D inout) qualifier, since the + language requires that a function that returns an $(D inout) type also have + an $(D inout) type as a parameter. It should just be ignored. + +/ +@property T rvalueOf(T)(inout __InoutWorkaroundStruct = __InoutWorkaroundStruct.init); + +/++ Ditto +/ +@property ref T lvalueOf(T)(inout __InoutWorkaroundStruct = __InoutWorkaroundStruct.init); + +/// +@safe unittest +{ + static int foo(int); + static assert(is(typeof(foo(lvalueOf!int)) == int)); + static assert(is(typeof(foo(rvalueOf!int)) == int)); + + static bool bar(ref int); + static assert(is(typeof(bar(lvalueOf!int)) == bool)); + static assert(!is(typeof(bar(rvalueOf!int)))); + + static assert( is(typeof({ lvalueOf!int = 42; }))); + static assert(!is(typeof({ rvalueOf!int = 42; }))); + + static struct S {} + static assert( is(typeof({ lvalueOf!S = S.init; }))); + static assert(!is(typeof({ rvalueOf!S = S.init; }))); + + static struct NoAssign + { + @disable void opAssign(ref NoAssign); + } + static assert(!is(typeof({ lvalueOf!NoAssign = NoAssign.init; }))); + static assert(!is(typeof({ rvalueOf!NoAssign = NoAssign.init; }))); +} + +@system unittest +{ + import phobos.sys.meta : AliasSeq; + + void needLvalue(T)(ref T); + static struct S {} + int i; + struct Nested { void f() { ++i; } } + + static foreach (T; AliasSeq!(int, const int, immutable int, inout int, string, S, Nested, Object)) + { + static assert(!__traits(compiles, needLvalue(rvalueOf!T))); + static assert( __traits(compiles, needLvalue(lvalueOf!T))); + static assert(is(typeof(rvalueOf!T) == T)); + static assert(is(typeof(lvalueOf!T) == T)); + } + + static assert(!__traits(compiles, rvalueOf!int = 1)); + static assert( __traits(compiles, lvalueOf!byte = 127)); + static assert(!__traits(compiles, lvalueOf!byte = 128)); +} diff --git a/posix.mak b/posix.mak index 2f05370dbfa..bc94e485f0e 100644 --- a/posix.mak +++ b/posix.mak @@ -1,718 +1,11 @@ -# Makefile to build linux D runtime library libphobos2.a and its unit test -# -# make => makes release build of the library -# -# make clean => removes all targets built by the makefile -# -# make zip => creates a zip file of all the sources (not targets) -# referred to by the makefile, including the makefile -# -# make BUILD=debug => makes debug build of the library -# -# make unittest => builds all unittests (for debug AND release) and runs them -# -# make BUILD=debug unittest => builds all unittests (for debug) and runs them -# -# make DEBUGGER=ddd std/XXXXX.debug => builds the module XXXXX and executes it -# in the debugger ddd -# -# make build-html => makes html documentation -# -# make install => copies library to /usr/lib -# -# make std/somemodule.test => only builds and unittests std.somemodule -# -################################################################################ -# Configurable stuff, usually from the command line -# -# OS can be linux, win32, win32wine, osx, freebsd, netbsd or dragonflybsd. -# The system will be determined by using uname +$(warning ===== DEPRECATION NOTICE ===== ) +$(warning ===== DEPRECATION: posix.mak is deprecated. Please use generic Makefile instead.) +$(warning ============================== ) -QUIET:=@ +# forward everything to Makefile -DEBUGGER=gdb -GIT_HOME=https://github.com/dlang -DMD_DIR=../dmd +all: + $(MAKE) -f Makefile $@ -include $(DMD_DIR)/compiler/src/osmodel.mak - -ifeq (osx,$(OS)) - export MACOSX_DEPLOYMENT_TARGET=10.9 -endif - -# Default to a release build, override with BUILD=debug -ifeq (,$(BUILD)) -BUILD_WAS_SPECIFIED=0 -BUILD=release -else -BUILD_WAS_SPECIFIED=1 -endif - -ifneq ($(BUILD),release) - ifneq ($(BUILD),debug) - $(error Unrecognized BUILD=$(BUILD), must be 'debug' or 'release') - endif -endif - -# default to PIC, use PIC=1/0 to en-/disable PIC. -# Note that shared libraries and C files are always compiled with PIC. -ifeq ($(PIC),) - PIC:=1 -endif -ifeq ($(PIC),1) - override PIC:=-fPIC -else - override PIC:= -endif - -# Configurable stuff that's rarely edited -INSTALL_DIR = ../install -DRUNTIME_PATH = ../dmd/druntime -DLANG_ORG_DIR = ../dlang.org -ZIPFILE = phobos.zip -ROOT_OF_THEM_ALL = generated -ROOT = $(ROOT_OF_THEM_ALL)/$(OS)/$(BUILD)/$(MODEL) -DUB=dub -TOOLS_DIR=../tools -DSCANNER_HASH=d5d6920502bf1bfdb29474007a59fd606df0aadc -DSCANNER_DIR=$(ROOT_OF_THEM_ALL)/dscanner-$(DSCANNER_HASH) - -# Set DRUNTIME name and full path -ifneq (,$(DRUNTIME)) - CUSTOM_DRUNTIME=1 -endif -ifeq (,$(findstring win,$(OS))) - DRUNTIME = $(DRUNTIME_PATH)/../generated/$(OS)/$(BUILD)/$(MODEL)/libdruntime.a - DRUNTIMESO = $(basename $(DRUNTIME)).so.a -else - DRUNTIME = $(DRUNTIME_PATH)/../lib/druntime.lib -endif - -# Set CC and DMD -ifeq ($(OS),win32wine) - CC = wine dmc.exe - DMD = wine dmd.exe - RUN = wine -else - DMD = $(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd - ifeq ($(OS),win32) - CC = dmc - else - CC = cc - endif - RUN = -endif - -# Set CFLAGS -OUTFILEFLAG = -o -NODEFAULTLIB=-defaultlib= -debuglib= -ifeq (,$(findstring win,$(OS))) - CFLAGS=$(MODEL_FLAG) -fPIC -std=c11 -DHAVE_UNISTD_H -# Bundled with the system library on OSX, and doesn't work with >= MacOS 11 - ifneq (osx,$(OS)) - NODEFAULTLIB += -L-lpthread -L-lm - endif - ifeq ($(BUILD),debug) - CFLAGS += -g - else - CFLAGS += -O3 - endif -else - ifeq ($(OS),win32) - CFLAGS=-DNO_snprintf - ifeq ($(BUILD),debug) - CFLAGS += -g - else - CFLAGS += -O - endif - else # win64/win32coff - OUTFILEFLAG = /Fo - NODEFAULTLIB=-L/NOD:phobos$(MODEL).lib -L/OPT:NOICF - ifeq ($(BUILD),debug) - CFLAGS += /Z7 - else - CFLAGS += /Ox - endif - endif -endif -ifeq (osx,$(OS)) - ifeq (64,$(MODEL)) - CFLAGS+=--target=x86_64-darwin-apple # ARM cpu is not supported by dmd - endif -endif - - -# Set DFLAGS -DFLAGS= -override DFLAGS+=-conf= -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise $(MODEL_FLAG) $(PIC) -ifeq ($(BUILD),debug) -override DFLAGS += -g -debug -else -override DFLAGS += -O -release -endif - -ifdef ENABLE_COVERAGE -override DFLAGS += -cov=ctfe -endif - -ifdef NO_BOUNDSCHECKS -override DFLAGS += -boundscheck=off -endif - -ifdef NO_AUTODECODE -override DFLAGS += -version=NoAutodecodeStrings -endif - -UDFLAGS=-unittest -version=StdUnittest - -# Set DOTOBJ and DOTEXE -ifeq (,$(findstring win,$(OS))) - DOTOBJ:=.o - DOTEXE:= - PATHSEP:=/ -else - DOTOBJ:=.obj - DOTEXE:=.exe - PATHSEP:=$(shell echo "\\") -endif - -LINKDL:=$(if $(findstring $(OS),linux),-L-ldl,) - -# use timelimit to avoid deadlocks if available -TIMELIMIT:=$(if $(shell which timelimit 2>/dev/null || true),timelimit -t 90 ,) - -# Set VERSION, where the file is that contains the version string -VERSION=$(DMD_DIR)/VERSION - -# Set LIB, the ultimate target -ifeq (,$(findstring win,$(OS))) - LIB:=$(ROOT)/libphobos2.a - # 2.064.2 => libphobos2.so.0.64.2 - # 2.065 => libphobos2.so.0.65.0 - # MAJOR version is 0 for now, which means the ABI is still unstable - MAJOR:=0 - MINOR:=$(shell awk -F. '{ print int($$2) }' $(VERSION)) - PATCH:=$(shell awk -F. '{ print int($$3) }' $(VERSION)) - # SONAME doesn't use patch level (ABI compatible) - SONAME:=libphobos2.so.$(MAJOR).$(MINOR) - LIBSO:=$(ROOT)/$(SONAME).$(PATCH) -else - LIB:=$(ROOT)/phobos.lib -endif - -################################################################################ -MAIN = $(ROOT)/emptymain.d - -# Given one or more packages, returns the modules they contain -P2MODULES=$(foreach P,$1,$(addprefix $P/,$(PACKAGE_$(subst /,_,$P)))) - -# Packages in std. Just mention the package name here. The contents of package -# xy/zz is in variable PACKAGE_xy_zz. This allows automation in iterating -# packages and their modules. -STD_PACKAGES = std $(addprefix std/,\ - algorithm container datetime digest experimental/allocator \ - experimental/allocator/building_blocks experimental/logger \ - format logger math net uni \ - experimental range regex windows) - -# Modules broken down per package - -PACKAGE_std = array ascii base64 bigint bitmanip checkedint compiler complex concurrency \ - conv csv demangle encoding exception file \ - functional getopt int128 json mathspecial meta mmfile numeric \ - outbuffer package parallelism path process random signals socket stdint \ - stdio string sumtype system traits typecons \ - uri utf uuid variant zip zlib -PACKAGE_std_experimental = checkedint -PACKAGE_std_algorithm = comparison iteration mutation package searching setops \ - sorting -PACKAGE_std_container = array binaryheap dlist package rbtree slist util -PACKAGE_std_datetime = date interval package stopwatch systime timezone -PACKAGE_std_digest = crc hmac md murmurhash package ripemd sha -PACKAGE_std_experimental_logger = core filelogger \ - nulllogger multilogger package -PACKAGE_std_experimental_allocator = \ - common gc_allocator mallocator mmap_allocator package showcase typed -PACKAGE_std_experimental_allocator_building_blocks = \ - affix_allocator aligned_block_list allocator_list ascending_page_allocator \ - bucketizer fallback_allocator free_list free_tree bitmapped_block \ - kernighan_ritchie null_allocator package quantizer \ - region scoped_allocator segregator stats_collector -PACKAGE_std_format = package read spec write $(addprefix internal/, floats read write) -PACKAGE_std_math = algebraic constants exponential hardware operations \ - package remainder rounding traits trigonometry -PACKAGE_std_net = curl isemail -PACKAGE_std_range = interfaces package primitives -PACKAGE_std_regex = package $(addprefix internal/,generator ir parser \ - backtracking tests tests2 thompson kickstart) -PACKAGE_std_uni = package -PACKAGE_std_windows = charset registry syserror -PACKAGE_std_logger = core filelogger \ - nulllogger multilogger package - -# Modules in std (including those in packages) -STD_MODULES=$(call P2MODULES,$(STD_PACKAGES)) - -# NoAutodecode test modules. -# List all modules whose unittests are known to work without autodecode enabled. -NO_AUTODECODE_MODULES= std/utf - -# Other D modules that aren't under std/ -EXTRA_MODULES_COMMON := $(addprefix etc/c/,curl odbc/sql odbc/sqlext \ - odbc/sqltypes odbc/sqlucode sqlite3 zlib) - -EXTRA_DOCUMENTABLES := $(EXTRA_MODULES_COMMON) - -EXTRA_MODULES_INTERNAL := $(addprefix std/, \ - algorithm/internal \ - $(addprefix internal/, \ - cstring memory digest/sha_SSSE3 \ - $(addprefix math/, biguintcore biguintnoasm biguintx86 \ - errorfunction gammafunction ) \ - scopebuffer test/dummyrange test/range \ - $(addprefix unicode_, comp decomp grapheme norm tables) \ - windows/advapi32 \ - ) \ - typetuple \ -) - -EXTRA_MODULES += $(EXTRA_DOCUMENTABLES) $(EXTRA_MODULES_INTERNAL) - -# Aggregate all D modules relevant to this build -D_MODULES = $(STD_MODULES) $(EXTRA_MODULES) - -# Add the .d suffix to the module names -D_FILES = $(addsuffix .d,$(D_MODULES)) -# Aggregate all D modules over all OSs (this is for the zip file) -ALL_D_FILES = $(addsuffix .d, $(STD_MODULES) $(EXTRA_MODULES_COMMON) \ - $(EXTRA_MODULES_LINUX) $(EXTRA_MODULES_OSX) $(EXTRA_MODULES_FREEBSD) \ - $(EXTRA_MODULES_WIN32) $(EXTRA_MODULES_INTERNAL)) - -# C files to be part of the build -C_MODULES = $(addprefix etc/c/zlib/, adler32 compress crc32 deflate \ - gzclose gzlib gzread gzwrite infback inffast inflate inftrees trees uncompr zutil) - -OBJS = $(addsuffix $(DOTOBJ),$(addprefix $(ROOT)/,$(C_MODULES))) - -MAKEFILE = $(firstword $(MAKEFILE_LIST)) - -# build with shared library support (defaults to true on supported platforms) -SHARED=$(if $(findstring $(OS),linux freebsd),1,) - -TESTS_EXTRACTOR=$(ROOT)/tests_extractor -PUBLICTESTS_DIR=$(ROOT)/publictests -BETTERCTESTS_DIR=$(ROOT)/betterctests - -################################################################################ -# Rules begin here -################################################################################ - -# Main target (builds the dll on linux, too) -ifeq (1,$(SHARED)) -all : lib dll -else -all : lib -endif - -ifneq (,$(findstring Darwin_64_32, $(PWD))) -install: - echo "Darwin_64_32_disabled" -else -install : - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=$(MODEL) BUILD=release INSTALL_DIR=$(INSTALL_DIR) \ - DMD=$(DMD) install2 -endif - -.PHONY : unittest -ifeq (1,$(BUILD_WAS_SPECIFIED)) -unittest : $(addsuffix .run,$(addprefix unittest/,$(D_MODULES))) -else -unittest : unittest-debug unittest-release -unittest-%: - $(MAKE) -f $(MAKEFILE) unittest OS=$(OS) MODEL=$(MODEL) DMD=$(DMD) BUILD=$* -endif - -################################################################################ -# Patterns begin here -################################################################################ - -.PHONY: lib dll -lib: $(LIB) -dll: $(ROOT)/libphobos2.so - -$(ROOT)/%$(DOTOBJ): %.c - @[ -d $(dir $@) ] || mkdir -p $(dir $@) || [ -d $(dir $@) ] - $(CC) -c $(CFLAGS) $< $(OUTFILEFLAG)$@ - -$(LIB): $(OBJS) $(ALL_D_FILES) $(DRUNTIME) - $(DMD) $(DFLAGS) -lib -of$@ $(DRUNTIME) $(D_FILES) $(OBJS) - -$(ROOT)/libphobos2.so: $(ROOT)/$(SONAME) - ln -sf $(notdir $(LIBSO)) $@ - -$(ROOT)/$(SONAME): $(LIBSO) - ln -sf $(notdir $(LIBSO)) $@ - -$(LIBSO): override PIC:=-fPIC -$(LIBSO): $(OBJS) $(ALL_D_FILES) $(DRUNTIMESO) - $(DMD) $(DFLAGS) -shared $(NODEFAULTLIB) -of$@ -L-soname=$(SONAME) $(DRUNTIMESO) $(LINKDL) $(D_FILES) $(OBJS) - -ifeq (osx,$(OS)) -# Build fat library that combines the 32 bit and the 64 bit libraries -libphobos2.a: $(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a -$(ROOT_OF_THEM_ALL)/osx/release/libphobos2.a: - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=32 BUILD=release - $(MAKE) -f $(MAKEFILE) OS=$(OS) MODEL=64 BUILD=release - lipo $(ROOT_OF_THEM_ALL)/osx/release/32/libphobos2.a \ - $(ROOT_OF_THEM_ALL)/osx/release/64/libphobos2.a \ - -create -output $@ -endif - -################################################################################ -# Unittests -################################################################################ - -DISABLED_TESTS = -ifeq ($(OS),freebsd) - ifeq ($(MODEL),32) - # Curl tests for FreeBSD 32-bit are temporarily disabled. - # https://github.com/braddr/d-tester/issues/70 - # https://issues.dlang.org/show_bug.cgi?id=18519 - DISABLED_TESTS += std/net/curl - endif -endif - -$(addsuffix .run,$(addprefix unittest/,$(DISABLED_TESTS))) : - @echo Testing $@ - disabled - -UT_D_OBJS:=$(addprefix $(ROOT)/unittest/,$(addsuffix $(DOTOBJ),$(D_MODULES))) -# need to recompile all unittest objects whenever sth. changes -$(UT_D_OBJS): $(ALL_D_FILES) -$(UT_D_OBJS): $(ROOT)/unittest/%$(DOTOBJ): %.d - @mkdir -p $(dir $@) - $(DMD) $(DFLAGS) $(UDFLAGS) -c -of$@ $< - -ifneq (1,$(SHARED)) - -$(UT_D_OBJS): $(DRUNTIME) - -$(ROOT)/unittest/test_runner: $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) - $(DMD) $(DFLAGS) $(UDFLAGS) -of$@ $(DRUNTIME_PATH)/src/test_runner.d $(UT_D_OBJS) $(OBJS) $(DRUNTIME) $(LINKDL) $(NODEFAULTLIB) - -else - -UT_LIBSO:=$(ROOT)/unittest/libphobos2-ut.so - -$(UT_D_OBJS): $(DRUNTIMESO) - -$(UT_LIBSO): override PIC:=-fPIC -$(UT_LIBSO): $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) - $(DMD) $(DFLAGS) -shared $(UDFLAGS) -of$@ $(UT_D_OBJS) $(OBJS) $(DRUNTIMESO) $(LINKDL) $(NODEFAULTLIB) - -$(ROOT)/unittest/test_runner: $(DRUNTIME_PATH)/src/test_runner.d $(UT_LIBSO) - $(DMD) $(DFLAGS) -of$@ $< -L$(UT_LIBSO) $(NODEFAULTLIB) - -endif - -# macro that returns the module name given the src path -moduleName=$(subst /,.,$(1)) - -# target for batch unittests (using shared phobos library and test_runner) -unittest/%.run : $(ROOT)/unittest/test_runner - $(QUIET)$(TIMELIMIT)$(RUN) $< $(call moduleName,$*) - -# Target for quickly running a single unittest (using static phobos library). -# For example: "make std/algorithm/mutation.test" -# The mktemp business is needed so .o files don't clash in concurrent unittesting. -%.test : %.d $(LIB) - T=`mktemp -d /tmp/.dmd-run-test.XXXXXX` && \ - ( \ - $(DMD) -od$$T $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) -cov=ctfe -run $< ; \ - RET=$$? ; rm -rf $$T ; exit $$RET \ - ) - -# Target for quickly unittesting all modules and packages within a package, -# transitively. For example: "make std/algorithm.test" -%.test : $(LIB) - $(MAKE) -f $(MAKEFILE) $(addsuffix .test,$(patsubst %.d,%,$(wildcard $*/*))) - -# Recursive target for %.debug -# It has to be recursive as %.debug depends on $(LIB) and we don't want to -# force the user to call make with BUILD=debug. -# Therefore we call %.debug_with_debugger and pass BUILD=debug from %.debug -# This forces all of phobos to have debug symbols, which we need as we don't -# know where debugging is leading us. -%.debug_with_debugger : %.d $(LIB) - $(DMD) $(DFLAGS) -main $(UDFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL) $< - $(DEBUGGER) ./$(basename $(notdir $<)) - -# Target for quickly debugging a single module -# For example: make -f posix.mak DEBUGGER=ddd std/format.debug -# ddd in this case is a graphical frontend to gdb -%.debug : %.d - BUILD=debug $(MAKE) -f $(MAKEFILE) $(basename $<).debug_with_debugger - -################################################################################ -# More stuff -################################################################################ - -# Disable implicit rule -%$(DOTEXE) : %$(DOTOBJ) - -%/.directory : - mkdir -p $* || exists $* - touch $@ - -clean : - rm -rf $(ROOT_OF_THEM_ALL) $(ZIPFILE) - -gitzip: - git archive --format=zip HEAD > $(ZIPFILE) - -zip : - -rm -f $(ZIPFILE) - zip -r $(ZIPFILE) . -x .git\* -x generated\* - -install2 : all - $(eval lib_dir=$(if $(filter $(OS),osx), lib, lib$(MODEL))) - mkdir -p $(INSTALL_DIR)/$(OS)/$(lib_dir) - cp $(LIB) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ -ifeq (1,$(SHARED)) - cp -P $(LIBSO) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ - cp -P $(ROOT)/$(SONAME) $(INSTALL_DIR)/$(OS)/$(lib_dir)/ - cp -P $(ROOT)/libphobos2.so $(INSTALL_DIR)/$(OS)/$(lib_dir)/ -endif - mkdir -p $(INSTALL_DIR)/src/phobos/etc - mkdir -p $(INSTALL_DIR)/src/phobos/std - cp -r std/* $(INSTALL_DIR)/src/phobos/std/ - cp -r etc/* $(INSTALL_DIR)/src/phobos/etc/ - cp LICENSE_1_0.txt $(INSTALL_DIR)/phobos-LICENSE.txt - -ifeq (1,$(CUSTOM_DRUNTIME)) -# We consider a custom-set DRUNTIME a sign they build druntime themselves -else -# This rule additionally produces $(DRUNTIMESO). Add a fake dependency -# to always invoke druntime's make. Use FORCE instead of .PHONY to -# avoid rebuilding phobos when $(DRUNTIME) didn't change. -$(DRUNTIME): FORCE - $(MAKE) -C $(DRUNTIME_PATH) -f posix.mak MODEL=$(MODEL) DMD=$(abspath $(DMD)) OS=$(OS) BUILD=$(BUILD) - -ifeq (,$(findstring win,$(OS))) -$(DRUNTIMESO): $(DRUNTIME) -endif - -FORCE: - -endif - -JSON = phobos.json -json : $(JSON) -$(JSON) : $(ALL_D_FILES) - $(DMD) $(DFLAGS) -o- -Xf$@ $^ - -########################################################### -# HTML documentation -# the following variables will be set by dlang.org: -# DOC_OUTPUT_DIR, STDDOC -########################################################### -SRC_DOCUMENTABLES = index.dd $(addsuffix .d,$(STD_MODULES) $(EXTRA_DOCUMENTABLES)) -# Set DDOC, the documentation generator -DDOC=$(DMD) -conf= $(MODEL_FLAG) -w -c -o- -version=StdDdoc \ - -I$(DRUNTIME_PATH)/import $(DMDEXTRAFLAGS) - -# D file to html, e.g. std/conv.d -> std_conv.html -# But "package.d" is special cased: std/range/package.d -> std_range.html -D2HTML=$(foreach p,$1,$(if $(subst package.d,,$(notdir $p)),$(subst /,_,$(subst .d,.html,$(subst .dd,.html,$p))),$(subst /,_,$(subst /package.d,.html,$p)))) - -HTMLS=$(addprefix $(DOC_OUTPUT_DIR)/, \ - $(call D2HTML, $(SRC_DOCUMENTABLES))) - -$(DOC_OUTPUT_DIR)/. : - mkdir -p $@ - -# For each module, define a rule e.g.: -# ../web/phobos/std_conv.html : std/conv.d $(STDDOC) ; ... -$(foreach p,$(SRC_DOCUMENTABLES),$(eval \ -$(DOC_OUTPUT_DIR)/$(call D2HTML,$p) : $p $(STDDOC) ;\ - $(DDOC) project.ddoc $(STDDOC) -Df$$@ $$<)) - -# this target is called by dlang.org -html : $(DOC_OUTPUT_DIR)/. $(HTMLS) - -build-html: - ${MAKE} -C $(DLANG_ORG_DIR) -f posix.mak phobos-prerelease - -################################################################################ -# Automatically create dlang/tools repository if non-existent -################################################################################ - -${TOOLS_DIR}: - git clone --depth=1 ${GIT_HOME}/$(@F) $@ - -$(TOOLS_DIR)/checkwhitespace.d: | $(TOOLS_DIR) -$(TOOLS_DIR)/tests_extractor.d: | $(TOOLS_DIR) - -#################### test for undesired white spaces ########################## -CWS_TOCHECK = posix.mak win32.mak win64.mak -CWS_TOCHECK += $(ALL_D_FILES) index.dd - -checkwhitespace: $(LIB) $(TOOLS_DIR)/checkwhitespace.d - $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -run $(TOOLS_DIR)/checkwhitespace.d $(CWS_TOCHECK) - -############################# -# Submission to Phobos are required to conform to the DStyle -# The tests below automate some, but not all parts of the DStyle guidelines. -# See also: http://dlang.org/dstyle.html -############################# - -$(DSCANNER_DIR): - git clone https://github.com/dlang-community/Dscanner $@ - git -C $@ checkout $(DSCANNER_HASH) - git -C $@ submodule update --init --recursive - -$(DSCANNER_DIR)/dsc: | $(DSCANNER_DIR) $(DMD) $(LIB) - # debug build is faster, but disable 'missing import' messages (missing core from druntime) - sed 's/dparse_verbose/StdLoggerDisableWarning/' $(DSCANNER_DIR)/makefile > $(DSCANNER_DIR)/dscanner_makefile_tmp - mv $(DSCANNER_DIR)/dscanner_makefile_tmp $(DSCANNER_DIR)/makefile - DC=$(abspath $(DMD)) DFLAGS="$(DFLAGS) -defaultlib=$(LIB)" $(MAKE) -C $(DSCANNER_DIR) githash debug - -style: style_lint publictests - -# runs static code analysis with Dscanner -dscanner: $(LIB) - @# The dscanner target is without dependencies to avoid constant rebuilds of Phobos (`make` always rebuilds order-only dependencies) - @# However, we still need to ensure that the DScanner binary is built once - @[ -f $(DSCANNER_DIR)/dsc ] || ${MAKE} -f posix.mak $(DSCANNER_DIR)/dsc - @echo "Running DScanner" - $(DSCANNER_DIR)/dsc --config .dscanner.ini -I $(DRUNTIME_PATH)/src/ --styleCheck etc std -I. - -style_lint_shellcmds: - @echo "Check for trailing whitespace" - grep -nr '[[:blank:]]$$' $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Enforce whitespace before opening parenthesis" - grep -nrE "\<(for|foreach|foreach_reverse|if|while|switch|catch|version)\(" $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce no whitespace after opening parenthesis" - grep -nrE "\<(version) \( " $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce whitespace between colon(:) for import statements (doesn't catch everything)" - grep -nr 'import [^/,=]*:.*;' $$(find etc std -name '*.d') | grep -vE "import ([^ ]+) :\s"; test $$? -eq 1 - - @echo "Check for package wide std.algorithm imports" - grep -nr 'import std.algorithm : ' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce Allman style" - grep -nrE '(if|for|foreach|foreach_reverse|while|unittest|switch|else|version) .*{$$' $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Enforce do { to be in Allman style" - grep -nr 'do *{$$' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce no space between assert and the opening brace, i.e. assert(" - grep -nrE 'assert +\(' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce space after cast(...)" - grep -nrE '[^"]cast\([^)]*?\)[[:alnum:]]' $$(find etc std -name '*.d') ; test $$? -eq 1 - - @echo "Enforce space between a .. b" - grep -nrE '[[:alnum:]][.][.][[:alnum:]]|[[:alnum:]] [.][.][[:alnum:]]|[[:alnum:]][.][.] [[:alnum:]]' $$(find etc std -name '*.d' | grep -vE 'std/string.d|std/uni/package.d') ; test $$? -eq 1 - - @echo "Enforce space between binary operators" - grep -nrE "[[:alnum:]](==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]] (==|!=|<=|<<|>>|>>>|^^)[[:alnum:]]|[[:alnum:]](==|!=|<=|<<|>>|>>>|^^) [[:alnum:]]" $$(find etc std -name '*.d'); test $$? -eq 1 - - @echo "Validate changelog files (Do _not_ use REF in the title!)" - @for file in $$(find changelog -name '*.dd') ; do \ - cat $$file | head -n1 | grep -nqE '\$$\((REF|LINK2|HTTP|MREF)' && \ - { echo "$$file: The title line can't contain links - it's already a link" && exit 1; } ;\ - cat $$file | head -n2 | tail -n1 | grep -q '^$$' || \ - { echo "$$file: After the title line an empty, separating line is expected" && exit 1; } ;\ - cat $$file | head -n3 | tail -n1 | grep -nqE '^.{1,}$$' || \ - { echo "$$file: The title is supposed to be followed by a long description" && exit 1; } ;\ - done - -style_lint: style_lint_shellcmds dscanner - @echo "Check that Ddoc runs without errors" - $(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -w -D -Df/dev/null -main -c -o- $$(find etc std -type f -name '*.d') 2>&1 - -################################################################################ -# Build the test extractor. -# - extracts and runs public unittest examples to checks for missing imports -# - extracts and runs @betterC unittests -################################################################################ - -$(TESTS_EXTRACTOR): $(TOOLS_DIR)/tests_extractor.d | $(LIB) - DFLAGS="$(DFLAGS) $(LIB) $(NODEFAULTLIB) $(LINKDL)" $(DUB) build --force --compiler=$${PWD}/$(DMD) --single $< - mv $(TOOLS_DIR)/tests_extractor $@ - -test_extractor: $(TESTS_EXTRACTOR) - -################################################################################ -# Extract public tests of a module and test them in an separate file (i.e. without its module) -# This is done to check for potentially missing imports in the examples, e.g. -# make -f posix.mak std/format.publictests -################################################################################ - -publictests: $(addsuffix .publictests,$(D_MODULES)) - -%.publictests: %.d $(LIB) $(TESTS_EXTRACTOR) | $(PUBLICTESTS_DIR)/.directory - @$(TESTS_EXTRACTOR) --inputdir $< --outputdir $(PUBLICTESTS_DIR) - @$(DMD) $(DFLAGS) $(NODEFAULTLIB) $(LIB) -main -unittest -run $(PUBLICTESTS_DIR)/$(subst /,_,$<) - -################################################################################ -# Check and run @betterC tests -# ---------------------------- -# -# Extract @betterC tests of a module and run them in -betterC -# -# make -f posix.mak std/format.betterc -################################################################################ - -betterc-phobos-tests: $(addsuffix .betterc,$(D_MODULES)) -betterc: betterc-phobos-tests - -%.betterc: %.d | $(BETTERCTESTS_DIR)/.directory - @# Due to the FORCE rule on druntime, make will always try to rebuild Phobos (even as an order-only dependency) - @# However, we still need to ensure that the test_extractor is built once - @[ -f "$(TESTS_EXTRACTOR)" ] || ${MAKE} -f posix.mak "$(TESTS_EXTRACTOR)" - $(TESTS_EXTRACTOR) --betterC --attributes betterC \ - --inputdir $< --outputdir $(BETTERCTESTS_DIR) - $(DMD) $(DFLAGS) $(NODEFAULTLIB) -betterC -unittest -run $(BETTERCTESTS_DIR)/$(subst /,_,$<) - - -################################################################################ -# Full-module BetterC tests -# ------------------------- -# -# Test full modules with -betterC. Edit BETTERC_MODULES and -# test/betterc_module_tests.d to add new modules to the list. -# -# make -f posix.mak betterc-module-tests -################################################################################ - -BETTERC_MODULES=std/sumtype - -betterc: betterc-module-tests - -betterc-module-tests: $(ROOT)/betterctests/betterc_module_tests - $(ROOT)/betterctests/betterc_module_tests - -$(ROOT)/betterctests/betterc_module_tests: test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) - $(DMD) $(DFLAGS) $(NODEFAULTLIB) -of=$(ROOT)/betterctests/betterc_module_tests -betterC -unittest test/betterc_module_tests.d $(addsuffix .d,$(BETTERC_MODULES)) - -################################################################################ - -.PHONY : auto-tester-build -auto-tester-build: - echo "Auto-Tester has been disabled" - -.PHONY : auto-tester-test -auto-tester-test: - echo "Auto-Tester has been disabled" - -.PHONY: buildkite-test -buildkite-test: unittest betterc - -.PHONY: autodecode-test -autodecode-test: $(addsuffix .test,$(NO_AUTODECODE_MODULES)) - -.DELETE_ON_ERROR: # GNU Make directive (delete output files on error) +%: + $(MAKE) -f Makefile $@ diff --git a/std/algorithm/comparison.d b/std/algorithm/comparison.d index 5ecb4f601a5..5c70960a711 100644 --- a/std/algorithm/comparison.d +++ b/std/algorithm/comparison.d @@ -577,19 +577,20 @@ Returns: and `T3` are different. */ T1 clamp(T1, T2, T3)(T1 val, T2 lower, T3 upper) -if (is(typeof(val.lessThan(lower) ? lower : val.greaterThan(upper) ? upper : val)) - && (is(T2 : T1) && is(T3 : T1))) -// cannot use : -// `if (is(typeof(val.lessThan(lower) ? lower : val.greaterThan(upper) ? upper : val) : T1)) -// because of https://issues.dlang.org/show_bug.cgi?id=16235. -// Once that is fixed, we can simply use the ternary in both the template constraint -// and the template body -in { + static assert(is(T2 : T1), "T2 of type '", T2.stringof + , "' must be implicitly convertible to type of T1 '" + , T1.stringof, "'"); + static assert(is(T3 : T1), "T3 of type '", T3.stringof + , "' must be implicitly convertible to type of T1 '" + , T1.stringof, "'"); + assert(!lower.greaterThan(upper), "Lower can't be greater than upper."); -} -do -{ + + // `if (is(typeof(val.lessThan(lower) ? lower : val.greaterThan(upper) ? upper : val) : T1)) + // because of https://issues.dlang.org/show_bug.cgi?id=16235. + // Once that is fixed, we can simply use the ternary in both the template constraint + // and the template body if (val.lessThan(lower)) return lower; else if (val.greaterThan(upper)) diff --git a/std/algorithm/iteration.d b/std/algorithm/iteration.d index 82360763adc..1453d2b64b9 100644 --- a/std/algorithm/iteration.d +++ b/std/algorithm/iteration.d @@ -2026,8 +2026,8 @@ private struct ChunkByGroup(alias eq, Range, bool eqEquivalenceAssured) } } - // Cannot be a copy constructor due to issue 22239 - this(this) @trusted + // Cannot be a copy constructor due to https://issues.dlang.org/show_bug.cgi?id=22239 + this(this) scope @trusted { import core.lifetime : emplace; // since mothership has to be in a union, we have to manually trigger @@ -2128,8 +2128,8 @@ if (isForwardRange!Range) }(); } - // Cannot be a copy constructor due to issue 22239 - this(this) @trusted + // Cannot be a copy constructor due to https://issues.dlang.org/show_bug.cgi?id=22239 + this(this) scope @trusted { import core.lifetime : emplace; // since _impl has to be in a union, we have to manually trigger @@ -2975,9 +2975,9 @@ auto joiner(RoR, Separator)(RoR r, Separator sep) static assert(isInputRange!(ElementType!RoR), "The ElementyType of RoR '" , ElementType!(RoR).stringof, "' must be an InputRange " , "(isInputRange!(ElementType!(", RoR.stringof , ")))."); - static assert(isForwardRange!Separator, "The type of the Seperator '" - , Seperator.stringof, "' must be a ForwardRange (isForwardRange!(" - , Seperator.stringof, "))."); + static assert(isForwardRange!Separator, "The type of the Separator '" + , Separator.stringof, "' must be a ForwardRange (isForwardRange!(" + , Separator.stringof, "))."); static assert(is(ElementType!Separator : ElementType!(ElementType!RoR)) , "The type of the elements of the separator range does not match " , "the type of the elements that are joined. Separator type '" @@ -3632,18 +3632,18 @@ auto joiner(RoR, Separator)(RoR r, Separator sep) /// Ditto auto joiner(RoR)(RoR r) -if (isInputRange!RoR && isInputRange!(ElementType!RoR)) +if (isInputRange!RoR && isInputRange!(Unqual!(ElementType!RoR))) { static struct Result { private: RoR _items; - ElementType!RoR _current; + Unqual!(ElementType!RoR) _current; enum isBidirectional = isForwardRange!RoR && isForwardRange!(ElementType!RoR) && isBidirectionalRange!RoR && isBidirectionalRange!(ElementType!RoR); static if (isBidirectional) { - ElementType!RoR _currentBack; + Unqual!(ElementType!RoR) _currentBack; bool reachedFinalElement; } @@ -4293,6 +4293,28 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR)) assert([only(S(null))].joiner.front == S(null)); } +// https://issues.dlang.org/show_bug.cgi?id=22785 +@safe unittest +{ + + import std.algorithm.iteration : joiner, map; + import std.array : array; + + static immutable struct S + { + int value; + } + + static immutable struct T + { + S[] arr; + } + + auto range = [T([S(3)]), T([S(4), S(5)])]; + + assert(range.map!"a.arr".joiner.array == [S(3), S(4), S(5)]); +} + /++ Implements the homonym function (also known as `accumulate`, $(D compress), `inject`, or `foldl`) present in various programming @@ -4787,26 +4809,41 @@ private template ReduceSeedType(E) /++ Implements the homonym function (also known as `accumulate`, $(D compress), `inject`, or `foldl`) present in various programming -languages of functional flavor. The call `fold!(fun)(range, seed)` -first assigns `seed` to an internal variable `result`, -also called the accumulator. Then, for each element `x` in $(D -range), `result = fun(result, x)` gets evaluated. Finally, $(D -result) is returned. The one-argument version `fold!(fun)(range)` +languages of functional flavor, iteratively calling one or more predicates. + +$(P Each predicate in `fun` must take two arguments:) +* An accumulator value +* An element of the range `r` +$(P Each predicate must return a value which implicitly converts to the +type of the accumulator.) + +$(P For a single predicate, +the call `fold!(fun)(range, seed)` will:) + +* Use `seed` to initialize an internal variable `result` (also called + the accumulator). +* For each element `e` in $(D range), evaluate `result = fun(result, e)`. +* Return $(D result). + +$(P The one-argument version `fold!(fun)(range)` works similarly, but it uses the first element of the range as the -seed (the range must be non-empty). +seed (the range must be non-empty) and iterates over the remaining +elements.) + +Multiple results are produced when using multiple predicates. Params: fun = the predicate function(s) to apply to the elements See_Also: - $(HTTP en.wikipedia.org/wiki/Fold_(higher-order_function), Fold (higher-order function)) + * $(HTTP en.wikipedia.org/wiki/Fold_(higher-order_function), Fold (higher-order function)) - $(LREF sum) is similar to `fold!((a, b) => a + b)` that offers - precise summing of floating point numbers. + * $(LREF sum) is similar to `fold!((a, b) => a + b)` that offers + precise summing of floating point numbers. - This is functionally equivalent to $(LREF reduce) with the argument order - reversed, and without the need to use $(REF_ALTTEXT `tuple`,tuple,std,typecons) - for multiple seeds. + * `fold` is functionally equivalent to $(LREF reduce) with the argument order + reversed, and without the need to use $(REF_ALTTEXT `tuple`,tuple,std,typecons) + for multiple seeds. +/ template fold(fun...) if (fun.length >= 1) @@ -4814,20 +4851,21 @@ if (fun.length >= 1) /** Params: r = the $(REF_ALTTEXT input range, isInputRange, std,range,primitives) to fold - seed = the initial value of the accumulator + seeds = the initial values of each accumulator (optional), one for each predicate Returns: - the accumulated `result` + Either the accumulated result for a single predicate, or a + $(REF_ALTTEXT `Tuple`,Tuple,std,typecons) of results. */ - auto fold(R, S...)(R r, S seed) + auto fold(R, S...)(R r, S seeds) { static if (S.length < 2) { - return reduce!fun(seed, r); + return reduce!fun(seeds, r); } else { import std.typecons : tuple; - return reduce!fun(tuple(seed), r); + return reduce!fun(tuple(seeds), r); } } } @@ -4838,10 +4876,10 @@ if (fun.length >= 1) immutable arr = [1, 2, 3, 4, 5]; // Sum all elements - assert(arr.fold!((a, b) => a + b) == 15); + assert(arr.fold!((a, e) => a + e) == 15); // Sum all elements with explicit seed - assert(arr.fold!((a, b) => a + b)(6) == 21); + assert(arr.fold!((a, e) => a + e)(6) == 21); import std.algorithm.comparison : min, max; import std.typecons : tuple; @@ -4853,10 +4891,10 @@ if (fun.length >= 1) assert(arr.fold!(min, max)(0, 7) == tuple(0, 7)); // Can be used in a UFCS chain - assert(arr.map!(a => a + 1).fold!((a, b) => a + b) == 20); + assert(arr.map!(a => a + 1).fold!((a, e) => a + e) == 20); // Return the last element of any range - assert(arr.fold!((a, b) => b) == 5); + assert(arr.fold!((a, e) => e) == 5); } @safe @nogc pure nothrow unittest @@ -7917,15 +7955,23 @@ See_Also: $(REF nextPermutation, std,algorithm,sorting). */ Permutations!Range permutations(Range)(Range r) -if (isRandomAccessRange!Range && hasLength!Range) { + static assert(isRandomAccessRange!Range, Range.stringof, + " must be a RandomAccessRange"); + static assert(hasLength!Range, Range.stringof + , " must have a length"); + return typeof(return)(r); } /// ditto struct Permutations(Range) -if (isRandomAccessRange!Range && hasLength!Range) { + static assert(isRandomAccessRange!Range, Range.stringof, + " must be a RandomAccessRange"); + static assert(hasLength!Range, Range.stringof + , " must have a length"); + private size_t[] _indices, _state; private Range _r; private bool _empty; diff --git a/std/algorithm/mutation.d b/std/algorithm/mutation.d index 9b1d9207b9a..ea1a1b290dc 100644 --- a/std/algorithm/mutation.d +++ b/std/algorithm/mutation.d @@ -1071,10 +1071,20 @@ Params: copy is performed. */ void move(T)(ref T source, ref T target) +if (__traits(compiles, target = T.init)) { moveImpl(target, source); } +/// ditto +template move(T) +if (!__traits(compiles, imported!"std.traits".lvalueOf!T = T.init)) +{ + /// + deprecated("Can't move into `target` as `" ~ T.stringof ~ "` can't be assigned") + void move(ref T source, ref T target) => moveImpl(target, source); +} + /// For non-struct types, `move` just performs `target = source`: @safe unittest { @@ -1184,6 +1194,19 @@ pure nothrow @safe @nogc unittest assert(s53 is s51); } +@system unittest +{ + static struct S + { + immutable int i; + ~this() @safe {} + } + alias ol = __traits(getOverloads, std.algorithm.mutation, "move", true)[1]; + static assert(__traits(isDeprecated, ol!S)); + // uncomment after deprecation + //static assert(!__traits(compiles, { S a, b; move(a, b); })); +} + /// Ditto T move(T)(return scope ref T source) { @@ -1813,22 +1836,28 @@ range. For example, here is how to remove a single element from an array: +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation; string[] a = [ "a", "b", "c", "d" ]; a = a.remove(1); // remove element at offset 1 assert(a == [ "a", "c", "d"]); ---- +) Note that `remove` does not change the length of the original range directly; instead, it returns the shortened range. If its return value is not assigned to the original range, the original range will retain its original length, though its contents will have changed: +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation; int[] a = [ 3, 5, 7, 8 ]; assert(remove(a, 1) == [ 3, 7, 8 ]); assert(a == [ 3, 7, 8, 8 ]); ---- +) The element at offset `1` has been removed and the rest of the elements have shifted up to fill its place, however, the original array remains of the same @@ -1838,25 +1867,34 @@ invoked to rearrange elements, and on integers `move` simply copies the source to the destination. To replace `a` with the effect of the removal, simply assign the slice returned by `remove` to it, as shown in the first example. +$(H3 $(LNAME2 remove-multiple, Removing multiple elements)) + Multiple indices can be passed into `remove`. In that case, elements at the respective indices are all removed. The indices must be passed in increasing order, otherwise an exception occurs. +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation; int[] a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; assert(remove(a, 1, 3, 5) == [ 0, 2, 4, 6, 7, 8, 9, 10 ]); ---- +) -(Note that all indices refer to slots in the $(I original) array, not -in the array as it is being progressively shortened.) +Note that all indices refer to slots in the $(I original) array, not +in the array as it is being progressively shortened. -Tuples of two integral offsets can be used to remove an indices range: +Tuples of two integral offsets can be supplied to remove a range of indices: +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation, std.typecons; int[] a = [ 3, 4, 5, 6, 7]; -assert(remove(a, 1, tuple(1, 3), 9) == [ 3, 6, 7 ]); +// remove elements at indices 1 and 2 +assert(remove(a, tuple(1, 3)) == [ 3, 6, 7 ]); ---- +) The tuple passes in a range closed to the left and open to the right (consistent with built-in slices), e.g. `tuple(1, 3)` @@ -1865,22 +1903,31 @@ means indices `1` and `2` but not `3`. Finally, any combination of integral offsets and tuples composed of two integral offsets can be passed in: +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation, std.typecons; int[] a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; -assert(remove(a, 1, tuple(3, 5), 9) == [ 0, 2, 5, 6, 7, 8, 10 ]); +a = remove(a, 1, tuple(3, 5), 9); +assert(a == [ 0, 2, 5, 6, 7, 8, 10 ]); ---- +) In this case, the slots at positions 1, 3, 4, and 9 are removed from the array. +$(H3 $(LNAME2 remove-moving, Moving strategy)) + If the need is to remove some elements in the range but the order of the remaining elements does not have to be preserved, you may want to pass `SwapStrategy.unstable` to `remove`. +$(RUNNABLE_EXAMPLE ---- +import std.algorithm.mutation; int[] a = [ 0, 1, 2, 3 ]; assert(remove!(SwapStrategy.unstable)(a, 1) == [ 0, 3, 2 ]); ---- +) In the case above, the element at slot `1` is removed, but replaced with the last element of the range. Taking advantage of the relaxation @@ -1888,7 +1935,7 @@ of the stability requirement, `remove` moved elements from the end of the array over the slots to be removed. This way there is less data movement to be done which improves the execution time of the function. -The function `remove` works on bidirectional ranges that have assignable +`remove` works on bidirectional ranges that have assignable lvalue elements. The moving strategy is (listed from fastest to slowest): $(UL @@ -1914,7 +1961,7 @@ Params: offset = which element(s) to remove Returns: - A range containing all of the elements of range with offset removed. + A range containing elements of `range` with 1 or more elements removed. */ Range remove (SwapStrategy s = SwapStrategy.stable, Range, Offset ...) @@ -2813,6 +2860,13 @@ Params: lhs = Data to be swapped with `rhs`. rhs = Data to be swapped with `lhs`. */ +void swap(T)(ref T lhs, ref T rhs) +if (is(typeof(lhs.proxySwap(rhs)))) +{ + lhs.proxySwap(rhs); +} + +/// ditto void swap(T)(ref T lhs, ref T rhs) @trusted pure nothrow @nogc if (isBlitAssignable!T && !is(typeof(lhs.proxySwap(rhs)))) { @@ -3049,7 +3103,7 @@ if (isBlitAssignable!T && !is(typeof(lhs.proxySwap(rhs)))) swap(b1, b2); } -// issue 20732 +// https://issues.dlang.org/show_bug.cgi?id=20732 @safe unittest { static struct A @@ -3074,13 +3128,6 @@ if (isBlitAssignable!T && !is(typeof(lhs.proxySwap(rhs)))) swap(a3, a4); } -/// ditto -void swap(T)(ref T lhs, ref T rhs) -if (is(typeof(lhs.proxySwap(rhs)))) -{ - lhs.proxySwap(rhs); -} - /** Swaps two elements in-place of a range `r`, specified by their indices `i1` and `i2`. diff --git a/std/algorithm/searching.d b/std/algorithm/searching.d index 0b73a0cd04d..7eb1312b6df 100644 --- a/std/algorithm/searching.d +++ b/std/algorithm/searching.d @@ -22,8 +22,9 @@ $(T2 boyerMooreFinder, $(T2 canFind, `canFind("hello world", "or")` returns `true`.) $(T2 count, - Counts elements that are equal to a specified value or satisfy a - predicate. `count([1, 2, 1], 1)` returns `2` and + Counts all elements or elements matching a predicate, specific element or sub-range.$(BR) + `count([1, 2, 1])` returns `3`, + `count([1, 2, 1], 1)` returns `2` and `count!"a < 0"([1, -3, 0])` returns `1`.) $(T2 countUntil, `countUntil(a, b)` returns the number of steps taken in `a` to @@ -120,12 +121,9 @@ template all(alias pred = "a") Performs (at most) $(BIGOH range.length) evaluations of `pred`. +/ bool all(Range)(Range range) - if (isInputRange!Range) + if (isInputRange!Range && + (__traits(isTemplate, pred) || is(typeof(unaryFun!pred(range.front))))) { - static assert(is(typeof(unaryFun!pred(range.front))), - "`" ~ (isSomeString!(typeof(pred)) - ? pred.stringof[1..$-1] : pred.stringof) - ~ "` isn't a unary predicate function for range.front"); import std.functional : not; return find!(not!(unaryFun!pred))(range).empty; @@ -173,7 +171,8 @@ template any(alias pred = "a") Performs (at most) $(BIGOH range.length) evaluations of `pred`. +/ bool any(Range)(Range range) - if (isInputRange!Range && is(typeof(unaryFun!pred(range.front)))) + if (isInputRange!Range && + (__traits(isTemplate, pred) || is(typeof(unaryFun!pred(range.front))))) { return !find!pred(range).empty; } @@ -608,34 +607,29 @@ if (isNarrowString!R1 && isNarrowString!R2) // count /** -The first version counts the number of elements `x` in `r` for -which `pred(x, value)` is `true`. `pred` defaults to +Counts matches of `needle` in `haystack`. + +The first overload counts each element `e` in `haystack` for +which `pred(e, needle)` is `true`. `pred` defaults to equality. Performs $(BIGOH haystack.length) evaluations of `pred`. -The second version returns the number of times `needle` occurs in -`haystack`. Throws an exception if `needle.empty`, as the _count +The second overload counts the number of times `needle` was matched in +`haystack`. `pred` compares elements in each range. +Throws an exception if `needle.empty` is `true`, as the _count of the empty range in any range would be infinite. Overlapped counts -are not considered, for example `count("aaa", "aa")` is `1`, not +are *not* considered, for example `count("aaa", "aa")` is `1`, not `2`. -The third version counts the elements for which `pred(x)` is $(D -true). Performs $(BIGOH haystack.length) evaluations of `pred`. - -The fourth version counts the number of elements in a range. It is -an optimization for the third version: if the given range has the -`length` property the count is returned right away, otherwise -performs $(BIGOH haystack.length) to walk the range. - Note: Regardless of the overload, `count` will not accept infinite ranges for `haystack`. Params: - pred = The predicate to evaluate. + pred = The predicate to compare elements. haystack = The range to _count. - needle = The element or sub-range to _count in the `haystack`. + needle = The element or sub-range to _count in `haystack`. Returns: - The number of positions in the `haystack` for which `pred` returned true. + The number of matches in `haystack`. */ size_t count(alias pred = "a == b", Range, E)(Range haystack, E needle) if (isInputRange!Range && !isInfinite!Range && @@ -648,21 +642,22 @@ if (isInputRange!Range && !isInfinite!Range && /// @safe unittest { - import std.uni : toLower; - // count elements in range int[] a = [ 1, 2, 4, 3, 2, 5, 3, 2, 4 ]; - assert(count(a) == 9); assert(count(a, 2) == 3); assert(count!("a > b")(a, 2) == 5); +} + +/// +@safe unittest +{ + import std.uni : toLower; // count range in range assert(count("abcadfabf", "ab") == 2); assert(count("ababab", "abab") == 1); assert(count("ababab", "abx") == 0); // fuzzy count range in range assert(count!((a, b) => toLower(a) == toLower(b))("AbcAdFaBf", "ab") == 2); - // count predicate in range - assert(count!("a > 1")(a) == 8); } @safe unittest @@ -714,7 +709,24 @@ if (isForwardRange!R1 && !isInfinite!R1 && } } -/// Ditto +/** +Counts all elements or elements satisfying a predicate in `haystack`. + +The first overload counts each element `e` in `haystack` for which `pred(e)` is $(D +true). Performs $(BIGOH haystack.length) evaluations of `pred`. + +The second overload counts the number of elements in a range. +If the given range has the `length` property, +that is returned right away, otherwise +performs $(BIGOH haystack.length) to walk the range. + +Params: + pred = Optional predicate to find elements. + haystack = The range to _count. + +Returns: + The number of elements in `haystack` (for which `pred` returned true). +*/ size_t count(alias pred, R)(R haystack) if (isInputRange!R && !isInfinite!R && is(typeof(unaryFun!pred(haystack.front)))) @@ -726,6 +738,16 @@ if (isInputRange!R && !isInfinite!R && return result; } +/// +@safe unittest +{ + // count elements in range + int[] a = [ 1, 2, 4, 3, 2, 5, 3, 2, 4 ]; + assert(count(a) == 9); + // count predicate in range + assert(count!("a > 2")(a) == 5); +} + /// Ditto size_t count(R)(R haystack) if (isInputRange!R && !isInfinite!R) @@ -1285,7 +1307,7 @@ if (isInputRange!R && @safe pure unittest { - //example from issue 19727 + //example from https://issues.dlang.org/show_bug.cgi?id=19727 import std.path : asRelativePath; string[] ext = ["abc", "def", "ghi"]; string path = "/foo/file.def"; @@ -1295,17 +1317,6 @@ if (isInputRange!R && private enum bool hasConstEmptyMember(T) = is(typeof(((const T* a) => (*a).empty)(null)) : bool); -// Rebindable doesn't work with structs -// see: https://github.com/dlang/phobos/pull/6136 -private template RebindableOrUnqual(T) -{ - import std.typecons : Rebindable; - static if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArray!T) - alias RebindableOrUnqual = Rebindable!T; - else - alias RebindableOrUnqual = Unqual!T; -} - /** Iterates the passed range and selects the extreme element with `less`. If the extreme element occurs multiple time, the first occurrence will be @@ -1314,8 +1325,8 @@ returned. Params: map = custom accessor for the comparison key selector = custom mapping for the extrema selection - seed = custom seed to use as initial element r = Range from which the extreme value will be selected + seedElement = custom seed to use as initial element Returns: The extreme value according to `map` and `selector` of the passed-in values. @@ -1329,10 +1340,12 @@ in } do { + import std.typecons : Rebindable2; + alias Element = ElementType!Range; - RebindableOrUnqual!Element seed = r.front; + auto seed = Rebindable2!Element(r.front); r.popFront(); - return extremum!(map, selector)(r, seed); + return extremum!(map, selector)(r, seed.get); } private auto extremum(alias map, alias selector = "a < b", Range, @@ -1342,24 +1355,24 @@ if (isInputRange!Range && !isInfinite!Range && !is(CommonType!(ElementType!Range, RangeElementType) == void) && is(typeof(unaryFun!map(ElementType!(Range).init)))) { + import std.typecons : Rebindable2; + alias mapFun = unaryFun!map; alias selectorFun = binaryFun!selector; alias Element = ElementType!Range; alias CommonElement = CommonType!(Element, RangeElementType); - RebindableOrUnqual!CommonElement extremeElement = seedElement; - + auto extremeElement = Rebindable2!CommonElement(seedElement); // if we only have one statement in the loop, it can be optimized a lot better static if (__traits(isSame, map, a => a)) { - // direct access via a random access range is faster static if (isRandomAccessRange!Range) { foreach (const i; 0 .. r.length) { - if (selectorFun(r[i], extremeElement)) + if (selectorFun(r[i], extremeElement.get)) { extremeElement = r[i]; } @@ -1369,7 +1382,7 @@ if (isInputRange!Range && !isInfinite!Range && { while (!r.empty) { - if (selectorFun(r.front, extremeElement)) + if (selectorFun(r.front, extremeElement.get)) { extremeElement = r.front; } @@ -1380,7 +1393,7 @@ if (isInputRange!Range && !isInfinite!Range && else { alias MapType = Unqual!(typeof(mapFun(CommonElement.init))); - MapType extremeElementMapped = mapFun(extremeElement); + MapType extremeElementMapped = mapFun(extremeElement.get); // direct access via a random access range is faster static if (isRandomAccessRange!Range) @@ -1409,7 +1422,7 @@ if (isInputRange!Range && !isInfinite!Range && } } } - return extremeElement; + return extremeElement.get; } private auto extremum(alias selector = "a < b", Range)(Range r) @@ -1494,6 +1507,10 @@ if (isInputRange!Range && !isInfinite!Range && assert(d.extremum!`a > b` == 10); assert(d.extremum!(a => a, `a > b`) == 10); } + + // compiletime + enum ctExtremum = iota(1, 5).extremum; + assert(ctExtremum == 1); } @nogc @safe nothrow pure unittest @@ -1525,55 +1542,146 @@ if (isInputRange!Range && !isInfinite!Range && assert(arr.extremum!"a.val".val == 0); } +// https://issues.dlang.org/show_bug.cgi?id=22786 +@nogc @safe nothrow pure unittest +{ + struct S + { + immutable int value; + } + + assert([S(5), S(6)].extremum!"a.value" == S(5)); +} + +// https://issues.dlang.org/show_bug.cgi?id=24027 +@safe nothrow unittest +{ + class A + { + int a; + this(int a) + { + this.a = a; + } + } + + auto test = new A(5); + A[] arr = [test]; + assert(maxElement!"a.a"(arr) is test); +} + // find +/** +Finds an element `e` of an $(REF_ALTTEXT input range, isInputRange, std,range,primitives) +where `pred(e)` is `true`. +$(P +$(PANEL +$(UL +$(LI `find` behaves similarly to `dropWhile` in other languages.) +$(LI To _find the *last* matching element in a +$(REF_ALTTEXT bidirectional, isBidirectionalRange, std,range,primitives) `haystack`, +call `find!pred(retro(haystack))`. See $(REF retro, std,range).) +))) + +Complexity: + `find` performs $(BIGOH walkLength(haystack)) evaluations of `pred`. + +Params: + + pred = The predicate to match an element. + haystack = The $(REF_ALTTEXT input range, isInputRange, std,range,primitives) + searched in. + +Returns: + `haystack` advanced such that the front element satisfies `pred`. + If no such element exists, returns an empty `haystack`. +*/ +InputRange find(alias pred, InputRange)(InputRange haystack) +if (isInputRange!InputRange) +{ + alias R = InputRange; + alias predFun = unaryFun!pred; + static if (isNarrowString!R) + { + import std.utf : decode; + + immutable len = haystack.length; + size_t i = 0, next = 0; + while (next < len) + { + if (predFun(decode(haystack, next))) + return haystack[i .. $]; + i = next; + } + return haystack[$ .. $]; + } + else + { + //standard range + for ( ; !haystack.empty; haystack.popFront() ) + { + if (predFun(haystack.front)) + break; + } + return haystack; + } +} + +/// +@safe unittest +{ + auto arr = [ 1, 2, 3, 4, 1 ]; + assert(find!("a > 2")(arr) == [ 3, 4, 1 ]); + + // with predicate alias + bool pred(int e) => e + 1 > 1.5; + assert(find!(pred)(arr) == arr); +} + +@safe pure unittest +{ + int[] r = [ 1, 2, 3 ]; + assert(find!(a=>a > 2)(r) == [3]); + bool pred(int x) { return x + 1 > 1.5; } + assert(find!(pred)(r) == r); + + assert(find!(a=>a > 'v')("hello world") == "world"); + assert(find!(a=>a%4 == 0)("日本語") == "本語"); +} + /** Finds an individual element in an $(REF_ALTTEXT input range, isInputRange, std,range,primitives). Elements of `haystack` are compared with `needle` by using predicate `pred` with `pred(haystack.front, needle)`. -`find` performs $(BIGOH walkLength(haystack)) evaluations of `pred`. - The predicate is passed to $(REF binaryFun, std, functional), and can either accept a string, or any callable that can be executed via `pred(element, element)`. -To _find the last occurrence of `needle` in a -$(REF_ALTTEXT bidirectional, isBidirectionalRange, std,range,primitives) `haystack`, -call `find(retro(haystack), needle)`. See $(REF retro, std,range). - -If no `needle` is provided, `pred(haystack.front)` will be evaluated on each -element of the input range. - -If `input` is a $(REF_ALTTEXT forward range, isForwardRange, std,range,primitives), +If `haystack` is a $(REF_ALTTEXT forward range, isForwardRange, std,range,primitives), `needle` can be a $(REF_ALTTEXT forward range, isForwardRange, std,range,primitives) too. In this case `startsWith!pred(haystack, needle)` is evaluated on each evaluation. -Note: - `find` behaves similar to `dropWhile` in other languages. +$(NOTE To find the first element $(I not) matching the needle, use predicate `"a != b"`.) Complexity: `find` performs $(BIGOH walkLength(haystack)) evaluations of `pred`. There are specializations that improve performance by taking advantage of $(REF_ALTTEXT bidirectional, isBidirectionalRange, std,range,primitives) - or $(REF_ALTTEXT random access, isRandomAccess, std,range,primitives) + or $(REF_ALTTEXT random access, isRandomAccessRange, std,range,primitives) ranges (where possible). Params: pred = The predicate for comparing each element with the needle, defaulting to equality `"a == b"`. - The negated predicate `"a != b"` can be used to search instead for the first - element $(I not) matching the needle. - haystack = The $(REF_ALTTEXT input range, isInputRange, std,range,primitives) searched in. - needle = The element searched for. Returns: - `haystack` advanced such that the front element is the one searched for; that is, until `binaryFun!pred(haystack.front, needle)` is `true`. If no such position exists, returns an empty `haystack`. -See_ALso: $(LREF findAdjacent), $(LREF findAmong), $(LREF findSkip), $(LREF findSplit), $(LREF startsWith) +See_Also: $(LREF findAdjacent), $(LREF findAmong), $(LREF findSkip), $(LREF findSplit), $(LREF startsWith) */ InputRange find(alias pred = "a == b", InputRange, Element)(InputRange haystack, scope Element needle) if (isInputRange!InputRange && @@ -1734,8 +1842,8 @@ if (isInputRange!InputRange && assert(arr.find(4) == [4, 4, 4, 4, 5, 6, 9]); assert(arr.find(1) == arr); assert(arr.find(9) == [9]); - assert(arr.find!((a, b) => a > b)(4) == [5, 6, 9]); - assert(arr.find!((a, b) => a < b)(4) == arr); + assert(arr.find!((e, n) => e > n)(4) == [5, 6, 9]); + assert(arr.find!((e, n) => e < n)(4) == arr); assert(arr.find(0).empty); assert(arr.find(10).empty); assert(arr.find(8).empty); @@ -1750,7 +1858,7 @@ if (isInputRange!InputRange && import std.uni : toLower; string[] s = ["Hello", "world", "!"]; - assert(s.find!((a, b) => toLower(a) == b)("hello") == s); + assert(s.find!((e, n) => toLower(e) == n)("hello") == s); } @safe unittest @@ -1842,60 +1950,6 @@ if (isInputRange!InputRange && assert([x].find(x).empty == false); } -/// ditto -InputRange find(alias pred, InputRange)(InputRange haystack) -if (isInputRange!InputRange) -{ - alias R = InputRange; - alias predFun = unaryFun!pred; - static if (isNarrowString!R) - { - import std.utf : decode; - - immutable len = haystack.length; - size_t i = 0, next = 0; - while (next < len) - { - if (predFun(decode(haystack, next))) - return haystack[i .. $]; - i = next; - } - return haystack[$ .. $]; - } - else - { - //standard range - for ( ; !haystack.empty; haystack.popFront() ) - { - if (predFun(haystack.front)) - break; - } - return haystack; - } -} - -/// -@safe unittest -{ - auto arr = [ 1, 2, 3, 4, 1 ]; - assert(find!("a > 2")(arr) == [ 3, 4, 1 ]); - - // with predicate alias - bool pred(int x) { return x + 1 > 1.5; } - assert(find!(pred)(arr) == arr); -} - -@safe pure unittest -{ - int[] r = [ 1, 2, 3 ]; - assert(find!(a=>a > 2)(r) == [3]); - bool pred(int x) { return x + 1 > 1.5; } - assert(find!(pred)(r) == r); - - assert(find!(a=>a > 'v')("hello world") == "world"); - assert(find!(a=>a%4 == 0)("日本語") == "本語"); -} - /// ditto R1 find(alias pred = "a == b", R1, R2)(R1 haystack, scope R2 needle) if (isForwardRange!R1 && isForwardRange!R2 @@ -2290,7 +2344,7 @@ private R1 simpleMindedFind(alias pred, R1, R2)(R1 haystack, scope R2 needle) @safe: string _impl; - // This is what triggers issue 7992. + // This is what triggers https://issues.dlang.org/show_bug.cgi?id=7992. @property size_t length() const { return _impl.length; } @property void length(size_t len) { _impl.length = len; } @@ -2303,7 +2357,7 @@ private R1 simpleMindedFind(alias pred, R1, R2)(R1 haystack, scope R2 needle) @property CustomString save() { return this; } } - // If issue 7992 occurs, this will throw an exception from calling + // If https://issues.dlang.org/show_bug.cgi?id=7992 occurs, this will throw an exception from calling // popFront() on an empty range. auto r = find(CustomString("a"), CustomString("b")); assert(r.empty); @@ -2356,9 +2410,9 @@ is considered to be 1.) The strategy used in searching several subranges at once maximizes cache usage by moving in `haystack` as few times as possible. */ -Tuple!(Range, size_t) find(alias pred = "a == b", Range, Ranges...) -(Range haystack, Ranges needles) -if (Ranges.length > 1 && is(typeof(startsWith!pred(haystack, needles)))) +Tuple!(Range, size_t) find(alias pred = "a == b", Range, Needles...) +(Range haystack, Needles needles) +if (Needles.length > 1 && is(typeof(startsWith!pred(haystack, needles)))) { for (;; haystack.popFront()) { @@ -2516,13 +2570,13 @@ was successful. For more information about `pred` see $(LREF find). See_Also: -$(REF among, std,algorithm,comparison) for checking a value against multiple possibilities. +$(REF among, std,algorithm,comparison) for checking a value against multiple arguments. +/ template canFind(alias pred="a == b") { /++ - Returns `true` if and only if any value `v` found in the - input range `range` satisfies the predicate `pred`. + Returns `true` if and only if `pred(e)` is true for any value `e` in the + input range `range`. Performs (at most) $(BIGOH haystack.length) evaluations of `pred`. +/ bool canFind(Range)(Range haystack) @@ -2545,16 +2599,15 @@ template canFind(alias pred="a == b") Returns the 1-based index of the first needle found in `haystack`. If no needle is found, then `0` is returned. - So, if used directly in the condition of an if statement or loop, the result + So, if used directly in the condition of an `if` statement or loop, the result will be `true` if one of the needles is found and `false` if none are found, whereas if the result is used elsewhere, it can either be cast to `bool` for the same effect or used to get which needle was found first - without having to deal with the tuple that `LREF find` returns for the + without having to deal with the tuple that $(LREF find) returns for the same operation. +/ - size_t canFind(Range, Ranges...)(Range haystack, scope Ranges needles) - if (Ranges.length > 1 && - allSatisfy!(isForwardRange, Ranges) && + size_t canFind(Range, Needles...)(Range haystack, scope Needles needles) + if (Needles.length > 1 && is(typeof(find!pred(haystack, needles)))) { return find!pred(haystack, needles)[1]; @@ -2564,15 +2617,21 @@ template canFind(alias pred="a == b") /// @safe unittest { - assert(canFind([0, 1, 2, 3], 2) == true); - assert(canFind([0, 1, 2, 3], [1, 2], [2, 3])); - assert(canFind([0, 1, 2, 3], [1, 2], [2, 3]) == 1); - assert(canFind([0, 1, 2, 3], [1, 7], [2, 3])); - assert(canFind([0, 1, 2, 3], [1, 7], [2, 3]) == 2); + const arr = [0, 1, 2, 3]; + assert(canFind(arr, 2)); + assert(!canFind(arr, 4)); + + // find one of several needles + assert(arr.canFind(3, 2)); + assert(arr.canFind(3, 2) == 2); // second needle found + assert(arr.canFind([1, 3], 2) == 2); - assert(canFind([0, 1, 2, 3], 4) == false); - assert(!canFind([0, 1, 2, 3], [1, 3], [2, 4])); - assert(canFind([0, 1, 2, 3], [1, 3], [2, 4]) == 0); + assert(canFind(arr, [1, 2], [2, 3])); + assert(canFind(arr, [1, 2], [2, 3]) == 1); + assert(canFind(arr, [1, 7], [2, 3])); + assert(canFind(arr, [1, 7], [2, 3]) == 2); + assert(!canFind(arr, [1, 3], [2, 4])); + assert(canFind(arr, [1, 3], [2, 4]) == 0); } /** @@ -2587,10 +2646,10 @@ template canFind(alias pred="a == b") "cardboard" ]; assert(!canFind(words, "bees")); - assert( canFind!((string a, string b) => a.startsWith(b))(words, "bees")); + assert( canFind!((string elem, string needle) => elem.startsWith(needle))(words, "bees")); } -/// Search for mutliple items in an array of items (search for needles in an array of hay stacks) +/// Search for multiple items in an array of items (search for needles in an array of haystacks) @safe unittest { string s1 = "aaa111aaa"; @@ -2598,7 +2657,7 @@ template canFind(alias pred="a == b") string s3 = "aaa333aaa"; string s4 = "aaa444aaa"; const hay = [s1, s2, s3, s4]; - assert(hay.canFind!(e => (e.canFind("111", "222")))); + assert(hay.canFind!(e => e.canFind("111", "222"))); } @safe unittest @@ -2716,7 +2775,7 @@ Returns: `seq` advanced to the first matching element, or until empty if there are no matching elements. -See_Also: $(LREF find), $(REF std,algorithm,comparison,among) +See_Also: $(LREF find), $(REF among, std,algorithm,comparison) */ InputRange findAmong(alias pred = "a == b", InputRange, ForwardRange)( InputRange seq, ForwardRange choices) @@ -2861,94 +2920,100 @@ if (isForwardRange!R1 && ifTestable!(typeof(haystack.front), unaryFun!pred)) assert(findSkip!isWhite(s) == 2); } +private struct FindSplitResult(ubyte emptyRangeIndex, Types...) +{ + this(Types vals) + { + asTuple = typeof(asTuple)(vals); + } + void opAssign(typeof(asTuple) rhs) + { + asTuple = rhs; + } + Tuple!Types asTuple; + alias asTuple this; + + static if (hasConstEmptyMember!(typeof(asTuple[emptyRangeIndex]))) + { + bool opCast(T : bool)() const => !asTuple[emptyRangeIndex].empty; + } + else + { + bool opCast(T : bool)() => !asTuple[emptyRangeIndex].empty; + } +} + /** These functions find the first occurrence of `needle` in `haystack` and then split `haystack` as follows. -`findSplit` returns a tuple `result` containing $(I three) ranges. `result[0]` -is the portion of `haystack` before `needle`, `result[1]` is the portion of -`haystack` that matches `needle`, and `result[2]` is the portion of `haystack` -after the match. If `needle` was not found, `result[0]` comprehends `haystack` +$(PANEL +`findSplit` returns a tuple `result` containing $(I three) ranges. +$(UL +$(LI `result[0]` is the portion of `haystack` before `needle`) +$(LI `result[1]` is the portion of +`haystack` that matches `needle`) +$(LI `result[2]` is the portion of `haystack` +after the match.) +) +If `needle` was not found, `result[0]` comprehends `haystack` entirely and `result[1]` and `result[2]` are empty. -`findSplitBefore` returns a tuple `result` containing two ranges. `result[0]` is -the portion of `haystack` before `needle`, and `result[1]` is the balance of -`haystack` starting with the match. If `needle` was not found, `result[0]` +`findSplitBefore` returns a tuple `result` containing two ranges. +$(UL +$(LI `result[0]` is the portion of `haystack` before `needle`) +$(LI `result[1]` is the balance of `haystack` starting with the match.) +) +If `needle` was not found, `result[0]` comprehends `haystack` entirely and `result[1]` is empty. `findSplitAfter` returns a tuple `result` containing two ranges. -`result[0]` is the portion of `haystack` up to and including the -match, and `result[1]` is the balance of `haystack` starting -after the match. If `needle` was not found, `result[0]` is empty +$(UL +$(LI `result[0]` is the portion of `haystack` up to and including the +match) +$(LI `result[1]` is the balance of `haystack` starting +after the match.) +) +If `needle` was not found, `result[0]` is empty and `result[1]` is `haystack`. - +) +$(P In all cases, the concatenation of the returned ranges spans the entire `haystack`. If `haystack` is a random-access range, all three components of the tuple have the same type as `haystack`. Otherwise, `haystack` must be a $(REF_ALTTEXT forward range, isForwardRange, std,range,primitives) and -the type of `result[0]` and `result[1]` is the same as $(REF takeExactly, -std,range). +the type of `result[0]` (and `result[1]` for `findSplit`) is the same as +the result of $(REF takeExactly, std,range). For more information about `pred` see $(LREF find). - +) Params: - pred = Predicate to use for comparing needle against haystack. - haystack = The range to search. - needle = What to look for. + pred = Predicate to compare 2 elements. + haystack = The forward range to search. + needle = The forward range to look for. Returns: -A sub-type of `Tuple!()` of the split portions of `haystack` (see above for -details). This sub-type of `Tuple!()` has `opCast` defined for `bool`. This -`opCast` returns `true` when the separating `needle` was found -and `false` otherwise. +A sub-type of $(REF Tuple, std, typecons) of the split portions of `haystack` (see above for +details). This sub-type of `Tuple` defines `opCast!bool`, which +returns `true` when the separating `needle` was found and `false` otherwise. See_Also: $(LREF find) */ auto findSplit(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isForwardRange!R1 && isForwardRange!R2) { - static struct Result(S1, S2) if (isForwardRange!S1 && - isForwardRange!S2) - { - this(S1 pre, S1 separator, S2 post) - { - asTuple = typeof(asTuple)(pre, separator, post); - } - void opAssign(typeof(asTuple) rhs) - { - asTuple = rhs; - } - Tuple!(S1, S1, S2) asTuple; - static if (hasConstEmptyMember!(typeof(asTuple[1]))) - { - bool opCast(T : bool)() const - { - return !asTuple[1].empty; - } - } - else - { - bool opCast(T : bool)() - { - return !asTuple[1].empty; - } - } - alias asTuple this; - } - static if (isSomeString!R1 && isSomeString!R2 || (isRandomAccessRange!R1 && hasSlicing!R1 && hasLength!R1 && hasLength!R2)) { auto balance = find!pred(haystack, needle); immutable pos1 = haystack.length - balance.length; immutable pos2 = balance.empty ? pos1 : pos1 + needle.length; - return Result!(typeof(haystack[0 .. pos1]), - typeof(haystack[pos2 .. haystack.length]))(haystack[0 .. pos1], - haystack[pos1 .. pos2], - haystack[pos2 .. haystack.length]); + alias Slice = typeof(haystack[0 .. pos1]); + return FindSplitResult!(1, Slice, Slice, Slice)( + haystack[0 .. pos1], haystack[pos1 .. pos2], haystack[pos2 .. haystack.length]); } else { @@ -2977,10 +3042,11 @@ if (isForwardRange!R1 && isForwardRange!R2) { pos1 = pos2; } - return Result!(typeof(takeExactly(original, pos1)), - typeof(h))(takeExactly(original, pos1), - takeExactly(haystack, pos2 - pos1), - h); + return FindSplitResult!(1, + typeof(takeExactly(original, pos1)), + typeof(takeExactly(original, pos1)), typeof(h))( + takeExactly(original, pos1), + takeExactly(haystack, pos2 - pos1), h); } } @@ -2988,43 +3054,14 @@ if (isForwardRange!R1 && isForwardRange!R2) auto findSplitBefore(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isForwardRange!R1 && isForwardRange!R2) { - static struct Result(S1, S2) if (isForwardRange!S1 && - isForwardRange!S2) - { - this(S1 pre, S2 post) - { - asTuple = typeof(asTuple)(pre, post); - } - void opAssign(typeof(asTuple) rhs) - { - asTuple = rhs; - } - Tuple!(S1, S2) asTuple; - static if (hasConstEmptyMember!(typeof(asTuple[1]))) - { - bool opCast(T : bool)() const - { - return !asTuple[1].empty; - } - } - else - { - bool opCast(T : bool)() - { - return !asTuple[1].empty; - } - } - alias asTuple this; - } - static if (isSomeString!R1 && isSomeString!R2 || (isRandomAccessRange!R1 && hasLength!R1 && hasSlicing!R1 && hasLength!R2)) { auto balance = find!pred(haystack, needle); immutable pos = haystack.length - balance.length; - return Result!(typeof(haystack[0 .. pos]), - typeof(haystack[pos .. haystack.length]))(haystack[0 .. pos], - haystack[pos .. haystack.length]); + return FindSplitResult!(1, + typeof(haystack[0 .. pos]), typeof(haystack[0 .. pos]))( + haystack[0 .. pos], haystack[pos .. haystack.length]); } else { @@ -3054,9 +3091,9 @@ if (isForwardRange!R1 && isForwardRange!R2) pos1 = pos2; haystack = h; } - return Result!(typeof(takeExactly(original, pos1)), - typeof(haystack))(takeExactly(original, pos1), - haystack); + return FindSplitResult!(1, + typeof(takeExactly(original, pos1)), typeof(haystack))( + takeExactly(original, pos1), haystack); } } @@ -3064,47 +3101,19 @@ if (isForwardRange!R1 && isForwardRange!R2) auto findSplitAfter(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isForwardRange!R1 && isForwardRange!R2) { - static struct Result(S1, S2) if (isForwardRange!S1 && - isForwardRange!S2) - { - this(S1 pre, S2 post) - { - asTuple = typeof(asTuple)(pre, post); - } - void opAssign(typeof(asTuple) rhs) - { - asTuple = rhs; - } - Tuple!(S1, S2) asTuple; - static if (hasConstEmptyMember!(typeof(asTuple[1]))) - { - bool opCast(T : bool)() const - { - return !asTuple[0].empty; - } - } - else - { - bool opCast(T : bool)() - { - return !asTuple[0].empty; - } - } - alias asTuple this; - } - static if (isSomeString!R1 && isSomeString!R2 || isRandomAccessRange!R1 && hasLength!R1 && hasSlicing!R1 && hasLength!R2) { auto balance = find!pred(haystack, needle); immutable pos = balance.empty ? 0 : haystack.length - balance.length + needle.length; - return Result!(typeof(haystack[0 .. pos]), - typeof(haystack[pos .. haystack.length]))(haystack[0 .. pos], - haystack[pos .. haystack.length]); + return FindSplitResult!(0, + typeof(haystack[0 .. pos]), typeof(haystack[0 .. pos]))( + haystack[0 .. pos], haystack[pos .. haystack.length]); } else { import std.range : takeExactly; + alias Res = FindSplitResult!(0, typeof(takeExactly(haystack, 0)), typeof(haystack)); auto original = haystack.save; auto h = haystack.save; auto n = needle.save; @@ -3114,9 +3123,7 @@ if (isForwardRange!R1 && isForwardRange!R2) if (h.empty) { // Failed search - return Result!(typeof(takeExactly(original, 0)), - typeof(original))(takeExactly(original, 0), - original); + return Res(takeExactly(original, 0), original); } if (binaryFun!pred(h.front, n.front)) { @@ -3132,9 +3139,7 @@ if (isForwardRange!R1 && isForwardRange!R2) pos2 = ++pos1; } } - return Result!(typeof(takeExactly(original, pos2)), - typeof(h))(takeExactly(original, pos2), - h); + return Res(takeExactly(original, pos2), h); } } @@ -3151,12 +3156,12 @@ if (isForwardRange!R1 && isForwardRange!R2) } else assert(0); - // works with const aswell - if (const split = "dlang-rocks".findSplit("-")) + // findSplitBefore returns 2 ranges + if (const split = [2, 3, 2, 3, 4, 1].findSplitBefore!"a > b"([2, 2])) { - assert(split[0] == "dlang"); - assert(split[1] == "-"); - assert(split[2] == "rocks"); + assert(split[0] == [2, 3, 2]); + // [3, 4] each greater than [2, 2] + assert(split[1] == [3, 4, 1]); } else assert(0); } @@ -3986,6 +3991,28 @@ in (!r.empty) assert(result[1] == arr.maxElement); } } +// https://issues.dlang.org/show_bug.cgi?id=23993 +@safe unittest +{ + import std.bigint : BigInt; + + assert([BigInt(2), BigInt(3)].maxElement == BigInt(3)); +} + +// https://issues.dlang.org/show_bug.cgi?id=24596 +@safe unittest +{ + static class A { + int i; + int getI() @safe => i; + this(int i) @safe { this.i = i; } + } + auto arr = [new A(2), new A(3)]; + + arr.maxElement!(a => a.getI); + + assert(arr[0].getI == 2); +} // minPos /** @@ -5191,7 +5218,8 @@ if (isInputRange!Range) _input = input; _sentinel = sentinel; _openRight = openRight; - static if (isInputRange!Sentinel) + static if (isInputRange!Sentinel + && is(immutable ElementEncodingType!Sentinel == immutable ElementEncodingType!Range)) { _matchStarted = predSatisfied(); _done = _input.empty || _sentinel.empty || openRight && _matchStarted; @@ -5258,7 +5286,8 @@ if (isInputRange!Range) assert(!empty, "Can not popFront of an empty Until"); if (!_openRight) { - static if (isInputRange!Sentinel) + static if (isInputRange!Sentinel + && is(immutable ElementEncodingType!Sentinel == immutable ElementEncodingType!Range)) { _input.popFront(); _done = _input.empty || _sentinel.empty; @@ -5375,6 +5404,7 @@ pure @safe unittest assert(equal(r.save, "foo")); } } + // https://issues.dlang.org/show_bug.cgi?id=14543 pure @safe unittest { @@ -5405,3 +5435,10 @@ pure @safe unittest assert("one two three".until!((a,b)=>a.toUpper == b)("TWO", No.openRight).equal("one two")); } +// https://issues.dlang.org/show_bug.cgi?id=24342 +pure @safe unittest +{ + import std.algorithm.comparison : equal; + assert(["A", "BC", "D"].until("BC", No.openRight).equal(["A", "BC"])); + assert([[1], [2, 3], [4]].until([2, 3], No.openRight).equal([[1], [2, 3]])); +} diff --git a/std/algorithm/setops.d b/std/algorithm/setops.d index cc6f5b77db7..363bd16a0f9 100644 --- a/std/algorithm/setops.d +++ b/std/algorithm/setops.d @@ -8,7 +8,7 @@ $(LREF setIntersection), $(LREF setSymmetricDifference) expect a range of sorted ranges as input. All algorithms are generalized to accept as input not only sets but also -$(HTTP https://en.wikipedia.org/wiki/Multiset, multisets). Each algorithm +$(LINK2 https://en.wikipedia.org/wiki/Multiset, multisets). Each algorithm documents behaviour in the presence of duplicated inputs. $(SCRIPT inhibitQuickIndex = 1;) diff --git a/std/algorithm/sorting.d b/std/algorithm/sorting.d index c5b085d1037..29839d18091 100644 --- a/std/algorithm/sorting.d +++ b/std/algorithm/sorting.d @@ -2164,12 +2164,12 @@ private void quickSortImpl(alias less, Range)(Range r, size_t depth) { import std.algorithm.comparison : min, max; import std.algorithm.mutation : swap, swapAt; - import std.conv : to; alias Elem = ElementType!(Range); - enum size_t shortSortGetsBetter = max(32, 1024 / Elem.sizeof); + enum int size = Elem.sizeof; + enum size_t shortSortGetsBetter = max(32, 1024 / size); static assert(shortSortGetsBetter >= 1, Elem.stringof ~ " " - ~ to!string(Elem.sizeof)); + ~ size.stringof); // partition while (r.length > shortSortGetsBetter) @@ -2385,7 +2385,11 @@ private template TimSortImpl(alias pred, R) size_t stackLen = 0; // Allocate temporary memory if not provided by user - if (temp.length < minTemp) temp = () @trusted { return uninitializedArray!(T[])(minTemp); }(); + if (temp.length < minTemp) + { + static if (hasElaborateAssign!T) temp = new T[](minTemp); + else temp = () @trusted { return uninitializedArray!(T[])(minTemp); }(); + } for (size_t i = 0; i < range.length; ) { @@ -2621,11 +2625,21 @@ private template TimSortImpl(alias pred, R) // can't use `temp.length` if there's no default constructor static if (__traits(compiles, { T defaultConstructed; cast(void) defaultConstructed; })) { - if (__ctfe) temp.length = newSize; - else temp = () @trusted { return uninitializedArray!(T[])(newSize); }(); + + static if (hasElaborateAssign!T) + temp.length = newSize; + else + { + if (__ctfe) temp.length = newSize; + else temp = () @trusted { return uninitializedArray!(T[])(newSize); }(); + } } else { + static assert(!hasElaborateAssign!T, + "Structs which have opAssign but cannot be default-initialized " ~ + "do not currently work with stable sort: " ~ + "https://issues.dlang.org/show_bug.cgi?id=24810"); temp = () @trusted { return uninitializedArray!(T[])(newSize); }(); } } @@ -3076,6 +3090,79 @@ private template TimSortImpl(alias pred, R) array.sort!("a < b", SwapStrategy.stable); } +// https://issues.dlang.org/show_bug.cgi?id=24773 +@safe unittest +{ + static struct S + { + int i = 42; + ~this() { assert(i == 42); } + } + + auto array = new S[](400); + array.sort!((a, b) => false, SwapStrategy.stable); +} + +// https://issues.dlang.org/show_bug.cgi?id=24809 +@safe unittest +{ + static struct E + { + int value; + int valid = 42; + + ~this() + { + assert(valid == 42); + } + } + + import std.array : array; + import std.range : chain, only, repeat; + auto arr = chain(repeat(E(41), 18), + only(E(39)), + repeat(E(41), 16), + only(E(1)), + repeat(E(42), 33), + only(E(33)), + repeat(E(42), 16), + repeat(E(43), 27), + only(E(33)), + repeat(E(43), 34), + only(E(34)), + only(E(43)), + only(E(63)), + repeat(E(44), 42), + only(E(27)), + repeat(E(44), 11), + repeat(E(45), 64), + repeat(E(46), 3), + only(E(11)), + repeat(E(46), 7), + only(E(4)), + repeat(E(46), 34), + only(E(36)), + repeat(E(46), 17), + repeat(E(47), 36), + only(E(39)), + repeat(E(47), 26), + repeat(E(48), 17), + only(E(21)), + repeat(E(48), 5), + only(E(39)), + repeat(E(48), 14), + only(E(58)), + repeat(E(48), 24), + repeat(E(49), 13), + only(E(40)), + repeat(E(49), 38), + only(E(18)), + repeat(E(49), 11), + repeat(E(50), 6)).array(); + + arr.sort!((a, b) => a.value < b.value, SwapStrategy.stable)(); +} + // schwartzSort /** Alternative sorting method that should be used when comparing keys involves an diff --git a/std/array.d b/std/array.d index 26528032ded..27d216740aa 100644 --- a/std/array.d +++ b/std/array.d @@ -295,6 +295,19 @@ if (is(Range == U*, U) && isIterable!U && !isAutodecodableString!Range && !isInf R().array; } +// Test that `array(scope InputRange r)` returns a non-scope array +// https://issues.dlang.org/show_bug.cgi?id=23300 +@safe pure nothrow unittest +{ + @safe int[] fun() + { + import std.algorithm.iteration : map; + int[3] arr = [1, 2, 3]; + scope r = arr[].map!(x => x + 3); + return r.array; + } +} + /** Convert a narrow autodecoding string to an array type that fully supports random access. This is handled as a special case and always returns an array @@ -650,6 +663,8 @@ if (isInputRange!Values && isInputRange!Keys) alias ValueElement = ElementType!Values; static if (hasElaborateDestructor!ValueElement) ValueElement.init.__xdtor(); + + aa[key] = values.front; }))) { () @trusted { @@ -790,6 +805,20 @@ if (isInputRange!Values && isInputRange!Keys) assert(assocArray(1.iota, [UnsafeElement()]) == [0: UnsafeElement()]); } +@safe unittest +{ + struct ValueRange + { + string front() const @system; + @safe: + void popFront() {} + bool empty() const { return false; } + } + int[] keys; + ValueRange values; + static assert(!__traits(compiles, assocArray(keys, values))); +} + /** Construct a range iterating over an associative array by key/value tuples. @@ -1201,7 +1230,7 @@ private auto arrayAllocImpl(bool minimallyInitialized, T, I...)(I sizes) nothrow auto a2 = minimallyInitializedArray!(S2[][])(2, 2); assert(a2); enum b2 = minimallyInitializedArray!(S2[][])(2, 2); - assert(b2); + assert(b2 !is null); static struct S3 { //this() @disable; @@ -1210,7 +1239,7 @@ private auto arrayAllocImpl(bool minimallyInitialized, T, I...)(I sizes) nothrow auto a3 = minimallyInitializedArray!(S3[][])(2, 2); assert(a3); enum b3 = minimallyInitializedArray!(S3[][])(2, 2); - assert(b3); + assert(b3 !is null); } /++ @@ -3557,11 +3586,14 @@ if (isDynamicArray!A) return _data ? _data.capacity : 0; } + /// Returns: The number of elements appended. + @property size_t length() const => _data ? _data.arr.length : 0; + /** * Use opSlice() from now on. * Returns: The managed array. */ - @property inout(T)[] data() inout @trusted + @property inout(T)[] data() inout { return this[]; } @@ -3892,6 +3924,7 @@ if (isDynamicArray!A) int[] a = [ 1, 2 ]; auto app2 = appender(a); app2.put(3); + assert(app2.length == 3); app2.put([ 4, 5, 6 ]); assert(app2[] == [ 1, 2, 3, 4, 5, 6 ]); } @@ -4105,6 +4138,9 @@ if (isDynamicArray!A) return impl.capacity; } + /// Returns: The number of elements appended. + @property size_t length() const => impl.length; + /* Use opSlice() instead. * Returns: the managed array. */ @@ -4131,6 +4167,7 @@ unittest assert(app2[] == [1, 2]); assert(a == [1, 2]); app2 ~= 3; + assert(app2.length == 3); app2 ~= [4, 5, 6]; assert(app2[] == [1, 2, 3, 4, 5, 6]); assert(a == [1, 2, 3, 4, 5, 6]); @@ -4700,24 +4737,16 @@ unittest } /++ -Constructs a static array from `a`. -The type of elements can be specified implicitly so that $(D [1, 2].staticArray) results in `int[2]`, -or explicitly, e.g. $(D [1, 2].staticArray!float) returns `float[2]`. -When `a` is a range whose length is not known at compile time, the number of elements must be -given as template argument (e.g. `myrange.staticArray!2`). -Size and type can be combined, if the source range elements are implicitly -convertible to the requested element type (eg: `2.iota.staticArray!(long[2])`). -When the range `a` is known at compile time, it can also be specified as a -template argument to avoid having to specify the number of elements -(e.g.: `staticArray!(2.iota)` or `staticArray!(double, 2.iota)`). +Constructs a static array from a dynamic array whose length is known at compile-time. +The element type can be inferred or specified explicitly: + +* $(D [1, 2].staticArray) returns `int[2]` +* $(D [1, 2].staticArray!float) returns `float[2]` Note: `staticArray` returns by value, so expressions involving large arrays may be inefficient. Params: - a = The input elements. If there are less elements than the specified length of the static array, - the rest of it is default-initialized. If there are more than specified, the first elements - up to the specified length are used. - rangeLength = outputs the number of elements used from `a` to it. Optional. + a = The input array. Returns: A static array constructed from `a`. +/ @@ -4774,7 +4803,23 @@ nothrow pure @safe @nogc unittest [cast(byte) 1, cast(byte) 129].staticArray.checkStaticArray!byte([1, -127]); } -/// ditto +/** +Constructs a static array from a range. +When `a.length` is not known at compile time, the number of elements must be +given as a template argument (e.g. `myrange.staticArray!2`). +Size and type can be combined, if the source range elements are implicitly +convertible to the requested element type (eg: `2.iota.staticArray!(long[2])`). + +When the range `a` is known at compile time, it can be given as a +template argument to avoid having to specify the number of elements +(e.g.: `staticArray!(2.iota)` or `staticArray!(double, 2.iota)`). + +Params: + a = The input range. If there are less elements than the specified length of the static array, + the rest of it is default-initialized. If there are more than specified, the first elements + up to the specified length are used. + rangeLength = Output for the number of elements used from `a`. Optional. +*/ auto staticArray(size_t n, T)(scope T a) if (isInputRange!T) { diff --git a/std/bigint.d b/std/bigint.d index 33d0eae7ced..0240ea1d179 100644 --- a/std/bigint.d +++ b/std/bigint.d @@ -254,11 +254,11 @@ public: static if (op=="+") { - data = BigUint.addOrSubInt(data, u, sign != (y<0), sign); + data = BigUint.addOrSubInt!ulong(data, u, wantSub: sign != (y<0), sign); } else static if (op=="-") { - data = BigUint.addOrSubInt(data, u, sign == (y<0), sign); + data = BigUint.addOrSubInt!ulong(data, u, wantSub: sign == (y<0), sign); } else static if (op=="*") { @@ -323,7 +323,15 @@ public: else static if (op=="^^") { sign = (y & 1) ? sign : false; - data = BigUint.pow(data, u); + if (y < 0) + { + checkDivByZero(); + data = cast(ulong) (data == 1); + } + else + { + data = BigUint.pow(data, u); + } } else static if (op=="&") { @@ -411,6 +419,19 @@ public: )); } + // https://issues.dlang.org/show_bug.cgi?id=24028 + @system unittest + { + import std.exception : assertThrown; + import core.exception : AssertError; + + assert(BigInt(100) ^^ -1 == BigInt(0)); + assert(BigInt(1) ^^ -1 == BigInt(1)); + assert(BigInt(-1) ^^ -1 == BigInt(-1)); + assert(BigInt(-1) ^^ -2 == BigInt(1)); + assertThrown!AssertError(BigInt(0) ^^ -1); + } + /** * Implements assignment operators of the form `BigInt op= BigInt`. */ @@ -613,7 +634,7 @@ public: static if (op == "-") { r.sign = sign; - r.data = BigUint.addOrSubInt(data, u, sign == (y<0), r.sign); + r.data = BigUint.addOrSubInt!ulong(data, u, wantSub: sign == (y<0), r.sign); r.negate(); } return r; @@ -670,12 +691,12 @@ public: { static if (op=="++") { - data = BigUint.addOrSubInt(data, 1UL, sign, sign); + data = BigUint.addOrSubInt!ulong(data, 1UL, wantSub: sign, sign); return this; } else static if (op=="--") { - data = BigUint.addOrSubInt(data, 1UL, !sign, sign); + data = BigUint.addOrSubInt!ulong(data, 1UL, wantSub: !sign, sign); return this; } } diff --git a/std/bitmanip.d b/std/bitmanip.d index b84a6762d19..0993d34843f 100644 --- a/std/bitmanip.d +++ b/std/bitmanip.d @@ -164,8 +164,7 @@ private template createStorageAndFields(Ts...) alias StoreType = ulong; else { - import std.conv : to; - static assert(false, "Field widths must sum to 8, 16, 32, or 64, not " ~ to!string(Size)); + static assert(false, "Field widths must sum to 8, 16, 32, or 64, not " ~ Size.stringof); alias StoreType = ulong; // just to avoid another error msg } @@ -263,9 +262,9 @@ Implementation_details: `Bitfields` are internally stored in an `ubyte`, `ushort`, `uint` or `ulong` depending on the number of bits used. The bits are filled in the order given by the parameters, starting with the lowest significant bit. The name of the (private) -variable used for saving the `bitfield` is created by a prefix `_bf` -and concatenating all of the variable names, each preceded by an -underscore. +variable used for saving the `bitfield` is created by concatenating +all of the variable names, each preceded by an underscore, and +a suffix `_bf`. Params: T = A list of template parameters divided into chunks of 3 items. Each chunk consists (in this order) of a type, a @@ -279,10 +278,8 @@ See_Also: $(REF BitFlags, std,typecons) */ string bitfields(T...)() { - import std.conv : to; - static assert(T.length % 3 == 0, - "Wrong number of arguments (" ~ to!string(T.length) ~ "): Must be a multiple of 3"); + "Wrong number of arguments (" ~ T.length.stringof ~ "): Must be a multiple of 3"); static foreach (i, ARG; T) { @@ -808,6 +805,7 @@ private struct FloatingPointRepresentation(T) Allows manipulating the fraction, exponent, and sign parts of a `float` separately. The definition is: +$(RUNNABLE_EXAMPLE ---- struct FloatRep { @@ -822,6 +820,7 @@ struct FloatRep enum uint bias = 127, fractionBits = 23, exponentBits = 8, signBits = 1; } ---- +) */ alias FloatRep = FloatingPointRepresentation!float; @@ -877,6 +876,7 @@ alias FloatRep = FloatingPointRepresentation!float; Allows manipulating the fraction, exponent, and sign parts of a `double` separately. The definition is: +$(RUNNABLE_EXAMPLE ---- struct DoubleRep { @@ -891,6 +891,7 @@ struct DoubleRep enum uint bias = 1023, signBits = 1, fractionBits = 52, exponentBits = 11; } ---- +) */ alias DoubleRep = FloatingPointRepresentation!double; @@ -1053,6 +1054,8 @@ public: of a type different than `size_t`, firstly because its length should be a multiple of `size_t.sizeof`, and secondly because how the bits are mapped: + + $(RUNNABLE_EXAMPLE --- size_t[] source = [1, 2, 3, 3424234, 724398, 230947, 389492]; enum sbits = size_t.sizeof * 8; @@ -1063,6 +1066,7 @@ public: assert(ba[n] == nth_bit); } --- + ) The least significant bit in any `size_t` unit is the starting bit of this unit, and the most significant bit is the last bit of this unit. Therefore, passing e.g. an array of `int`s may result in a different `BitArray` @@ -1302,7 +1306,7 @@ public: /** Sets the bits of a slice of `BitArray` starting - at index `start` and ends at index ($D end - 1) + at index `start` and ends at index $(D end - 1) with the values specified by `val`. */ void opSliceAssign(bool val, size_t start, size_t end) @nogc pure nothrow @@ -2961,10 +2965,10 @@ if (__traits(isIntegral, T)) Unqual!T result; version (LittleEndian) foreach_reverse (b; array) - result = cast(Unqual!T) ((result << 8) | b); + result = cast() cast(T) ((result << 8) | b); else foreach (b; array) - result = cast(Unqual!T) ((result << 8) | b); + result = cast() cast(T) ((result << 8) | b); return cast(T) result; } @@ -2979,7 +2983,7 @@ if (__traits(isIntegral, T)) foreach (i; 0 .. T.sizeof) { result[i] = cast(ubyte) tmp; - tmp = cast(Unqual!T) (tmp >>> 8); + tmp = cast() cast(T) (tmp >>> 8); } } else @@ -2987,7 +2991,7 @@ if (__traits(isIntegral, T)) foreach_reverse (i; 0 .. T.sizeof) { result[i] = cast(ubyte) tmp; - tmp = cast(Unqual!T) (tmp >>> 8); + tmp = cast()(T) (tmp >>> 8); } } return result; @@ -3276,7 +3280,7 @@ if (canSwapEndianness!T && n == T.sizeof) assert(c == littleEndianToNative!dchar(swappedC)); } -private T endianToNativeImpl(bool swap, T, size_t n)(ubyte[n] val) @nogc nothrow pure @safe +private T endianToNativeImpl(bool swap, T, size_t n)(ubyte[n] val) @nogc nothrow pure @trusted if (__traits(isIntegral, T) && n == T.sizeof) { if (!__ctfe) diff --git a/std/checkedint.d b/std/checkedint.d index 79597e8dacc..cec1dc1a2db 100644 --- a/std/checkedint.d +++ b/std/checkedint.d @@ -2129,16 +2129,16 @@ static: { // Not value convertible, only viable option is rhs fits within the // bounds of Lhs - static if (ProperCompare.hookOpCmp(Rhs.min, Lhs.min) < 0) + static if (ProperCompare.hookOpCmp!(Rhs, Lhs)(lhs: Rhs.min, rhs: Lhs.min) < 0) { // Example: hookOpCast!short(int(42)), hookOpCast!uint(int(42)) - if (ProperCompare.hookOpCmp(rhs, Lhs.min) < 0) + if (ProperCompare.hookOpCmp!(Rhs, Lhs)(lhs: rhs, rhs: Lhs.min) < 0) return defaultValue!Lhs; } - static if (ProperCompare.hookOpCmp(Rhs.max, Lhs.max) > 0) + static if (ProperCompare.hookOpCmp!(Rhs, Lhs)(lhs: Rhs.max, rhs: Lhs.max) > 0) { // Example: hookOpCast!int(uint(42)) - if (ProperCompare.hookOpCmp(rhs, Lhs.max) > 0) + if (ProperCompare.hookOpCmp!(Rhs, Lhs)(lhs: rhs, rhs: Lhs.max) > 0) return defaultValue!Lhs; } return cast(Lhs) rhs; diff --git a/std/complex.d b/std/complex.d index 3b860fe476b..60746f98ef7 100644 --- a/std/complex.d +++ b/std/complex.d @@ -1066,7 +1066,7 @@ Complex!T asin(T)(Complex!T z) @safe pure nothrow @nogc { import std.math.operations : isClose; import std.math.constants : PI; - version (DigitalMars) {} else // Disabled because of issue 21376 + version (DigitalMars) {} else // Disabled because of https://issues.dlang.org/show_bug.cgi?id=21376 assert(isClose(asin(complex(0.5f)), float(PI) / 6)); } @@ -1092,7 +1092,7 @@ Complex!T acos(T)(Complex!T z) @safe pure nothrow @nogc { import std.math.operations : isClose; import std.math.constants : PI; - version (DigitalMars) {} else // Disabled because of issue 21376 + version (DigitalMars) {} else // Disabled because of https://issues.dlang.org/show_bug.cgi?id=21376 assert(isClose(acos(complex(0.5f)), float(PI) / 3)); } @@ -1892,7 +1892,7 @@ Complex!T pow(T)(const T x, Complex!T n) @trusted pure nothrow @nogc @safe pure nothrow @nogc unittest { import std.meta : AliasSeq; - import std.math : RealFormat, floatTraits; + import std.math.traits : floatTraits, RealFormat; static foreach (T; AliasSeq!(float, double, real)) {{ static if (floatTraits!T.realFormat == RealFormat.ibmExtended) diff --git a/std/container/array.d b/std/container/array.d index f5efe6d1f2a..ad120c1c74f 100644 --- a/std/container/array.d +++ b/std/container/array.d @@ -594,6 +594,10 @@ if (!is(immutable T == immutable bool)) assert(capacity == values.length); // We check that reserve has been called before the loop. } + /// ditto + // needed when T is an array and only one argument is passed + this(T single) { __ctor!T(single); } + /** * Constructor taking an $(REF_ALTTEXT input range, isInputRange, std,range,primitives) */ @@ -1282,6 +1286,13 @@ if (!is(immutable T == immutable bool)) } } +@system unittest +{ + import std.algorithm.comparison : equal; + auto a = Array!string("test"); + assert(a[].equal(["test"])); +} + @safe unittest { // https://issues.dlang.org/show_bug.cgi?id=13621 @@ -1566,7 +1577,7 @@ if (!is(immutable T == immutable bool)) r2[0 .. 0] += 0; } -// Test issue 11194 +// Test https://issues.dlang.org/show_bug.cgi?id=11194 @system unittest { static struct S { diff --git a/std/conv.d b/std/conv.d index aef23655f2a..3aa73c68bf1 100644 --- a/std/conv.d +++ b/std/conv.d @@ -102,21 +102,6 @@ private auto convError(S, T)(S source, string fn = __FILE__, size_t ln = __LINE_ return new ConvException(msg, fn, ln); } -private auto convError(S, T)(S source, int radix, string fn = __FILE__, size_t ln = __LINE__) -{ - string msg; - - if (source.empty) - msg = text("Unexpected end of input when converting from type " ~ S.stringof ~ " base ", radix, - " to type " ~ T.stringof); - else - msg = text("Unexpected '", source.front, - "' when converting from type " ~ S.stringof ~ " base ", radix, - " to type " ~ T.stringof); - - return new ConvException(msg, fn, ln); -} - @safe pure/* nothrow*/ // lazy parameter bug private auto parseError(lazy string msg, string fn = __FILE__, size_t ln = __LINE__) { @@ -205,8 +190,9 @@ Conversions from string _to numeric types differ from the C equivalents `atoi()` and `atol()` by checking for overflow and not allowing whitespace. For conversion of strings _to signed types, the grammar recognized is: -$(PRE $(I Integer): $(I Sign UnsignedInteger) -$(I UnsignedInteger) +$(PRE $(I Integer): + $(I Sign UnsignedInteger) + $(I UnsignedInteger) $(I Sign): $(B +) $(B -)) @@ -224,14 +210,14 @@ template to(T) return toImpl!T(args); } - // Fix issue 6175 + // Fix https://issues.dlang.org/show_bug.cgi?id=6175 T to(S)(ref S arg) if (isStaticArray!S) { return toImpl!T(arg); } - // Fix issue 16108 + // Fix https://issues.dlang.org/show_bug.cgi?id=16108 T to(S)(ref S arg) if (isAggregateType!S && !isCopyable!S) { @@ -275,7 +261,7 @@ template to(T) } /** - * When converting strings _to numeric types, note that the D hexadecimal and binary + * When converting strings _to numeric types, note that D hexadecimal and binary * literals are not handled. Neither the prefixes that indicate the base, nor the * horizontal bar used _to separate groups of digits are recognized. This also * applies to the suffixes that indicate the type. @@ -412,7 +398,7 @@ template to(T) * $(LI Pointer to string conversions convert the pointer to a `size_t` value. * If pointer is `char*`, treat it as C-style strings. * In that case, this function is `@system`.)) - * See $(REF formatValue, std,format) on how toString should be defined. + * See $(REF formatValue, std,format) on how `toString` should be defined. */ @system pure unittest // @system due to cast and ptr { @@ -438,7 +424,23 @@ template to(T) assert(c == "abcx"); } -// Tests for issue 6175 +/** + * Strings can be converted to enum types. The enum member with the same name as the + * input string is returned. The comparison is case-sensitive. + * + * A $(LREF ConvException) is thrown if the enum does not have the specified member. + */ +@safe pure unittest +{ + import std.exception : assertThrown; + + enum E { a, b, c } + assert(to!E("a") == E.a); + assert(to!E("b") == E.b); + assertThrown!ConvException(to!E("A")); +} + +// Tests for https://issues.dlang.org/show_bug.cgi?id=6175 @safe pure nothrow unittest { char[9] sarr = "blablabla"; @@ -447,7 +449,7 @@ template to(T) assert(sarr.length == darr.length); } -// Tests for issue 7348 +// Tests for https://issues.dlang.org/show_bug.cgi?id=7348 @safe pure /+nothrow+/ unittest { assert(to!string(null) == "null"); @@ -469,7 +471,7 @@ template to(T) assert(text("a", s) == "aS"); } -// Tests for issue 11390 +// Tests for https://issues.dlang.org/show_bug.cgi?id=11390 @safe pure /+nothrow+/ unittest { const(typeof(null)) ctn; @@ -478,7 +480,7 @@ template to(T) assert(to!string(itn) == "null"); } -// Tests for issue 8729: do NOT skip leading WS +// Tests for https://issues.dlang.org/show_bug.cgi?id=8729: do NOT skip leading WS @safe pure unittest { import std.exception; @@ -1023,7 +1025,15 @@ if (!(is(S : T) && else static if (isIntegral!S && !is(S == enum)) { // other integral-to-string conversions with default radix - return toImpl!(T, S)(value, 10); + + import core.internal.string : signedToTempString, unsignedToTempString; + + alias EEType = Unqual!(ElementEncodingType!T); + EEType[long.sizeof * 3 + 1] buf = void; + EEType[] t = isSigned!S + ? signedToTempString!(10, false, EEType)(value, buf) + : unsignedToTempString!(10, false, EEType)(value, buf); + return t.dup; } else static if (is(S == void[]) || is(S == const(void)[]) || is(S == immutable(void)[])) { @@ -1377,7 +1387,7 @@ if (is (T == immutable) && isExactSomeString!T && is(S == enum)) S2 s2; assert(to!string(s2) == "S2(42, 43.5)"); - // Test for issue 8080 + // Test for https://issues.dlang.org/show_bug.cgi?id=8080 struct S8080 { short[4] data; @@ -1794,7 +1804,7 @@ if (!is(S : T) && isAssociativeArray!S && } static void testFloatingToIntegral(Floating, Integral)() { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; bool convFails(Source, Target, E)(Source src) { @@ -1979,7 +1989,7 @@ $(UL private T toImpl(T, S)(S value) if (isInputRange!S && isSomeChar!(ElementEncodingType!S) && !isExactSomeString!T && is(typeof(parse!T(value))) && - // issue 20539 + // https://issues.dlang.org/show_bug.cgi?id=20539 !(is(T == enum) && is(typeof(value == OriginalType!T.init)) && !isSomeString!(OriginalType!T))) { scope(success) @@ -2254,19 +2264,21 @@ template roundTo(Target) } /** -The `parse` family of functions works quite like the `to` +$(PANEL +The `parse` family of functions works quite like the $(LREF to) family, except that: $(OL $(LI It only works with character ranges as input.) - $(LI It takes the input by reference. (This means that rvalues - such - as string literals - are not accepted: use `to` instead.)) + $(LI It takes the input by reference. This means that rvalues (such + as string literals) are not accepted: use `to` instead.) $(LI It advances the input to the position following the conversion.) $(LI It does not throw if it could not convert the entire input.)) +) -This overload converts a character input range to a `bool`. +This overload parses a `bool` from a character input range. Params: - Target = the type to convert to + Target = the boolean type to convert to source = the lvalue of an $(REF_ALTTEXT input range, isInputRange, std,range,primitives) doCount = the flag for deciding to report the number of consumed characters @@ -2283,9 +2295,9 @@ Note: to `parse` and do not require lvalues. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source source) -if (isInputRange!Source && - isSomeChar!(ElementType!Source) && - is(immutable Target == immutable bool)) +if (is(immutable Target == immutable bool) && + isInputRange!Source && + isSomeChar!(ElementType!Source)) { import std.ascii : toLower; @@ -2384,8 +2396,7 @@ Lerr: } /** -Parses a character $(REF_ALTTEXT input range, isInputRange, std,range,primitives) -to an integral value. +Parses an integer from a character $(REF_ALTTEXT input range, isInputRange, std,range,primitives). Params: Target = the integral type to convert to @@ -2402,8 +2413,8 @@ Throws: if no character of the input was meaningfully converted. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref scope Source s) -if (isSomeChar!(ElementType!Source) && - isIntegral!Target && !is(Target == enum)) +if (isIntegral!Target && !is(Target == enum) && + isSomeChar!(ElementType!Source)) { static if (Target.sizeof < int.sizeof) { @@ -2824,8 +2835,8 @@ Lerr: /// ditto auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source source, uint radix) -if (isSomeChar!(ElementType!Source) && - isIntegral!Target && !is(Target == enum)) +if (isIntegral!Target && !is(Target == enum) && + isSomeChar!(ElementType!Source)) in { assert(radix >= 2 && radix <= 36, "radix must be in range [2,36]"); @@ -2976,7 +2987,7 @@ do } /** - * Takes a string representing an `enum` type and returns that type. + * Parses an `enum` type from a string representing an enum member name. * * Params: * Target = the `enum` type to convert to @@ -2993,8 +3004,7 @@ do * represented by `s`. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s) -if (isSomeString!Source && !is(Source == enum) && - is(Target == enum)) +if (is(Target == enum) && isSomeString!Source && !is(Source == enum)) { import std.algorithm.searching : startsWith; import std.traits : Unqual, EnumMembers; @@ -3086,7 +3096,7 @@ if (isSomeString!Source && !is(Source == enum) && } /** - * Parses a character range to a floating point number. + * Parses a floating point number from a character range. * * Params: * Target = a floating point type @@ -3104,8 +3114,8 @@ if (isSomeString!Source && !is(Source == enum) && * parsed, or if an overflow occurred. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source source) -if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum) && - isFloatingPoint!Target && !is(Target == enum)) +if (isFloatingPoint!Target && !is(Target == enum) && + isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum)) { import std.ascii : isDigit, isAlpha, toLower, toUpper, isHexDigit; import std.exception : enforce; @@ -3420,7 +3430,7 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum Target result = cast(Target) (sign ? -ldval : ldval); // if overflow occurred - import std.math : isFinite; + import std.math.traits : isFinite; enforce(isFinite(result), new ConvException("Range error")); advanceSource(); @@ -3588,7 +3598,7 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum @system unittest { // @system because strtod is not @safe. - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (floatTraits!real.realFormat == RealFormat.ieeeDouble) { @@ -3672,7 +3682,7 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum { import core.stdc.errno; import core.stdc.stdlib; - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; errno = 0; // In case it was set by another unittest in a different module. struct longdouble @@ -3797,7 +3807,7 @@ if (isInputRange!Source && isSomeChar!(ElementType!Source) && !is(Source == enum } /** -Parsing one character off a range returns the first element and calls `popFront`. +Parses one character from a character range. Params: Target = the type to convert to @@ -3813,8 +3823,8 @@ Throws: A $(LREF ConvException) if the range is empty. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s) -if (isSomeString!Source && !is(Source == enum) && - staticIndexOf!(immutable Target, immutable dchar, immutable ElementEncodingType!Source) >= 0) +if (staticIndexOf!(immutable Target, immutable dchar, immutable ElementEncodingType!Source) >= 0 && + isSomeString!Source && !is(Source == enum)) { if (s.empty) throw convError!(Source, Target)(s); @@ -3870,8 +3880,8 @@ if (isSomeString!Source && !is(Source == enum) && /// ditto auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s) -if (!isSomeString!Source && isInputRange!Source && isSomeChar!(ElementType!Source) && - isSomeChar!Target && Target.sizeof >= ElementType!Source.sizeof && !is(Target == enum)) +if (isSomeChar!Target && Target.sizeof >= ElementType!Source.sizeof && !is(Target == enum) && + !isSomeString!Source && isInputRange!Source && isSomeChar!(ElementType!Source)) { if (s.empty) throw convError!(Source, Target)(s); @@ -3938,7 +3948,7 @@ if (!isSomeString!Source && isInputRange!Source && isSomeChar!(ElementType!Sourc } /** -Parsing a character range to `typeof(null)` returns `null` if the range +Parses `typeof(null)` from a character range if the range spells `"null"`. This function is case insensitive. Params: @@ -3955,9 +3965,9 @@ Throws: A $(LREF ConvException) if the range doesn't represent `null`. */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s) -if (isInputRange!Source && - isSomeChar!(ElementType!Source) && - is(immutable Target == immutable typeof(null))) +if (is(immutable Target == immutable typeof(null)) && + isInputRange!Source && + isSomeChar!(ElementType!Source)) { import std.ascii : toLower; foreach (c; "null") @@ -4069,8 +4079,8 @@ package auto skipWS(R, Flag!"doCount" doCount = No.doCount)(ref R r) */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s, dchar lbracket = '[', dchar rbracket = ']', dchar comma = ',') -if (isSomeString!Source && !is(Source == enum) && - isDynamicArray!Target && !is(Target == enum)) +if (isDynamicArray!Target && !is(Target == enum) && + isSomeString!Source && !is(Source == enum)) { import std.array : appender; @@ -4256,8 +4266,8 @@ if (isSomeString!Source && !is(Source == enum) && /// ditto auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s, dchar lbracket = '[', dchar rbracket = ']', dchar comma = ',') -if (isExactSomeString!Source && - isStaticArray!Target && !is(Target == enum)) +if (isStaticArray!Target && !is(Target == enum) && + isExactSomeString!Source) { static if (hasIndirections!Target) Target result = Target.init[0].init; @@ -4365,8 +4375,8 @@ Lfewerr: */ auto parse(Target, Source, Flag!"doCount" doCount = No.doCount)(ref Source s, dchar lbracket = '[', dchar rbracket = ']', dchar keyval = ':', dchar comma = ',') -if (isSomeString!Source && !is(Source == enum) && - isAssociativeArray!Target && !is(Target == enum)) +if (isAssociativeArray!Target && !is(Target == enum) && + isSomeString!Source && !is(Source == enum)) { alias KeyType = typeof(Target.init.keys[0]); alias ValType = typeof(Target.init.values[0]); @@ -4838,8 +4848,9 @@ private S textImpl(S, U...)(U args) static foreach (arg; args) { static if ( - isSomeChar!(typeof(arg)) || isSomeString!(typeof(arg)) || - ( isInputRange!(typeof(arg)) && isSomeChar!(ElementType!(typeof(arg))) ) + isSomeChar!(typeof(arg)) + || isSomeString!(typeof(arg)) + || ( isInputRange!(typeof(arg)) && isSomeChar!(ElementType!(typeof(arg))) ) ) app.put(arg); else static if ( @@ -5239,7 +5250,7 @@ if (isIntegral!T && isOutputRange!(W, char)) auto unsigned(T)(T x) if (isIntegral!T) { - return cast(Unqual!(Unsigned!T))x; + return cast() cast(Unsigned!T) x; } /// @@ -5260,7 +5271,7 @@ if (isSomeChar!T) { // All characters are unsigned static assert(T.min == 0, T.stringof ~ ".min must be zero"); - return cast(Unqual!T) x; + return cast() x; } @safe unittest @@ -5317,7 +5328,7 @@ if (isSomeChar!T) auto signed(T)(T x) if (isIntegral!T) { - return cast(Unqual!(Signed!T))x; + return cast() cast(Signed!T) x; } /// @@ -5567,7 +5578,7 @@ private bool isHexLiteral(String)(scope const String hexData) static assert( ("5A 01A C FF de 1b"d).isHexLiteral); static assert( ("0123456789abcdefABCDEF"d).isHexLiteral); static assert( (" 012 34 5 6789 abcd ef\rAB\nCDEF"d).isHexLiteral); - // library version allows what's pointed by issue 10454 + // library version allows what's pointed by https://issues.dlang.org/show_bug.cgi?id=10454 static assert( ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").isHexLiteral); } @@ -5701,8 +5712,8 @@ private auto hexStrLiteral(String)(scope String hexData) * radix = 2, 8, 10, 16 * Char = character type for output * letterCase = lower for deadbeef, upper for DEADBEEF - * value = integer to convert. Can be uint or ulong. If radix is 10, can also be - * int or long. + * value = integer to convert. Can be ubyte, ushort, uint or ulong. If radix + * is 10, can also be byte, short, int or long. * Returns: * Random access range with slicing and everything */ @@ -5710,8 +5721,7 @@ private auto hexStrLiteral(String)(scope String hexData) auto toChars(ubyte radix = 10, Char = char, LetterCase letterCase = LetterCase.lower, T)(T value) pure nothrow @nogc @safe if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && - (is(immutable T == immutable uint) || is(immutable T == immutable ulong) || - radix == 10 && (is(immutable T == immutable int) || is(immutable T == immutable long)))) + isIntegral!T && (radix == 10 || isUnsigned!T)) { alias UT = Unqual!T; @@ -5726,33 +5736,13 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && { void initialize(UT value) { - bool neg = false; - if (value < 10) - { - if (value >= 0) - { - lwr = 0; - upr = 1; - buf[0] = cast(char)(cast(uint) value + '0'); - return; - } - value = -value; - neg = true; - } - auto i = cast(uint) buf.length - 1; - while (cast(Unsigned!UT) value >= 10) - { - buf[i] = cast(ubyte)('0' + cast(Unsigned!UT) value % 10); - value = unsigned(value) / 10; - --i; - } - buf[i] = cast(char)(cast(uint) value + '0'); - if (neg) - { - buf[i - 1] = '-'; - --i; - } - lwr = i; + import core.internal.string : signedToTempString, unsignedToTempString; + + char[] t = value < 0 + ? signedToTempString!(10, false, char)(value, buf) + : unsignedToTempString!(10, false, char)(value, buf); + + lwr = cast(uint) (buf.length - t.length); upr = cast(uint) buf.length; } @@ -5879,8 +5869,12 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && assert(toChars(123) == toChars(123)); { + assert(toChars!2(ubyte(0)).array == "0"); + assert(toChars!2(ushort(0)).array == "0"); assert(toChars!2(0u).array == "0"); assert(toChars!2(0Lu).array == "0"); + assert(toChars!2(ubyte(1)).array == "1"); + assert(toChars!2(ushort(1)).array == "1"); assert(toChars!2(1u).array == "1"); assert(toChars!2(1Lu).array == "1"); @@ -5893,10 +5887,14 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && assert(s.retro.array == "01"); } { + assert(toChars!8(ubyte(0)).array == "0"); + assert(toChars!8(ushort(0)).array == "0"); assert(toChars!8(0u).array == "0"); assert(toChars!8(0Lu).array == "0"); assert(toChars!8(1u).array == "1"); assert(toChars!8(1234567Lu).array == "4553207"); + assert(toChars!8(ubyte.max).array == "377"); + assert(toChars!8(ushort.max).array == "177777"); auto r = toChars!8(8u); assert(r.length == 2); @@ -5907,10 +5905,14 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && assert(s.retro.array == "01"); } { + assert(toChars!10(ubyte(0)).array == "0"); + assert(toChars!10(ushort(0)).array == "0"); assert(toChars!10(0u).array == "0"); assert(toChars!10(0Lu).array == "0"); assert(toChars!10(1u).array == "1"); assert(toChars!10(1234567Lu).array == "1234567"); + assert(toChars!10(ubyte.max).array == "255"); + assert(toChars!10(ushort.max).array == "65535"); assert(toChars!10(uint.max).array == "4294967295"); assert(toChars!10(ulong.max).array == "18446744073709551615"); @@ -5927,10 +5929,16 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && assert(toChars!10(0L).array == "0"); assert(toChars!10(1).array == "1"); assert(toChars!10(1234567L).array == "1234567"); + assert(toChars!10(byte.max).array == "127"); + assert(toChars!10(short.max).array == "32767"); assert(toChars!10(int.max).array == "2147483647"); assert(toChars!10(long.max).array == "9223372036854775807"); + assert(toChars!10(-byte.max).array == "-127"); + assert(toChars!10(-short.max).array == "-32767"); assert(toChars!10(-int.max).array == "-2147483647"); assert(toChars!10(-long.max).array == "-9223372036854775807"); + assert(toChars!10(byte.min).array == "-128"); + assert(toChars!10(short.min).array == "-32768"); assert(toChars!10(int.min).array == "-2147483648"); assert(toChars!10(long.min).array == "-9223372036854775808"); @@ -5947,6 +5955,10 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && assert(toChars!(16)(0Lu).array == "0"); assert(toChars!(16)(10u).array == "a"); assert(toChars!(16, char, LetterCase.upper)(0x12AF34567Lu).array == "12AF34567"); + assert(toChars!(16)(ubyte(0)).array == "0"); + assert(toChars!(16)(ushort(0)).array == "0"); + assert(toChars!(16)(ubyte.max).array == "ff"); + assert(toChars!(16)(ushort.max).array == "ffff"); auto r = toChars!(16)(16u); assert(r.length == 2); @@ -5958,7 +5970,7 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && } } -@safe unittest // opSlice (issue 16192) +@safe unittest // opSlice (https://issues.dlang.org/show_bug.cgi?id=16192) { import std.meta : AliasSeq; @@ -5986,7 +5998,7 @@ if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && for (; !r.empty; r.popFront(), ++i) { assert(original[i .. original.length].tupleof == r.tupleof); - // tupleof is used to work around issue 16216. + // tupleof is used to work around https://issues.dlang.org/show_bug.cgi?id=16216. } // opSlice vs popBack diff --git a/std/csv.d b/std/csv.d index 7f5c2b24c01..9ee9b5d5baf 100644 --- a/std/csv.d +++ b/std/csv.d @@ -175,6 +175,16 @@ class CSVException : Exception assert(ex.toString == "(Row: 1, Col: 2) Unexpected 'b' when converting from type string to type int"); } +// https://issues.dlang.org/show_bug.cgi?id=24478 +@safe unittest +{ + import std.exception : collectException; + import std.algorithm.searching : count; + string text = "A, B\n1, 2, 3"; + auto ex = collectException!CSVException(csvReader!(string[string])(text, null).count); + assert(ex.toString == "(Row: 1, Col: 3) row contains more values than header"); +} + @safe pure unittest { import std.string; @@ -1179,7 +1189,10 @@ public: { for (; !recordRange.empty; recordRange.popFront()) { - aa[header[_input.col-1]] = recordRange.front; + const i = _input.col - 1; + if (i >= header.length) + throw new CSVException("row contains more values than header", _input.row, _input.col); + aa[header[i]] = recordRange.front; } } catch (ConvException e) diff --git a/std/datetime/date.d b/std/datetime/date.d index ebdaba42a9d..c757b1e2880 100644 --- a/std/datetime/date.d +++ b/std/datetime/date.d @@ -3161,10 +3161,10 @@ public: auto str = strip(isoString); - enforce(str.length >= 15, new DateTimeException(format("Invalid ISO String: %s", isoString))); + enforce!DateTimeException(str.length >= 15, format("Invalid format for DateTime.fromISOString %s", isoString)); auto t = str.byCodeUnit.countUntil('T'); - enforce(t != -1, new DateTimeException(format("Invalid ISO String: %s", isoString))); + enforce!DateTimeException(t != -1, format("Invalid format for DateTime.fromISOString: %s", isoString)); immutable date = Date.fromISOString(str[0 .. t]); immutable tod = TimeOfDay.fromISOString(str[t+1 .. $]); @@ -3262,10 +3262,11 @@ public: auto str = strip(isoExtString); - enforce(str.length >= 15, new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString))); + enforce!DateTimeException(str.length >= 15, + format("Invalid format for DateTime.fromISOExtString: %s", isoExtString)); auto t = str.byCodeUnit.countUntil('T'); - enforce(t != -1, new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString))); + enforce!DateTimeException(t != -1, format("Invalid format for DateTime.fromISOExtString: %s", isoExtString)); immutable date = Date.fromISOExtString(str[0 .. t]); immutable tod = TimeOfDay.fromISOExtString(str[t+1 .. $]); @@ -3362,10 +3363,11 @@ public: auto str = strip(simpleString); - enforce(str.length >= 15, new DateTimeException(format("Invalid string format: %s", simpleString))); + enforce!DateTimeException(str.length >= 15, + format("Invalid format for DateTime.fromSimpleString: %s", simpleString)); auto t = str.byCodeUnit.countUntil(' '); - enforce(t != -1, new DateTimeException(format("Invalid string format: %s", simpleString))); + enforce!DateTimeException(t != -1, format("Invalid format for DateTime.fromSimpleString: %s", simpleString)); immutable date = Date.fromSimpleString(str[0 .. t]); immutable tod = TimeOfDay.fromISOExtString(str[t+1 .. $]); @@ -3776,7 +3778,7 @@ public: enforceValid!"months"(cast(Month) month); enforceValid!"days"(year, cast(Month) month, day); - _year = cast(short) year; + _year = year.castToYear; _month = cast(Month) month; _day = cast(ubyte) day; } @@ -3814,6 +3816,7 @@ public: assertThrown!DateTimeException(Date(1999, 10, 32)); assertThrown!DateTimeException(Date(1999, 11, 31)); assertThrown!DateTimeException(Date(1999, 12, 32)); + assertThrown!DateTimeException(Date(short.max+1, 1, 1)); assertNotThrown!DateTimeException(Date(1999, 1, 31)); assertNotThrown!DateTimeException(Date(1999, 2, 28)); @@ -3839,6 +3842,7 @@ public: assertThrown!DateTimeException(Date(-1, 2, 29)); assertThrown!DateTimeException(Date(-2, 2, 29)); assertThrown!DateTimeException(Date(-3, 2, 29)); + assertThrown!DateTimeException(Date(short.min-1, 1, 1)); } @@ -4128,7 +4132,7 @@ public: @property void year(int year) @safe pure { enforceValid!"days"(year, _month, _day); - _year = cast(short) year; + _year = year.castToYear; } /// @@ -4215,7 +4219,7 @@ public: { if (year <= 0) throw new DateTimeException("The given year is not a year B.C."); - _year = cast(short)((year - 1) * -1); + _year = castToYear((year - 1) * -1); } /// @@ -7626,7 +7630,7 @@ public: auto str = isoString.strip; - enforce!DateTimeException(str.length >= 8, text("Invalid ISO String: ", isoString)); + enforce!DateTimeException(str.length >= 8, text("Invalid format for Date.fromISOString: ", isoString)); int day, month, year; auto yearStr = str[0 .. $ - 4]; @@ -7641,7 +7645,7 @@ public: if (yearStr.length > 4) { enforce!DateTimeException(yearStr.startsWith('-', '+'), - text("Invalid ISO String: ", isoString)); + text("Invalid format for Date.fromISOString: ", isoString)); year = to!int(yearStr); } else @@ -7651,7 +7655,7 @@ public: } catch (ConvException) { - throw new DateTimeException(text("Invalid ISO String: ", isoString)); + throw new DateTimeException(text("Invalid format for Date.fromISOString: ", isoString)); } return Date(year, month, day); @@ -7772,13 +7776,13 @@ public: ubyte month, day; if (str.length < 10 || str[$-3] != '-' || str[$-6] != '-') - throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)); + throw new DateTimeException(format("Invalid format for Date.fromISOExtString: %s", isoExtString)); auto yearStr = str[0 .. $-6]; auto signAtBegining = cast(bool) yearStr.startsWith('-', '+'); if ((yearStr.length > 4) != signAtBegining) { - throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)); + throw new DateTimeException(format("Invalid format for Date.fromISOExtString: %s", isoExtString)); } try @@ -7789,7 +7793,7 @@ public: } catch (ConvException) { - throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)); + throw new DateTimeException(format("Invalid format for Date.fromISOExtString: %s", isoExtString)); } return Date(year, month, day); @@ -7908,7 +7912,7 @@ public: auto str = strip(simpleString); if (str.length < 11 || str[$-3] != '-' || str[$-7] != '-') - throw new DateTimeException(format!"Invalid string format: %s"(simpleString)); + throw new DateTimeException(format!"Invalid format for Date.fromSimpleString: %s"(simpleString)); int year; uint day; @@ -7917,7 +7921,7 @@ public: auto signAtBegining = cast(bool) yearStr.startsWith('-', '+'); if ((yearStr.length > 4) != signAtBegining) { - throw new DateTimeException(format!"Invalid string format: %s"(simpleString)); + throw new DateTimeException(format!"Invalid format for Date.fromSimpleString: %s"(simpleString)); } try @@ -7927,7 +7931,7 @@ public: } catch (ConvException) { - throw new DateTimeException(format!"Invalid string format: %s"(simpleString)); + throw new DateTimeException(format!"Invalid format for Date.fromSimpleString: %s"(simpleString)); } return Date(year, month, day); @@ -9206,7 +9210,7 @@ public: int hours, minutes, seconds; auto str = strip(isoString); - enforce!DateTimeException(str.length == 6, text("Invalid ISO String: ", isoString)); + enforce!DateTimeException(str.length == 6, text("Invalid format for TimeOfDay.fromISOString: ", isoString)); try { @@ -9218,7 +9222,7 @@ public: } catch (ConvException) { - throw new DateTimeException(text("Invalid ISO String: ", isoString)); + throw new DateTimeException(text("Invalid format for TimeOfDay.fromISOString: ", isoString)); } return TimeOfDay(hours, minutes, seconds); @@ -9331,7 +9335,7 @@ public: int hours, minutes, seconds; if (str.length != 8 || str[2] != ':' || str[5] != ':') - throw new DateTimeException(text("Invalid ISO Extended String: ", isoExtString)); + throw new DateTimeException(text("Invalid format for TimeOfDay.fromISOExtString: ", isoExtString)); try { @@ -9343,7 +9347,7 @@ public: } catch (ConvException) { - throw new DateTimeException(text("Invalid ISO Extended String: ", isoExtString)); + throw new DateTimeException(text("Invalid format for TimeOfDay.fromISOExtString: ", isoExtString)); } return TimeOfDay(hours, minutes, seconds); @@ -9689,6 +9693,16 @@ if (units == "days") assert(!valid!"days"(2017, 2, 29)); } +private short castToYear(int year, string file = __FILE__, size_t line = __LINE__) @safe pure +{ + import std.conv : to, ConvOverflowException; + import std.format : format; + + try + return year.to!short; + catch (ConvOverflowException) + throw new DateTimeException(format("year %s doesn't fit to Date.", year), file, line); +} /++ Params: diff --git a/std/datetime/package.d b/std/datetime/package.d index 8e9f5ae83be..58e71e5aa08 100644 --- a/std/datetime/package.d +++ b/std/datetime/package.d @@ -12,6 +12,7 @@ $(TR $(TD Points in Time) $(TD + $(REF_ALTTEXT Clock, Clock, std, datetime, systime)$(NBSP) $(REF_ALTTEXT Date, Date, std, datetime, date)$(NBSP) $(REF_ALTTEXT TimeOfDay, TimeOfDay, std, datetime, date)$(NBSP) $(REF_ALTTEXT DateTime, DateTime, std, datetime, date)$(NBSP) @@ -19,7 +20,7 @@ ) ) $(TR - $(TD Timezones) + $(TD $(MREF_ALTTEXT Timezones, std, datetime, timezone)) $(TD $(REF_ALTTEXT TimeZone, TimeZone, std, datetime, timezone)$(NBSP) $(REF_ALTTEXT UTC, UTC, std, datetime, timezone)$(NBSP) @@ -38,7 +39,7 @@ ) ) $(TR - $(TD Durations of Time) + $(TD $(MREF_ALTTEXT Durations of Time, core, time)) $(TD $(REF_ALTTEXT Duration, Duration, core, time)$(NBSP) $(REF_ALTTEXT weeks, weeks, core, time)$(NBSP) @@ -62,7 +63,7 @@ ) )) - This functionality is separated into the following modules + This functionality is separated into the following modules: $(UL $(LI $(MREF std, datetime, date) for points in time without timezones.) @@ -73,6 +74,7 @@ ) See_Also: + $(MREF core, time)$(BR) $(DDLINK intro-to-datetime, Introduction to std.datetime, Introduction to std.datetime)
$(HTTP en.wikipedia.org/wiki/ISO_8601, ISO 8601)
@@ -87,7 +89,7 @@ +/ module std.datetime; -/// Get the current time from the system clock +/// Get the current time from the system clock. @safe unittest { import std.datetime.systime : SysTime, Clock; diff --git a/std/datetime/systime.d b/std/datetime/systime.d index 6898934f809..a2e52aebac5 100644 --- a/std/datetime/systime.d +++ b/std/datetime/systime.d @@ -2,7 +2,6 @@ /++ -$(SCRIPT inhibitQuickIndex = 1;) $(DIVC quickindex, $(BOOKTABLE, $(TR $(TH Category) $(TH Functions)) @@ -468,30 +467,38 @@ private: `SysTime` (though for local time applications, time zones can be ignored and it will work, since it defaults to using the local time zone). It holds its internal time in std time (hnsecs since midnight, January 1st, 1 A.D. - UTC), so it interfaces well with the system time. However, that means that, - unlike $(REF DateTime,std,datetime,date), it is not optimized for - calendar-based operations, and getting individual units from it such as - years or days is going to involve conversions and be less efficient. + UTC), so it interfaces well with the system time. An $(I hnsec) (hecto-nanosecond) is 100 nanoseconds. There are 10,000,000 hnsecs in a second. +$(PANEL + Unlike $(REF_SHORT DateTime,std,datetime,date), `SysTime` is not optimized for + calendar-based operations, and getting individual units from it such as + years or days is going to involve conversions and be less efficient. + For calendar-based operations that don't - care about time zones, then $(REF DateTime,std,datetime,date) would be + care about time zones, then $(REF_SHORT DateTime,std,datetime,date) would be the type to use. For system time, use `SysTime`. - - $(LREF Clock.currTime) will return the current time as a `SysTime`. - To convert a `SysTime` to a $(REF Date,std,datetime,date) or - $(REF DateTime,std,datetime,date), simply cast it. To convert a - $(REF Date,std,datetime,date) or $(REF DateTime,std,datetime,date) to a +) +$(P + Casting a `SysTime` to one of the following types will perform a conversion: +) + * $(REF Date,std,datetime,date) + * $(REF_SHORT DateTime,std,datetime,date) + * $(REF_SHORT TimeOfDay,std,datetime,date) +$(P + To convert a + $(REF_SHORT Date,std,datetime,date) or $(REF_SHORT DateTime,std,datetime,date) to a `SysTime`, use `SysTime`'s constructor, and pass in the intended time zone with it (or don't pass in a $(REF TimeZone,std,datetime,timezone), and the local time zone will be used). Be aware, however, that converting from a - $(REF DateTime,std,datetime,date) to a `SysTime` will not necessarily + $(REF_SHORT DateTime,std,datetime,date) to a `SysTime` will not necessarily be 100% accurate due to DST (one hour of the year doesn't exist and another occurs twice). To not risk any conversion errors, keep times as `SysTime`s. Aside from DST though, there shouldn't be any conversion problems. - +) +$(PANEL For using time zones other than local time or UTC, use $(REF PosixTimeZone,std,datetime,timezone) on Posix systems (or on Windows, if providing the TZ Database files), and use @@ -499,16 +506,20 @@ private: `SysTime` is kept internally in hnsecs from midnight, January 1st, 1 A.D. UTC. Conversion error cannot happen when changing the time zone of a `SysTime`. $(REF LocalTime,std,datetime,timezone) is the - $(REF TimeZone,std,datetime,timezone) class which represents the local time, - and `UTC` is the $(REF TimeZone,std,datetime,timezone) class which - represents UTC. `SysTime` uses $(REF LocalTime,std,datetime,timezone) if - no $(REF TimeZone,std,datetime,timezone) is provided. For more details on - time zones, see the documentation for $(REF TimeZone,std,datetime,timezone), - $(REF PosixTimeZone,std,datetime,timezone), and - $(REF WindowsTimeZone,std,datetime,timezone). - + $(REF_SHORT TimeZone,std,datetime,timezone) class which represents the local time, + and `UTC` is the $(REF_SHORT TimeZone,std,datetime,timezone) class which + represents UTC. `SysTime` uses $(REF_SHORT LocalTime,std,datetime,timezone) if + no $(REF_SHORT TimeZone,std,datetime,timezone) is provided. For more details on + time zones, see the documentation for $(REF_SHORT TimeZone,std,datetime,timezone), + $(REF_SHORT PosixTimeZone,std,datetime,timezone), and + $(REF_SHORT WindowsTimeZone,std,datetime,timezone). +) +$(P `SysTime`'s range is from approximately 29,000 B.C. to approximately 29,000 A.D. +) +See_Also: + $(RELATIVE_LINK2 .Clock.currTime, `Clock.currTime`) will return the current time as a `SysTime`. +/ struct SysTime { @@ -8868,7 +8879,7 @@ public: return retval; } catch (DateTimeException dte) - throw new DateTimeException(format("Invalid ISO String: %s", isoString)); + throw new DateTimeException(format("Invalid format for SysTime.fromISOString: %s", isoString)); } /// @@ -9098,7 +9109,8 @@ public: auto str = strip(isoExtString); auto tIndex = str.indexOf('T'); - enforce(tIndex != -1, new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString))); + enforce!DateTimeException(tIndex != -1, + format("Invalid format for SysTime.fromISOExtString: %s", isoExtString)); auto found = str[tIndex + 1 .. $].find('.', 'Z', '+', '-'); auto dateTimeStr = str[0 .. $ - found[0].length]; @@ -9146,7 +9158,7 @@ public: return retval; } catch (DateTimeException dte) - throw new DateTimeException(format("Invalid ISO Extended String: %s", isoExtString)); + throw new DateTimeException(format("Invalid format for SysTime.fromISOExtString: %s", isoExtString)); } /// @@ -9348,7 +9360,8 @@ public: auto str = strip(simpleString); auto spaceIndex = str.indexOf(' '); - enforce(spaceIndex != -1, new DateTimeException(format("Invalid Simple String: %s", simpleString))); + enforce!DateTimeException(spaceIndex != -1, + format("Invalid format for SysTime.fromSimpleString: %s", simpleString)); auto found = str[spaceIndex + 1 .. $].find('.', 'Z', '+', '-'); auto dateTimeStr = str[0 .. $ - found[0].length]; @@ -9396,7 +9409,7 @@ public: return retval; } catch (DateTimeException dte) - throw new DateTimeException(format("Invalid Simple String: %s", simpleString)); + throw new DateTimeException(format("Invalid format for SysTime.fromSimpleString: %s", simpleString)); } /// @@ -9674,16 +9687,25 @@ private: @safe unittest { import core.time : days, hours, seconds; - import std.datetime.date : DateTime; + import std.datetime.date : Date, DateTime; import std.datetime.timezone : SimpleTimeZone, UTC; + const dt = DateTime(2018, 1, 1, 10, 30, 0); // make a specific point in time in the UTC timezone - auto st = SysTime(DateTime(2018, 1, 1, 10, 30, 0), UTC()); + auto st = SysTime(dt, UTC()); + assert(st.year == 2018); + assert(st.hour == 10); + + // cast to convert + assert(cast(DateTime) st == dt); + assert(cast(Date) st == Date(2018, 1, 1)); + // make a specific point in time in the New York timezone - auto ny = SysTime( - DateTime(2018, 1, 1, 10, 30, 0), + const ny = SysTime(dt, new immutable SimpleTimeZone(-5.hours, "America/New_York") ); + assert(ny != st); + assert(ny.hour == 10); // ISO standard time strings assert(st.toISOString() == "20180101T103000Z"); @@ -9775,7 +9797,7 @@ long unixTimeToStdTime(long unixTime) @safe pure nothrow @nogc "std time"'s epoch is based on the Proleptic Gregorian Calendar per ISO 8601 and is what $(LREF SysTime) uses internally. However, holding the time - as an integer in hnescs since that epoch technically isn't actually part of + as an integer in hnsecs since that epoch technically isn't actually part of the standard, much as it's based on it, so the name "std time" isn't particularly good, but there isn't an official name for it. C# uses "ticks" for the same thing, but they aren't actually clock ticks, and the term @@ -11150,6 +11172,7 @@ if (isSomeString!S) import std.algorithm.searching : all; import std.ascii : isDigit; import std.conv : to; + import std.format : format; import std.string : representation; if (isoString.empty) @@ -11157,10 +11180,11 @@ if (isSomeString!S) auto str = isoString.representation; - enforce(str[0] == '.', new DateTimeException("Invalid ISO String")); + enforce!DateTimeException(str[0] == '.', format("Invalid format for fracSecsFromISOString: %s", isoString)); str.popFront(); - enforce(!str.empty && all!isDigit(str), new DateTimeException("Invalid ISO String")); + enforce!DateTimeException(!str.empty && all!isDigit(str), + format("Invalid format for fracSecsFromISOString: %s", isoString)); dchar[7] fullISOString = void; foreach (i, ref dchar c; fullISOString) diff --git a/std/datetime/timezone.d b/std/datetime/timezone.d index b23891808f5..4b6f27d066d 100644 --- a/std/datetime/timezone.d +++ b/std/datetime/timezone.d @@ -3339,7 +3339,7 @@ else version (Posix) Windows uses a different set of time zone names than the IANA time zone database does, and how they correspond to one another changes over time (particularly when Microsoft updates Windows). - $(HTTP unicode.org/cldr/data/common/supplemental/windowsZones.xml, windowsZones.xml) + $(HTTP github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml, windowsZones.xml) provides the current conversions (which may or may not match up with what's on a particular Windows box depending on how up-to-date it is), and parseTZConversions reads in those conversions from windowsZones.xml so that @@ -3358,7 +3358,7 @@ else version (Posix) Params: windowsZonesXMLText = The text from - $(HTTP unicode.org/cldr/data/common/supplemental/windowsZones.xml, windowsZones.xml) + $(HTTP github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml, windowsZones.xml) Throws: Exception if there is an error while parsing the given XML. @@ -3372,7 +3372,7 @@ else version (Posix) // and parse it so that it's guaranteed to be up-to-date, though // that has the downside that the code needs to worry about the // site being down or unicode.org changing the URL. - auto url = "http://unicode.org/cldr/data/common/supplemental/windowsZones.xml"; + auto url = "https://raw.githubusercontent.com/unicode-org/cldr/main/common/supplemental/windowsZones.xml"; auto conversions2 = parseTZConversions(std.net.curl.get(url)); -------------------- +/ @@ -3458,7 +3458,7 @@ TZConversions parseTZConversions(string windowsZonesXMLText) @safe pure import std.algorithm.iteration : uniq; import std.algorithm.sorting : isSorted; - // Reduced text from http://unicode.org/cldr/data/common/supplemental/windowsZones.xml + // Reduced text from https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml auto sampleFileText = ` diff --git a/std/digest/md.d b/std/digest/md.d index 0c4e42b5f7e..f4d6200b129 100644 --- a/std/digest/md.d +++ b/std/digest/md.d @@ -295,7 +295,8 @@ struct MD5 */ void put(scope const(ubyte)[] data...) @trusted pure nothrow @nogc { - uint i, index, partLen; + size_t i; + uint index, partLen; auto inputLen = data.length; //Compute number of bytes mod 64 diff --git a/std/digest/sha.d b/std/digest/sha.d index 5bbf7ea20c3..5c7c3d5dab1 100644 --- a/std/digest/sha.d +++ b/std/digest/sha.d @@ -650,7 +650,9 @@ struct SHA(uint hashBlockSize, uint digestSize) void put(scope const(ubyte)[] input...) @trusted pure nothrow @nogc { enum blockSizeInBytes = blockSize/8; - uint i, index, partLen; + + size_t i; + uint index, partLen; auto inputLen = input.length; /* Compute number of bytes mod block size (64 or 128 bytes) */ diff --git a/std/exception.d b/std/exception.d index 6ffc0f7750a..9b1a7c8a62c 100644 --- a/std/exception.d +++ b/std/exception.d @@ -416,13 +416,16 @@ void assertThrown(T : Throwable = Exception, E) Returns: `value`, if `cast(bool) value` is true. Otherwise, depending on the chosen overload, `new Exception(msg)`, `dg()` or `ex` is thrown. - Note: - `enforce` is used to throw exceptions and is therefore intended to + $(PANEL + $(NOTE `enforce` is used to throw exceptions and is therefore intended to aid in error handling. It is $(I not) intended for verifying the logic - of your program. That is what `assert` is for. Also, do not use + of your program - that is what `assert` is for.) + + Do not use `enforce` inside of contracts (i.e. inside of `in` and `out` blocks and `invariant`s), because contracts are compiled out when compiling with $(I -release). + ) If a delegate is passed, the safety and purity of this function are inferred from `Dg`'s safety and purity. @@ -836,7 +839,7 @@ string letters() ) The use in the example above is correct because `result` -was private to `letters` and is inaccessible in writing +was private to `letters` and the memory it referenced can no longer be written to after the function returns. The following example shows an incorrect use of `assumeUnique`. @@ -859,8 +862,8 @@ string letters(char first, char last) ---- ) -The example above wreaks havoc on client code because it is -modifying arrays that callers considered immutable. To obtain an +The example above wreaks havoc on client code because it modifies the +returned array that the previous caller considered immutable. To obtain an immutable array from the writable array `buffer`, replace the last line with: @@ -868,13 +871,14 @@ the last line with: return to!(string)(sneaky); // not that sneaky anymore ---- -The call will duplicate the array appropriately. +The `to` call will duplicate the array appropriately. -Note that checking for uniqueness during compilation is +$(PANEL +$(NOTE Checking for uniqueness during compilation is possible in certain cases, especially when a function is -marked as a pure function. The following example does not +marked (or inferred) as `pure`. The following example does not need to call `assumeUnique` because the compiler can infer the -uniqueness of the array in the pure function: +uniqueness of the array in the pure function:) $(RUNNABLE_EXAMPLE ---- @@ -894,6 +898,7 @@ For more on infering uniqueness see the $(B unique) and $(B lent) keywords in the $(HTTP www.cs.cmu.edu/~aldrich/papers/aldrich-dissertation.pdf, ArchJava) language. +) The downside of using `assumeUnique`'s convention-based usage is that at this time there is no @@ -1035,7 +1040,7 @@ Params: Bugs: The function is explicitly annotated `@nogc` because inference could fail, - see $(LINK2 https://issues.dlang.org/show_bug.cgi?id=17084, issue 17084). + see $(LINK2 https://issues.dlang.org/show_bug.cgi?id=17084, Bugzilla issue 17084). Returns: `true` if `source`'s representation embeds a pointer that points to `target`'s representation or somewhere inside @@ -1535,9 +1540,9 @@ version (StdUnittest) } /+ -Returns true if the field at index `i` in ($D T) shares its address with another field. +Returns true if the field at index `i` in $(D T) shares its address with another field. -Note: This does not merelly check if the field is a member of an union, but also that +Note: This does not merely check if the field is a member of an union, but also that it is not a single child. +/ package enum isUnionAliased(T, size_t i) = isUnionAliasedImpl!T(T.tupleof[i].offsetof); @@ -1627,6 +1632,9 @@ class ErrnoException : Exception /// Operating system error code. final @property uint errno() nothrow pure scope @nogc @safe { return _errno; } private uint _errno; + /// Localized error message generated through $(REF strerror_r, core,stdc,string) or $(REF strerror, core,stdc,string). + final @property string errnoMsg() nothrow pure scope @nogc @safe { return _errnoMsg; } + private string _errnoMsg; /// Constructor which takes an error message. The current global $(REF errno, core,stdc,errno) value is used as error code. this(string msg, string file = null, size_t line = 0) @safe { @@ -1637,7 +1645,8 @@ class ErrnoException : Exception this(string msg, int errno, string file = null, size_t line = 0) @safe { _errno = errno; - super(msg ~ " (" ~ errnoString(errno) ~ ")", file, line); + _errnoMsg = errnoString(errno); + super(msg ~ " (" ~ errnoMsg ~ ")", file, line); } } @@ -1792,7 +1801,7 @@ expression. @system unittest { import std.format : format; - assert("%s".format.ifThrown!Exception(e => e.classinfo.name) == "std.format.FormatException"); + assert("%s".format.ifThrown!Exception(e => typeid(e).name) == "std.format.FormatException"); } //Verify Examples @@ -1825,7 +1834,7 @@ expression. static assert(!__traits(compiles, (new Object()).ifThrown(1))); //Use a lambda to get the thrown object. - assert("%s".format().ifThrown(e => e.classinfo.name) == "std.format.FormatException"); + assert("%s".format().ifThrown(e => typeid(e).name) == "std.format.FormatException"); } @system unittest diff --git a/std/experimental/allocator/building_blocks/kernighan_ritchie.d b/std/experimental/allocator/building_blocks/kernighan_ritchie.d index 65226e7f4cb..167cf1bc6bc 100644 --- a/std/experimental/allocator/building_blocks/kernighan_ritchie.d +++ b/std/experimental/allocator/building_blocks/kernighan_ritchie.d @@ -647,7 +647,7 @@ fronting the GC allocator. import std.experimental.allocator.gc_allocator : GCAllocator; import std.typecons : Ternary; // KRRegion fronting a general-purpose allocator - ubyte[1024 * 128] buf; + align(KRRegion!().alignment) ubyte[1024 * 128] buf; auto alloc = fallbackAllocator(KRRegion!()(buf), GCAllocator.instance); auto b = alloc.allocate(100); assert(b.length == 100); @@ -827,7 +827,7 @@ version (StdUnittest) // Both sequences must work on either system - // A sequence of allocs which generates the error described in issue 16564 + // A sequence of allocs which generates the error described in https://issues.dlang.org/show_bug.cgi?id=16564 // that is a gap at the end of buf from the perspective of the allocator // for 64 bit systems (leftover balance = 8 bytes < 16) @@ -916,7 +916,7 @@ version (StdUnittest) @system unittest { import std.typecons : Ternary; - ubyte[1024] b; + align(KRRegion!().alignment) ubyte[1024] b; auto alloc = KRRegion!()(b); auto k = alloc.allocate(128); diff --git a/std/experimental/allocator/building_blocks/package.d b/std/experimental/allocator/building_blocks/package.d index 6bc527d2374..521d7ed0a47 100644 --- a/std/experimental/allocator/building_blocks/package.d +++ b/std/experimental/allocator/building_blocks/package.d @@ -43,7 +43,7 @@ alignedReallocate) APIs.)) $(TR $(TDC size_t goodAllocSize(size_t n);, $(POST $(RES) >= n)) $(TD Allocators customarily allocate memory in discretely-sized chunks. Therefore, a request for `n` bytes may result in a larger allocation. The extra memory allocated goes -unused and adds to the so-called $(HTTP goo.gl/YoKffF,internal fragmentation). +unused and adds to the so-called $(HTTPS en.wikipedia.org/wiki/Fragmentation_(computing)#Internal_fragmentation,internal fragmentation). The function `goodAllocSize(n)` returns the actual number of bytes that would be allocated upon a request for `n` bytes. This module defines a default implementation that returns `n` rounded up to a multiple of the allocator's @@ -137,7 +137,7 @@ thread-safe or not, this instance may be `shared`.)) $(H2 Sample Assembly) -The example below features an _allocator modeled after $(HTTP goo.gl/m7329l, +The example below features an _allocator modeled after $(HTTP jemalloc.net/, jemalloc), which uses a battery of free-list allocators spaced so as to keep internal fragmentation to a minimum. The `FList` definitions specify no bounds for the freelist because the `Segregator` does all size selection in diff --git a/std/experimental/allocator/building_blocks/region.d b/std/experimental/allocator/building_blocks/region.d index 8c397849f43..736b1858e43 100644 --- a/std/experimental/allocator/building_blocks/region.d +++ b/std/experimental/allocator/building_blocks/region.d @@ -695,25 +695,15 @@ struct InSituRegion(size_t size, size_t minAlign = platformAlignment) import std.conv : to; import std.traits : hasMember; import std.typecons : Ternary; + import core.thread.types : isStackGrowingDown; static assert(minAlign.isGoodStaticAlignment); static assert(size >= minAlign); - version (X86) enum growDownwards = Yes.growDownwards; - else version (X86_64) enum growDownwards = Yes.growDownwards; - else version (ARM) enum growDownwards = Yes.growDownwards; - else version (AArch64) enum growDownwards = Yes.growDownwards; - else version (HPPA) enum growDownwards = No.growDownwards; - else version (PPC) enum growDownwards = Yes.growDownwards; - else version (PPC64) enum growDownwards = Yes.growDownwards; - else version (RISCV32) enum growDownwards = Yes.growDownwards; - else version (RISCV64) enum growDownwards = Yes.growDownwards; - else version (MIPS32) enum growDownwards = Yes.growDownwards; - else version (MIPS64) enum growDownwards = Yes.growDownwards; - else version (SPARC) enum growDownwards = Yes.growDownwards; - else version (SPARC64) enum growDownwards = Yes.growDownwards; - else version (SystemZ) enum growDownwards = Yes.growDownwards; - else static assert(0, "Dunno how the stack grows on this architecture."); + static if (isStackGrowingDown) + enum growDownwards = Yes.growDownwards; + else + enum growDownwards = No.growDownwards; @disable this(this); @@ -914,7 +904,7 @@ version (DragonFlyBSD) { // sbrk is deprecated in favor of mmap (we could implement a mmap + MAP_NORESERVE + PROT_NONE version) // brk has been removed - // https://www.dragonflydigest.com/2019/02/22/22586.html + // https://web.archive.org/web/20221006070113/https://www.dragonflydigest.com/2019/02/22/22586.html // http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/dc676eaefa61b0f47bbea1c53eab86fd5ccd78c6 // http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4b5665564ef37dc939a3a9ffbafaab9894c18885 // http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/8618d94a0e2ff8303ad93c123a3fa598c26a116e @@ -978,7 +968,7 @@ version (Posix) struct SbrkRegion(uint minAlign = platformAlignment) scope(exit) pthread_mutex_unlock(cast(pthread_mutex_t*) &sbrkMutex) == 0 || assert(0); // Assume sbrk returns the old break. Most online documentation confirms - // that, except for http://www.inf.udec.cl/~leo/Malloc_tutorial.pdf, + // that, except for https://web.archive.org/web/20171014020821/http://www.inf.udec.cl/~leo/Malloc_tutorial.pdf, // which claims the returned value is not portable. auto p = sbrk(rounded); if (p == cast(void*) -1) diff --git a/std/experimental/allocator/building_blocks/stats_collector.d b/std/experimental/allocator/building_blocks/stats_collector.d index 3770af10ceb..1d1e480ec56 100644 --- a/std/experimental/allocator/building_blocks/stats_collector.d +++ b/std/experimental/allocator/building_blocks/stats_collector.d @@ -134,7 +134,7 @@ enum Options : ulong bytesNotMoved = 1u << 17, /** Measures the sum of extra bytes allocated beyond the bytes requested, i.e. - the $(HTTP goo.gl/YoKffF, internal fragmentation). This is the current + the $(HTTPS en.wikipedia.org/wiki/Fragmentation_(computing)#Internal_fragmentation, internal fragmentation). This is the current effective number of slack bytes, and it goes up and down with time. */ bytesSlack = 1u << 18, diff --git a/std/experimental/allocator/mallocator.d b/std/experimental/allocator/mallocator.d index de9afbbf7d5..087dbec449a 100644 --- a/std/experimental/allocator/mallocator.d +++ b/std/experimental/allocator/mallocator.d @@ -52,7 +52,7 @@ struct Mallocator import core.memory : pureRealloc; if (!s) { - // fuzzy area in the C standard, see http://goo.gl/ZpWeSE + // fuzzy area in the C standard, see https://stackoverflow.com/questions/6502077/malloc-and-realloc-functions // so just deallocate and nullify the pointer deallocate(b); b = null; @@ -116,93 +116,11 @@ struct Mallocator test!Mallocator(); } -version (Windows) +version (CRuntime_Microsoft) { - // DMD Win 32 bit, DigitalMars C standard library misses the _aligned_xxx - // functions family (snn.lib) - version (CRuntime_DigitalMars) - { - // Helper to cast the infos written before the aligned pointer - // this header keeps track of the size (required to realloc) and of - // the base ptr (required to free). - private struct AlignInfo - { - void* basePtr; - size_t size; - - @nogc nothrow - static AlignInfo* opCall(void* ptr) - { - return cast(AlignInfo*) (ptr - AlignInfo.sizeof); - } - } - - @nogc nothrow - private void* _aligned_malloc(size_t size, size_t alignment) - { - import core.stdc.stdlib : malloc; - size_t offset = alignment + size_t.sizeof * 2 - 1; - - // unaligned chunk - void* basePtr = malloc(size + offset); - if (!basePtr) return null; - - // get aligned location within the chunk - void* alignedPtr = cast(void**)((cast(size_t)(basePtr) + offset) - & ~(alignment - 1)); - - // write the header before the aligned pointer - AlignInfo* head = AlignInfo(alignedPtr); - head.basePtr = basePtr; - head.size = size; - - return alignedPtr; - } - - @nogc nothrow - private void* _aligned_realloc(void* ptr, size_t size, size_t alignment) - { - import core.stdc.stdlib : free; - import core.stdc.string : memcpy; - - if (!ptr) return _aligned_malloc(size, alignment); - - // gets the header from the exising pointer - AlignInfo* head = AlignInfo(ptr); - - // gets a new aligned pointer - void* alignedPtr = _aligned_malloc(size, alignment); - if (!alignedPtr) - { - //to https://msdn.microsoft.com/en-us/library/ms235462.aspx - //see Return value: in this case the original block is unchanged - return null; - } - - // copy exising data - memcpy(alignedPtr, ptr, head.size); - free(head.basePtr); - - return alignedPtr; - } - - @nogc nothrow - private void _aligned_free(void *ptr) - { - import core.stdc.stdlib : free; - if (!ptr) return; - AlignInfo* head = AlignInfo(ptr); - free(head.basePtr); - } - - } - // DMD Win 64 bit, uses microsoft standard C library which implements them - else - { - @nogc nothrow private extern(C) void* _aligned_malloc(size_t, size_t); - @nogc nothrow private extern(C) void _aligned_free(void *memblock); - @nogc nothrow private extern(C) void* _aligned_realloc(void *, size_t, size_t); - } + @nogc nothrow private extern(C) void* _aligned_malloc(size_t, size_t); + @nogc nothrow private extern(C) void _aligned_free(void *memblock); + @nogc nothrow private extern(C) void* _aligned_realloc(void *, size_t, size_t); } /** @@ -376,17 +294,17 @@ version (Posix) { // https://issues.dlang.org/show_bug.cgi?id=16398 // test the "pseudo" alignedReallocate for Posix - void[] s = AlignedMallocator.instance.alignedAllocate(16, 32); - (cast(ubyte[]) s)[] = ubyte(1); - AlignedMallocator.instance.alignedReallocate(s, 32, 32); + void[] b = AlignedMallocator.instance.alignedAllocate(16, 32); + (cast(ubyte[]) b)[] = ubyte(1); + AlignedMallocator.instance.alignedReallocate(b, 32, 32); ubyte[16] o; o[] = 1; - assert((cast(ubyte[]) s)[0 .. 16] == o); - AlignedMallocator.instance.alignedReallocate(s, 4, 32); - assert((cast(ubyte[]) s)[0 .. 3] == o[0 .. 3]); - AlignedMallocator.instance.alignedReallocate(s, 128, 32); - assert((cast(ubyte[]) s)[0 .. 3] == o[0 .. 3]); - AlignedMallocator.instance.deallocate(s); + assert((cast(ubyte[]) b)[0 .. 16] == o); + AlignedMallocator.instance.alignedReallocate(b, 4, 32); + assert((cast(ubyte[]) b)[0 .. 3] == o[0 .. 3]); + AlignedMallocator.instance.alignedReallocate(b, 128, 32); + assert((cast(ubyte[]) b)[0 .. 3] == o[0 .. 3]); + AlignedMallocator.instance.deallocate(b); void[] c; AlignedMallocator.instance.alignedReallocate(c, 32, 32); @@ -399,50 +317,3 @@ version (Posix) assert(!AlignedMallocator.instance.alignedReallocate(c, size_t.max, 4096)); AlignedMallocator.instance.deallocate(c); } - -version (CRuntime_DigitalMars) -@nogc @system nothrow unittest -{ - void* m; - - size_t m_addr() { return cast(size_t) m; } - - m = _aligned_malloc(16, 0x10); - if (m) - { - assert((m_addr & 0xF) == 0); - _aligned_free(m); - } - - m = _aligned_malloc(16, 0x100); - if (m) - { - assert((m_addr & 0xFF) == 0); - _aligned_free(m); - } - - m = _aligned_malloc(16, 0x1000); - if (m) - { - assert((m_addr & 0xFFF) == 0); - _aligned_free(m); - } - - m = _aligned_malloc(16, 0x10); - if (m) - { - assert((cast(size_t) m & 0xF) == 0); - m = _aligned_realloc(m, 32, 0x10000); - if (m) assert((m_addr & 0xFFFF) == 0); - _aligned_free(m); - } - - m = _aligned_malloc(8, 0x10); - if (m) - { - *cast(ulong*) m = 0X01234567_89ABCDEF; - m = _aligned_realloc(m, 0x800, 0x1000); - if (m) assert(*cast(ulong*) m == 0X01234567_89ABCDEF); - _aligned_free(m); - } -} diff --git a/std/experimental/allocator/mmap_allocator.d b/std/experimental/allocator/mmap_allocator.d index 4151d0e0504..494d5a3b40a 100644 --- a/std/experimental/allocator/mmap_allocator.d +++ b/std/experimental/allocator/mmap_allocator.d @@ -60,7 +60,7 @@ struct MmapAllocator // http://man7.org/linux/man-pages/man2/mmap.2.html package alias allocateZeroed = allocate; else version (NetBSD) - // http://netbsd.gw.com/cgi-bin/man-cgi?mmap+2+NetBSD-current + // https://man.netbsd.org/mmap.2 package alias allocateZeroed = allocate; else version (Solaris) // https://docs.oracle.com/cd/E88353_01/html/E37841/mmap-2.html diff --git a/std/file.d b/std/file.d index b7bd3fc91cf..2a0d1392c08 100644 --- a/std/file.d +++ b/std/file.d @@ -310,6 +310,8 @@ Params: Returns: Untyped array of bytes _read. Throws: $(LREF FileException) on error. + +See_Also: $(REF readText, std,file) for reading and validating a text file. */ void[] read(R)(R name, size_t upTo = size_t.max) @@ -497,6 +499,8 @@ version (linux) @safe unittest Throws: $(LREF FileException) if there is an error reading the file, $(REF UTFException, std, utf) on UTF decoding error. + + See_Also: $(REF read, std,file) for reading a binary file. +/ S readText(S = string, R)(auto ref R name) if (isSomeString!S && (isSomeFiniteCharInputRange!R || is(StringTypeOf!R))) @@ -1079,6 +1083,7 @@ private void removeImpl(scope const(char)[] name, scope const(FSChar)* namez) @t @safe unittest { import std.exception : collectExceptionMsg, assertThrown; + import std.algorithm.searching : startsWith; string filename = null; // e.g. as returned by File.tmpfile.name @@ -1086,12 +1091,10 @@ private void removeImpl(scope const(char)[] name, scope const(FSChar)* namez) @t { // exact exception message is OS-dependent auto msg = filename.remove.collectExceptionMsg!FileException; - assert("Failed to remove file (null): Bad address" == msg, msg); + assert(msg.startsWith("Failed to remove file (null):"), msg); } else version (Windows) { - import std.algorithm.searching : startsWith; - // don't test exact message on windows, it's language dependent auto msg = filename.remove.collectExceptionMsg!FileException; assert(msg.startsWith("(null):"), msg); @@ -4050,12 +4053,10 @@ else version (Posix) +/ void _ensureStatDone() @trusted scope { - import std.exception : enforce; - if (_didStat) return; - enforce(stat(_name.tempCString(), &_statBuf) == 0, + cenforce(stat(_name.tempCString(), &_statBuf) == 0, "Failed to stat file `" ~ _name ~ "'"); _didStat = true; @@ -4092,13 +4093,11 @@ else version (Posix) +/ void _ensureLStatDone() @trusted scope { - import std.exception : enforce; - if (_didLStat) return; stat_t statbuf = void; - enforce(lstat(_name.tempCString(), &statbuf) == 0, + cenforce(lstat(_name.tempCString(), &statbuf) == 0, "Failed to stat file `" ~ _name ~ "'"); _lstatMode = statbuf.st_mode; @@ -4180,12 +4179,12 @@ else version (Posix) assert(!de.isFile); assert(!de.isDir); assert(de.isSymlink); - assertThrown(de.size); - assertThrown(de.timeStatusChanged); - assertThrown(de.timeLastAccessed); - assertThrown(de.timeLastModified); - assertThrown(de.attributes); - assertThrown(de.statBuf); + assertThrown!FileException(de.size); + assertThrown!FileException(de.timeStatusChanged); + assertThrown!FileException(de.timeLastAccessed); + assertThrown!FileException(de.timeLastModified); + assertThrown!FileException(de.attributes); + assertThrown!FileException(de.statBuf); assert(symfile.exists); symfile.remove(); } diff --git a/std/format/internal/floats.d b/std/format/internal/floats.d index 632bf7674a6..88b9d22d7d9 100644 --- a/std/format/internal/floats.d +++ b/std/format/internal/floats.d @@ -28,6 +28,15 @@ if (is(T == float) || is(T == double) return w.data; } +/// Returns: whether `c` is a supported format specifier for floats +package(std.format) bool isFloatSpec(char c) nothrow @nogc pure @safe +{ + return c == 'a' || c == 'A' + || c == 'e' || c == 'E' + || c == 'f' || c == 'F' + || c == 'g' || c == 'G'; +} + package(std.format) void printFloat(Writer, T, Char)(auto ref Writer w, const(T) val, FormatSpec!Char f) if (is(T == float) || is(T == double) || (is(T == real) && (T.mant_dig == double.mant_dig || T.mant_dig == 64))) @@ -43,10 +52,7 @@ if (is(T == float) || is(T == double) if (sgn == "" && f.flPlus) sgn = "+"; if (sgn == "" && f.flSpace) sgn = " "; - assert(f.spec == 'a' || f.spec == 'A' - || f.spec == 'e' || f.spec == 'E' - || f.spec == 'f' || f.spec == 'F' - || f.spec == 'g' || f.spec == 'G', "unsupported format specifier"); + assert(isFloatSpec(f.spec), "unsupported format specifier"); bool is_upper = f.spec == 'A' || f.spec == 'E' || f.spec=='F' || f.spec=='G'; // special treatment for nan and inf @@ -1449,7 +1455,7 @@ if (is(T == float) || is(T == double) assert(printFloat(-0.1L, f) == "-1.000000e-01"); assert(printFloat(10.0L, f) == "1.000000e+01"); assert(printFloat(-10.0L, f) == "-1.000000e+01"); - version (Windows) {} // issue 20972 + version (Windows) {} // https://issues.dlang.org/show_bug.cgi?id=20972 else { assert(printFloat(1e4000L, f) == "1.000000e+4000"); @@ -1472,7 +1478,7 @@ if (is(T == float) || is(T == double) { // log2 is broken for x87-reals on some computers in CTFE // the following tests excludes these computers from the tests - // (issue 21757) + // (https://issues.dlang.org/show_bug.cgi?id=21757) enum test = cast(int) log2(3.05e2312L); static if (real.mant_dig == 64 && test == 7681) { @@ -2120,7 +2126,7 @@ if (is(T == float) || is(T == double) assert(printFloat(-0.1L, f) == "-0.100000"); assert(printFloat(10.0L, f) == "10.000000"); assert(printFloat(-10.0L, f) == "-10.000000"); - version (Windows) {} // issue 20972 + version (Windows) {} // https://issues.dlang.org/show_bug.cgi?id=20972 else { auto result1 = printFloat(1e4000L, f); @@ -2145,7 +2151,7 @@ if (is(T == float) || is(T == double) { // log2 is broken for x87-reals on some computers in CTFE // the following tests excludes these computers from the tests - // (issue 21757) + // (https://issues.dlang.org/show_bug.cgi?id=21757) enum test = cast(int) log2(3.05e2312L); static if (real.mant_dig == 64 && test == 7681) { @@ -2803,7 +2809,7 @@ if (is(T == float) || is(T == double) assert(printFloat(-0.1L, f) == "-0.1"); assert(printFloat(10.0L, f) == "10"); assert(printFloat(-10.0L, f) == "-10"); - version (Windows) {} // issue 20972 + version (Windows) {} // https://issues.dlang.org/show_bug.cgi?id=20972 else { assert(printFloat(1e4000L, f) == "1e+4000"); @@ -2826,7 +2832,7 @@ if (is(T == float) || is(T == double) { // log2 is broken for x87-reals on some computers in CTFE // the following tests excludes these computers from the tests - // (issue 21757) + // (https://issues.dlang.org/show_bug.cgi?id=21757) enum test = cast(int) log2(3.05e2312L); static if (real.mant_dig == 64 && test == 7681) { diff --git a/std/format/internal/read.d b/std/format/internal/read.d index 9130499081c..05d6adc6318 100644 --- a/std/format/internal/read.d +++ b/std/format/internal/read.d @@ -25,7 +25,6 @@ package(std.format): void skipData(Range, Char)(ref Range input, scope const ref FormatSpec!Char spec) { import std.ascii : isDigit; - import std.conv : text; import std.range.primitives : empty, front, popFront; switch (spec.spec) @@ -38,8 +37,7 @@ void skipData(Range, Char)(ref Range input, scope const ref FormatSpec!Char spec while (!input.empty && isDigit(input.front)) input.popFront(); break; default: - assert(false, - text("Format specifier not understood: %", spec.spec)); + assert(0, "Format specifier not understood: %" ~ spec.spec); } } @@ -161,15 +159,16 @@ if (isInputRange!Range && isSomeChar!T && !is(T == enum) && isSomeChar!(ElementT enforceFmt(find(acceptedSpecs!T, spec.spec).length, text("Wrong unformat specifier '%", spec.spec , "' for ", T.stringof)); - static if (T.sizeof == 1) + enum int size = T.sizeof; + static if (size == 1) return unformatValue!ubyte(input, spec); - else static if (T.sizeof == 2) + else static if (size == 2) return unformatValue!ushort(input, spec); - else static if (T.sizeof == 4) + else static if (size == 4) return unformatValue!uint(input, spec); else static assert(false, T.stringof ~ ".sizeof must be 1, 2, or 4 not " ~ - to!string(T.sizeof)); + size.stringof); } T unformatValueImpl(T, Range, Char)(ref Range input, scope const ref FormatSpec!Char fmt) diff --git a/std/format/internal/write.d b/std/format/internal/write.d index 7f127c09847..16c7a51d8c6 100644 --- a/std/format/internal/write.d +++ b/std/format/internal/write.d @@ -570,9 +570,9 @@ void formatValueImpl(Writer, T, Char)(auto ref Writer w, const(T) obj, scope const ref FormatSpec!Char f) if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) { - import std.algorithm.searching : find; import std.format : enforceFmt; import std.range.primitives : put; + import std.format.internal.floats : printFloat, isFloatSpec; FloatingPointTypeOf!T val = obj; const char spec = f.spec; @@ -597,11 +597,9 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) return; } - enforceFmt(find("fgFGaAeEs", spec).length, - "incompatible format character for floating point argument: %" ~ spec); - FormatSpec!Char fs = f; // fs is copy for change its values. fs.spec = spec == 's' ? 'g' : spec; + enforceFmt(isFloatSpec(fs.spec), "incompatible format character for floating point argument: %" ~ spec); static if (is(T == float) || is(T == double) || (is(T == real) && (T.mant_dig == double.mant_dig || T.mant_dig == 64))) @@ -631,7 +629,6 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) tval = -doubleLowest; } - import std.format.internal.floats : printFloat; printFloat(w, tval, fs); } @@ -738,7 +735,7 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) assert(FloatingPointControl.rounding == FloatingPointControl.roundToNearest); } - // issue 20320 + // https://issues.dlang.org/show_bug.cgi?id=20320 real a = 0.16; real b = 0.016; assert(format("%.1f", a) == "0.2"); @@ -749,7 +746,7 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) assert(format("%.1f", a1) == "0.2"); assert(format("%.2f", b1) == "0.02"); - // issue 9889 + // https://issues.dlang.org/show_bug.cgi?id=9889 assert(format("%.1f", 0.09) == "0.1"); assert(format("%.1f", -0.09) == "-0.1"); assert(format("%.1f", 0.095) == "0.1"); @@ -907,7 +904,7 @@ if (is(FloatingPointTypeOf!T) && !is(T == enum) && !hasToString!(T, Char)) // log2 is broken for x87-reals on some computers in CTFE // the following test excludes these computers from the test - // (issue 21757) + // (https://issues.dlang.org/show_bug.cgi?id=21757) enum test = cast(int) log2(3.05e2312L); static if (real.mant_dig == 64 && test == 7681) // 80 bit reals { @@ -2529,35 +2526,37 @@ if ((is(T == struct) || is(T == union)) && (hasToString!(T, Char) || !is(Builtin enum right = ")"; put(w, left); - foreach (i, e; val.tupleof) - { + static foreach (i; 0 .. T.tupleof.length) + {{ static if (__traits(identifier, val.tupleof[i]) == "this") - continue; - else static if (0 < i && val.tupleof[i-1].offsetof == val.tupleof[i].offsetof) { - static if (i == val.tupleof.length - 1 || val.tupleof[i].offsetof != val.tupleof[i+1].offsetof) + // ignore hidden context pointer + } + else static if (0 < i && T.tupleof[i-1].offsetof == T.tupleof[i].offsetof) + { + static if (i == T.tupleof.length - 1 || T.tupleof[i].offsetof != T.tupleof[i+1].offsetof) { - enum el = separator ~ val.tupleof[i].stringof[4 .. $] ~ "}"; + enum el = separator ~ __traits(identifier, T.tupleof[i]) ~ "}"; put(w, el); } else { - enum el = separator ~ val.tupleof[i].stringof[4 .. $]; + enum el = separator ~ __traits(identifier, T.tupleof[i]); put(w, el); } } - else static if (i+1 < val.tupleof.length && val.tupleof[i].offsetof == val.tupleof[i+1].offsetof) + else static if (i+1 < T.tupleof.length && T.tupleof[i].offsetof == T.tupleof[i+1].offsetof) { - enum el = (i > 0 ? separator : "") ~ "#{overlap " ~ val.tupleof[i].stringof[4 .. $]; + enum el = (i > 0 ? separator : "") ~ "#{overlap " ~ __traits(identifier, T.tupleof[i]); put(w, el); } else { static if (i > 0) put(w, separator); - formatElement(w, e, f); + formatElement(w, val.tupleof[i], f); } - } + }} put(w, right); } else @@ -2660,7 +2659,7 @@ if ((is(T == struct) || is(T == union)) && (hasToString!(T, Char) || !is(Builtin { int n; string s; - string toString() const { return s; } + string toString() @trusted const { return s; } } U2 u2; () @trusted { u2.s = "hello"; } (); @@ -3334,7 +3333,7 @@ if (isSomeString!T1 && isSomeString!T2 && isSomeString!T3 && isSomeString!T4) long fractsWidth = fracts.length; // TODO: does not take graphemes into account long suffixWidth; - // TODO: remove this workaround which hides issue 21815 + // TODO: remove this workaround which hides https://issues.dlang.org/show_bug.cgi?id=21815 if (f.width > 0) { prefixWidth = getWidth(prefix); diff --git a/std/format/package.d b/std/format/package.d index f1d47055836..e02c1202a4b 100644 --- a/std/format/package.d +++ b/std/format/package.d @@ -60,7 +60,7 @@ Limitation: This package does not support localization, but adheres to the rounding mode of the floating point unit, if available. -$(SECTION3 Format Strings) +$(H3 $(LNAME2 format-strings, Format Strings)) The functions contained in this package use $(I format strings). A format string describes the layout of another string for reading or @@ -144,7 +144,7 @@ recommended to assign (lower- and uppercase) letters. Note: The $(I Parameters) of a $(I CompoundIndicator) are currently limited to a $(B '-') flag. -$(SECTION4 Format Indicator) +$(H4 $(LNAME2 format-indicator, Format Indicator)) The $(I format indicator) can either be a single character or an expression surrounded by $(B %\() and $(B %\)). It specifies the @@ -205,7 +205,7 @@ Note: Inside a $(I compound indicator), strings and characters are escaped automatically. To avoid this behavior, use `"%-$(LPAREN)"` instead of `"%$(LPAREN)"`. -$(SECTION4 Flags) +$(H4 $(LNAME2 flags, Flags)) There are several flags that affect the outcome of the formatting. @@ -244,7 +244,7 @@ $(BOOKTABLE , sections below for more information.)) ) -$(SECTION4 Width$(COMMA) Precision and Separator) +$(H4 $(LNAME2 width-precision-separator, Width, Precision and Separator)) The $(I width) parameter specifies the minimum width of the result. @@ -269,7 +269,7 @@ The $(I separator) can also be followed by a $(B '?'). In that case, an additional argument is used to specify the symbol that should be used to separate the chunks. -$(SECTION4 Position) +$(H4 $(LNAME2 position, Position)) By default, the arguments are processed in the provided order. With the $(I position) parameter it is possible to address arguments @@ -282,7 +282,7 @@ It's also possible to use positional arguments for $(I width), $(I precision) and $(I separator) by adding a number and a $(B '$(DOLLAR)') after the $(B '*'). -$(SECTION4 Types) +$(H4 $(LNAME2 types, Types)) This section describes the result of combining types with format characters. It is organized in 2 subsections: a list of general @@ -358,7 +358,7 @@ $(BOOKTABLE , Default precision is large enough to add all digits of the integral value. - In case of ($B 'a') and $(B 'A'), the integral digit can be + In case of $(B 'a') and $(B 'A'), the integral digit can be any hexadecimal digit. ) ) diff --git a/std/format/spec.d b/std/format/spec.d index b129686f8a3..e5564c99d8f 100644 --- a/std/format/spec.d +++ b/std/format/spec.d @@ -681,7 +681,7 @@ if (is(Unqual!Char == Char)) auto fmt = "Number: %6.4e\nString: %s"; auto f = FormatSpec!char(fmt); - assert(f.writeUpToNextSpec(a) == true); + assert(f.writeUpToNextSpec(a)); assert(a.data == "Number: "); assert(f.trailing == "\nString: %s"); @@ -689,13 +689,13 @@ if (is(Unqual!Char == Char)) assert(f.width == 6); assert(f.precision == 4); - assert(f.writeUpToNextSpec(a) == true); + assert(f.writeUpToNextSpec(a)); assert(a.data == "Number: \nString: "); assert(f.trailing == ""); assert(f.spec == 's'); - assert(f.writeUpToNextSpec(a) == false); + assert(!f.writeUpToNextSpec(a)); assert(a.data == "Number: \nString: "); } diff --git a/std/format/write.d b/std/format/write.d index 2aa45d724b5..078fa786e76 100644 --- a/std/format/write.d +++ b/std/format/write.d @@ -28,7 +28,7 @@ $(TR $(TD $(I delegates)) $(TD yes) $(TD $(MDASH)) $(TD $(MDASH)) $(TD $(MDASH)) Enums can be used with all format characters of the base type. -$(SECTION3 Structs$(COMMA) Unions$(COMMA) Classes$(COMMA) and Interfaces) +$(H3 $(LNAME2 aggregates, Structs, Unions, Classes, and Interfaces)) Aggregate types can define various `toString` functions. If this function takes a $(REF_ALTTEXT FormatSpec, FormatSpec, std, format, diff --git a/std/functional.d b/std/functional.d index 70aaee39aeb..588a9c8a547 100644 --- a/std/functional.d +++ b/std/functional.d @@ -48,6 +48,9 @@ $(TR $(TH Function Name) $(TH Description) $(TD Create a unary or binary function from a string. Most often used when defining algorithms on ranges. )) + $(TR $(TD $(LREF bind)) + $(TD Passes the fields of a struct as arguments to a function. + )) )) Copyright: Copyright Andrei Alexandrescu 2008 - 2009. diff --git a/std/getopt.d b/std/getopt.d index 42aeb4099e7..cb97eebe31b 100644 --- a/std/getopt.d +++ b/std/getopt.d @@ -685,6 +685,7 @@ private void getoptImpl(T...)(ref string[] args, ref configuration cfg, import std.algorithm.mutation : remove; import std.conv : to; + import std.uni : toLower; static if (opts.length) { static if (is(typeof(opts[0]) : config)) @@ -708,7 +709,10 @@ private void getoptImpl(T...)(ref string[] args, ref configuration cfg, if (optionHelp.optLong.length) { - assert(optionHelp.optLong !in visitedLongOpts, + auto name = optionHelp.optLong; + if (!cfg.caseSensitive) + name = name.toLower(); + assert(name !in visitedLongOpts, "Long option " ~ optionHelp.optLong ~ " is multiply defined"); visitedLongOpts[optionHelp.optLong] = []; @@ -716,7 +720,10 @@ private void getoptImpl(T...)(ref string[] args, ref configuration cfg, if (optionHelp.optShort.length) { - assert(optionHelp.optShort !in visitedShortOpts, + auto name = optionHelp.optShort; + if (!cfg.caseSensitive) + name = name.toLower(); + assert(name !in visitedShortOpts, "Short option " ~ optionHelp.optShort ~ " is multiply defined"); @@ -1779,6 +1786,14 @@ void defaultGetoptFormatter(Output)(Output output, string text, Option[] opt, st assertThrown!AssertError(getopt(args, "abc", &abc, "abc", &abc)); assertThrown!AssertError(getopt(args, "abc|a", &abc, "def|a", &def)); assertNotThrown!AssertError(getopt(args, "abc", &abc, "def", &def)); + + // https://issues.dlang.org/show_bug.cgi?id=23940 + assertThrown!AssertError(getopt(args, + "abc", &abc, "ABC", &def)); + assertThrown!AssertError(getopt(args, config.caseInsensitive, + "abc", &abc, "ABC", &def)); + assertNotThrown!AssertError(getopt(args, config.caseSensitive, + "abc", &abc, "ABC", &def)); } // https://issues.dlang.org/show_bug.cgi?id=17327 repeated option use diff --git a/std/int128.d b/std/int128.d index fc992f82422..92895445aed 100644 --- a/std/int128.d +++ b/std/int128.d @@ -18,8 +18,8 @@ private import core.int128; public struct Int128 { - @safe pure nothrow @nogc: - + @safe pure nothrow @nogc + { Cent data; /// core.int128.Cent /**************** @@ -147,12 +147,57 @@ public struct Int128 /** Support casting to a bool * Params: T = bool - * Returns: boolean result + * Returns: true if value is not zero */ bool opCast(T : bool)() const { return tst(this.data); } + } // @safe pure nothrow @nogc + + /** Support casting to an integral type + * Params: T = integral type + * Returns: low bits of value reinterpreted as T + */ + T opCast(T : long)() const + if (is(byte : T)) + { + return cast(T) this.data.lo; + } + + /// + @safe unittest + { + const Int128 a = Int128(0xffff_ffff_ffff_ffffL, 0x0123_4567_89ab_cdefL); + assert(cast(long) a == 0x0123_4567_89ab_cdefL); + assert(cast(int) a == 0x89ab_cdef); + assert(cast(byte) a == cast(byte) 0xef); + } + + /** Support casting to floating point type + * Params: T = floating point type + * Returns: value cast to floating point with environment-dependent + * rounding if the value is not exactly representable + */ + T opCast(T : real)() const + { + import core.math : ldexp; + if (cast(long) this.data.hi >= 0) + return ldexp(cast(T) this.data.hi, 64) + this.data.lo; + else + { + const absData = neg(this.data); + return -ldexp(cast(T) absData.hi, 64) - absData.lo; + } + } + + /// + @safe unittest + { + const Int128 a = Int128(-1L << 60); + assert(cast(double) a == -(2.0 ^^ 60)); + assert(cast(double) (a * a) == 2.0 ^^ 120); + } /** Support binary arithmetic operators + - * / % & | ^ << >> >>> * Params: @@ -190,21 +235,49 @@ public struct Int128 } /// ditto - Int128 opBinary(string op)(long op2) const - if (op == "+" || op == "-" || + Int128 opBinary(string op, Int)(const Int op2) const + if ((op == "+" || op == "-" || op == "*" || op == "/" || op == "%" || - op == "&" || op == "|" || op == "^") + op == "&" || op == "|" || op == "^") && + is(Int : long) && __traits(isIntegral, Int)) { - return mixin("this " ~ op ~ " Int128(0, op2)"); + static if (__traits(isUnsigned, Int)) + return mixin("this " ~ op ~ " Int128(0, op2)"); + else + return mixin("this " ~ op ~ " Int128((cast(long) op2) >> 63 , op2)"); } /// ditto - Int128 opBinaryRight(string op)(long op2) const - if (op == "+" || op == "-" || + Int128 opBinary(string op, IntLike)(auto ref IntLike op2) const + if ((op == "+" || op == "-" || op == "*" || op == "/" || op == "%" || - op == "&" || op == "|" || op == "^") + op == "&" || op == "|" || op == "^") && + is(IntLike : long) && !__traits(isIntegral, IntLike)) { - mixin("return Int128(0, op2) " ~ op ~ " this;"); + return opBinary!(op)(__traits(getMember, op2, __traits(getAliasThis, IntLike)[0])); + } + + /// ditto + Int128 opBinaryRight(string op, Int)(const Int op2) const + if ((op == "+" || op == "-" || + op == "*" || op == "/" || op == "%" || + op == "&" || op == "|" || op == "^") && + is(Int : long) && __traits(isIntegral, Int)) + { + static if (__traits(isUnsigned, Int)) + mixin("return Int128(0, op2) " ~ op ~ " this;"); + else + mixin("return Int128((cast(long) op2) >> 63, op2) " ~ op ~ " this;"); + } + + /// ditto + Int128 opBinaryRight(string op, IntLike)(auto ref IntLike op2) const + if ((op == "+" || op == "-" || + op == "*" || op == "/" || op == "%" || + op == "&" || op == "|" || op == "^") && + is(IntLike : long) && !__traits(isIntegral, IntLike)) + { + return opBinaryRight!(op)(__traits(getMember, op2, __traits(getAliasThis, IntLike)[0])); } /// ditto @@ -244,32 +317,182 @@ public struct Int128 } /// ditto - ref Int128 opOpAssign(string op)(long op2) - if (op == "+" || op == "-" || + ref Int128 opOpAssign(string op, Int)(auto ref Int op2) + if ((op == "+" || op == "-" || op == "*" || op == "/" || op == "%" || op == "&" || op == "|" || op == "^" || op == "<<" || op == ">>" || op == ">>>") + && is(Int : long)) { mixin("this = this " ~ op ~ " op2;"); return this; } - /** support signed arithmentic comparison operators < <= > >= + /** support arithmentic comparison operators < <= > >= * Params: op2 = right hand operand * Returns: -1 for less than, 0 for equals, 1 for greater than */ - int opCmp(Int128 op2) const + int opCmp(Int128 op2) const @nogc nothrow pure @safe { return this == op2 ? 0 : gt(this.data, op2.data) * 2 - 1; } - /** support signed arithmentic comparison operators < <= > >= - * Params: op2 = right hand operand - * Returns: -1 for less than, 0 for equals, 1 for greater than + /// ditto + int opCmp(Int)(const Int op2) const @nogc nothrow pure @safe + if (is(Int : long) && __traits(isIntegral, Int)) + { + static if (__traits(isUnsigned, Int)) + return opCmp(Int128(0, op2)); + else + return opCmp(Int128((cast(long) op2) >> 63, op2)); + } + + /// ditto + int opCmp(IntLike)(auto ref IntLike op2) const + if (is(IntLike : long) && !__traits(isIntegral, IntLike)) + { + return opCmp(__traits(getMember, op2, __traits(getAliasThis, IntLike)[0])); + } + + /** + * Formats `Int128` with either `%d`, `%x`, `%X`, or `%s` (same as `%d`). + * + * Params: + * sink = $(REF_ALTTEXT Output range, isOutputRange, std, range, primitives) + * to write to. + * fmt = A $(REF FormatSpec, std,format) which controls how the number + * is displayed. + * + * Throws: + * $(REF FormatException, std,format) if the format specifier is + * not one of 'd', 'x', 'X', 's'. + * + * See_Also: $(REF formatValue, std,format) */ - int opCmp(long op2) const + void toString(Writer, FormatSpec)(scope ref Writer sink, scope const ref FormatSpec fmt) const { - return opCmp(Int128(0, op2)); + import std.range.primitives : put; + import std.format : FormatException, Fmt = FormatSpec; + + static if (is(FormatSpec == Fmt!Char, Char)) + { + // Puts "Char" into scope if the pattern matches. + } + static assert(is(Char), + "Expecting `FormatSpec` to be instantiation of `std.format.FormatSpec`"); + + Char[39] buf = void; + size_t bufStart = void; + Char signChar = 0; + if (fmt.spec == 'd' || fmt.spec == 's') + { + const bool isNeg = 0 > cast(long) this.data.hi; + Cent val = isNeg ? neg(this.data) : this.data; + immutable Cent radix = { lo: 10, hi: 0 }; + Cent modulus; + bufStart = buf.length; + do + { + uint x = void; + if (ugt(radix, val)) + { + x = cast(uint) val.lo; + val = Cent(0, 0); + } + else + { + val = udivmod(val, radix, modulus); + x = cast(uint) modulus.lo; + } + buf[--bufStart] = cast(Char) ('0' + x); + } while (tst(val)); + if (isNeg) + signChar = '-'; + else if (fmt.flPlus) + signChar = '+'; + else if (fmt.flSpace) + signChar = ' '; + } + else if (fmt.spec == 'x' || fmt.spec == 'X') + { + immutable hexDigits = fmt.spec == 'X' ? "0123456789ABCDEF" : "0123456789abcdef"; + ulong a = data.lo; + bufStart = buf.length - 1; + size_t penPos = buf.length - 1; + do + { + if ((buf[penPos] = hexDigits[0xF & cast(uint) a]) != '0') + bufStart = penPos; + a >>>= 4; + } while (--penPos >= buf.length - 16); + a = data.hi; + do + { + if ((buf[penPos] = hexDigits[0xF & cast(uint) a]) != '0') + bufStart = penPos; + a >>>= 4; + } while (--penPos >= buf.length - 32); + } + else + { + throw new FormatException("Format specifier not understood: %" ~ fmt.spec); + } + + const minw = (buf.length - bufStart) + int(signChar != 0); + const maxw = minw < fmt.width ? fmt.width : minw; + const difw = maxw - minw; + + static void putRepeatedChars(Char c)(scope ref Writer sink, size_t n) + { + static immutable Char[8] array = [c, c, c, c, c, c, c, c]; + foreach (_; 0 .. n / 8) + put(sink, array[0 .. 8]); + if (n & 7) + put(sink, array[0 .. n & 7]); + } + + if (!fmt.flDash && !fmt.flZero && difw) + putRepeatedChars!' '(sink, difw); + + if (signChar) + { + Char[1] signCharBuf = signChar; + put(sink, signCharBuf[0 .. 1]); + } + + if (!fmt.flDash && fmt.flZero && difw) + putRepeatedChars!'0'(sink, difw); + + put(sink, buf[bufStart .. $]); + + if (fmt.flDash && difw) + putRepeatedChars!' '(sink, difw); + } + + /** + `toString` is rarely directly invoked; the usual way of using it is via + $(REF format, std, format): + */ + @safe unittest + { + import std.format : format; + + assert(format("%s", Int128.max) == "170141183460469231731687303715884105727"); + assert(format("%s", Int128.min) == "-170141183460469231731687303715884105728"); + assert(format("%x", Int128.max) == "7fffffffffffffffffffffffffffffff"); + assert(format("%X", Int128.max) == "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); + assert(format("%032X", Int128(123L)) == "0000000000000000000000000000007B"); + assert(format("%+ 40d", Int128(123L)) == " +123"); + assert(format("%+-40d", Int128(123L)) == "+123 "); + } + + /// Also can format as `wchar` or `dchar`. + @safe unittest + { + import std.conv : to; + + assert(to!wstring(Int128.max) == "170141183460469231731687303715884105727"w); + assert(to!dstring(Int128.max) == "170141183460469231731687303715884105727"d); } enum min = Int128(long.min, 0); /// minimum value @@ -372,3 +595,59 @@ unittest c = Int128(-1L); assert(c == -1L); } + +@system unittest +{ + alias Seq(T...) = T; + Int128 c = Int128(-1L); + assert(c.opCmp(-1L) == 0); + // To avoid regression calling opCmp with any integral type needs to + // work without the compiler complaining "opCmp called with argument + // X matches both <...>". + static foreach (Int; Seq!(long, int, short, byte, ulong, uint, ushort, ubyte, dchar, wchar, char)) + assert(c < Int.max); + static foreach (Int; Seq!(int, short, byte)) + assert(c.opCmp(Int(-1)) == 0); + assert(c < true); + // To avoid regression calling opCmp with any type that converts to an + // integral type through alias this needs to work regardless of whether + // the alias is safe/pure/nothrow/nogc and regardless of whether the + // type has a disabled postblit. + static struct Wrapped(T) + { + T value; + uint count; + T get() @system { ++count; return value; } // not const + alias get this; + @disable this(this); // no implicit copies + } + assert(c.opCmp(Wrapped!long(-1)) == 0); + auto w = Wrapped!ulong(ulong.max); + w.count++; // avoid invalid D-Scanner message that w could have been declared const + assert(c < w); + + const zero = Int128(0L); + const one = Int128(1L); + const neg_one = Int128(-1L); + const neg_two = Int128(-2L); + // Correct result with ulong.max: + assert(zero + ulong.max == ulong.max); + assert(one * ulong.max == ulong.max); + assert((neg_one & ulong.max) == ulong.max); + assert((zero | ulong.max) == ulong.max); + assert((zero ^ ulong.max) == ulong.max); + // Correct result with negative arguments: + assert(zero + -1L == -1L); + assert(neg_two * -3L == 6L); + assert(neg_two / -2L == 1L); + assert(neg_two % -2L == 0L); + assert((neg_one & -1L) == -1L); + assert((zero | -1L) == -1L); + assert((zero ^ -1L) == -1L); + // Ensure alias this still works. + { + Int128 a = zero; + assert((a ^= w) == ulong.max); + } + assert((Wrapped!long(-1L) + zero) == -1L); +} diff --git a/std/internal/math/biguintcore.d b/std/internal/math/biguintcore.d index d5c4768f064..9df6bb22274 100644 --- a/std/internal/math/biguintcore.d +++ b/std/internal/math/biguintcore.d @@ -2241,31 +2241,6 @@ do return carry; } -// result = left - right -// returns carry (0 or 1) -BigDigit subSimple(BigDigit [] result,const(BigDigit) [] left, - const(BigDigit) [] right) pure nothrow -in -{ - assert(result.length == left.length, - "result and left must be of the same length"); - assert(left.length >= right.length, - "left must be longer or of equal length to right"); - assert(right.length > 0, "right must not be empty"); -} -do -{ - BigDigit carry = multibyteSub(result[0 .. right.length], - left[0 .. right.length], right, 0); - if (right.length < left.length) - { - result[right.length .. left.length] = left[right.length .. $]; - carry = multibyteIncrementAssign!('-')(result[right.length..$], carry); - } //else if (result.length == left.length+1) { result[$-1] = carry; carry=0; } - return carry; -} - - /* result = result - right * Returns carry = 1 if result was less than right. */ diff --git a/std/internal/test/range.d b/std/internal/test/range.d index 6aa9676abf1..4a5ff721d19 100644 --- a/std/internal/test/range.d +++ b/std/internal/test/range.d @@ -23,3 +23,94 @@ module std.internal.test.range; auto r = R().chunks(3); assert(r.equal!equal([[ 0, 1, 2 ], [ 3, 4 ]])); } + +// https://issues.dlang.org/show_bug.cgi?id=24415 +@safe unittest +{ + import std.range : only; + + static struct S(T) + { + T i; + + this(ref return scope inout(S) rhs) scope @safe inout pure nothrow + { + i = rhs.i; + } + } + { + auto a = only(S!int(42)); + auto b = a; + assert(!b.empty); + assert(b.front == S!int(42)); + + a.popFront(); + auto c = a; + assert(c.empty); + } + { + auto a = only(S!(const int)(42)); + auto b = a; + assert(!b.empty); + assert(b.front == S!(const int)(42)); + + a.popFront(); + auto c = a; + assert(c.empty); + } + { + auto a = only(S!(immutable int)(42)); + auto b = a; + assert(!b.empty); + assert(b.front == S!(immutable int)(42)); + + a.popFront(); + auto c = a; + assert(c.empty); + } + { + auto a = only(S!int(42), S!int(192)); + auto b = a; + assert(!b.empty); + assert(b.front == S!int(42)); + + a.popFront(); + auto c = a; + assert(!c.empty); + assert(c.front == S!int(192)); + + a.popFront(); + auto d = a; + assert(d.empty); + } + { + auto a = only(S!(const int)(42), S!(const int)(192)); + auto b = a; + assert(!b.empty); + assert(b.front == S!(const int)(42)); + + a.popFront(); + auto c = a; + assert(!c.empty); + assert(c.front == S!(const int)(192)); + + a.popFront(); + auto d = a; + assert(d.empty); + } + { + auto a = only(S!(immutable int)(42), S!(immutable int)(192)); + auto b = a; + assert(!b.empty); + assert(b.front == S!(immutable int)(42)); + + a.popFront(); + auto c = a; + assert(!c.empty); + assert(c.front == S!(immutable int)(192)); + + a.popFront(); + auto d = a; + assert(d.empty); + } +} diff --git a/std/internal/test/sumtype_example_overloads.d b/std/internal/test/sumtype_example_overloads.d new file mode 100644 index 00000000000..235659dc8b7 --- /dev/null +++ b/std/internal/test/sumtype_example_overloads.d @@ -0,0 +1,17 @@ +/++ +For testing only. + +Overload set used in std.sumtype example. Needs its own internal module so that +it can be available for `make publictests` without polluting the public API. ++/ +module std.internal.test.sumtype_example_overloads; + +import std.sumtype; + +@safe +{ + string handle(int) { return "got an int"; } + string handle(string) { return "got a string"; } + string handle(double) { return "got a double"; } + alias handle = match!handle; +} diff --git a/std/internal/unicode_comp.d b/std/internal/unicode_comp.d index 6ce79e1f66a..dba5ba4cfcd 100644 --- a/std/internal/unicode_comp.d +++ b/std/internal/unicode_comp.d @@ -6,15 +6,981 @@ import std.internal.unicode_tables; static if (size_t.sizeof == 4) { -//10144 bytes -enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)([ 0x0, 0x40, 0x5c0], [ 0x100, 0xb00, 0x10a0], [ 0x2020100, 0x4020302, 0x6020205, 0x9080702, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20001, 0x40003, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x70006, 0x8, 0x9, 0xb000a, 0x0, 0xd000c, 0xf000e, 0x10, 0x0, 0x110000, 0x130012, 0x14, 0x15, 0x170016, 0x180000, 0x19, 0x180000, 0x1b001a, 0x180000, 0x1a, 0x180000, 0x1a, 0x180000, 0x1a, 0x0, 0x1a, 0x180000, 0x1c, 0x180000, 0x1a, 0x1d0000, 0x1a, 0x0, 0x1e, 0x1f0000, 0x20, 0x210000, 0x22, 0x240023, 0x250000, 0x26, 0x27, 0x280000, 0x0, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c002b, 0x0, 0x0, 0x2d, 0x0, 0x0, 0x2e0000, 0x0, 0x2f0000, 0x0, 0x0, 0x0, 0x30, 0x310000, 0x320000, 0x33, 0x340000, 0x360035, 0x370000, 0x380000, 0x390000, 0x0, 0x0, 0x3b003a, 0x0, 0x0, 0x0, 0x3d003c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f003e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x410000, 0x0, 0x420000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x430000, 0x0, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x450000, 0x46, 0x470000, 0x0, 0x0, 0x0, 0x0, 0x490048, 0x0, 0x0, 0x4a0035, 0x4b0000, 0x4c, 0x4d0000, 0x4e, 0x0, 0x0, 0x4f0000, 0x510050, 0x0, 0x0, 0x0, 0x1a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x530000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x540000, 0x0, 0x0, 0x0, 0x550000, 0x0, 0x560000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x580057, 0x0, 0x0, 0x590000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5b0000, 0x5c0000, 0x0, 0x5d, 0x5e, 0x0, 0x0, 0x5f0048, 0x600000, 0x0, 0x620061, 0x4d0000, 0x0, 0x63, 0x640000, 0x0, 0x0, 0x650000, 0x660000, 0x67001a, 0x0, 0x0, 0x0, 0x68, 0x0, 0x69, 0x0, 0x0, 0x410000, 0x6a, 0x410000, 0x0, 0x6b0000, 0x0, 0x6c0000, 0x0, 0x0, 0x0, 0x600000, 0x0, 0x0, 0x0, 0x6d0000, 0x6e, 0x0, 0x4e0000, 0x2c0000, 0x6f, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x410000, 0x0, 0x0, 0x0, 0x0, 0x71, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x740000, 0x750000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x760000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x780000, 0x7a0079, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7d007c, 0x0, 0x7e, 0x0, 0x750000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f0000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x810000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x0, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xdcdce8e6, 0xd8e8dcdc, 0xdcdcdcdc, 0xdccacadc, 0xcadcdcdc, 0xdcdcdcca, 0xdcdcdcdc, 0xdcdcdcdc, 0x1010101, 0xdcdcdc01, 0xe6e6e6dc, 0xe6e6e6e6, 0xdce6f0e6, 0xe6e6dcdc, 0xdcdce6, 0xdce6e6e6, 0xe6dcdcdc, 0xe6dcdce8, 0xe9eaeae9, 0xe6e9eaea, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6dc00, 0xe6dce6e6, 0xdcdee6e6, 0xe6e6e6e6, 0xdcdce6e6, 0xdcdcdcdc, 0xe6dce6e6, 0xe6e4dee6, 0xd0c0b0a, 0x11100f0e, 0x14131312, 0x17001615, 0x191800, 0x1200dce6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xe6e6e6e6, 0x201f1e, 0x0, 0x0, 0x0, 0x1b000000, 0x1f1e1d1c, 0xe6222120, 0xe6dcdce6, 0xe6e6e6e6, 0xdce6e6dc, 0x0, 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0xe6e6e6e6, 0xe60000e6, 0xdce6e6e6, 0xe60000e6, 0xe6dc00e6, 0xdce6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6dce6, 0xdce6e6dc, 0xdce6dcdc, 0xe6dce6dc, 0xe6dce6e6, 0xe6dce6dc, 0xe6e6dc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xe6e6e6e6, 0xe6dce6e6, 0x0, 0x0, 0xdc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0xe600e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e600, 0xe6e6e600, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdce6, 0xe6e6e6e6, 0x0, 0x0, 0xe6e60000, 0xdce6e6e6, 0xdcdcdcdc, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xdc00e6e6, 0xe6dce6e6, 0xe6e6dce6, 0xdcdcdce6, 0xe61d1c1b, 0xe6dce6e6, 0xe6dcdce6, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x900, 0xe6dce600, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x900, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe60000, 0x0, 0x0, 0x0, 0x900, 0x0, 0x5b5400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x9, 0x0, 0x0, 0x90000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x96767, 0x0, 0x0, 0x0, 0x6b6b6b6b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97676, 0x0, 0x0, 0x0, 0x7a7a7a7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc00dc00, 0xd800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x828100, 0x84, 0x82820000, 0x8282, 0xe6e60082, 0xe6e60009, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7000000, 0x90900, 0x0, 0x0, 0x0, 0x0, 0xdc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x909, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90000, 0x0, 0x0, 0xe600, 0x0, 0x0, 0xe400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdce6de00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xdc, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0xe6e6e600, 0xe6e6e6e6, 0xdc0000e6, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xdcdcdce6, 0xe6dcdcdc, 0xdc00dce6, 0xdce6e6dc, 0xe6e6e6dc, 0xe6dce6e6, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xe6e6e6dc, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9090000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70000, 0x0, 0x0, 0x9090000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6, 0xdcdcdc01, 0xe6e6dcdc, 0xdcdcdcdc, 0x10100e6, 0x1010101, 0x1, 0xdc00, 0x0, 0xe6, 0xe6e6, 0x0, 0xe6dce6e6, 0xe6e6e6e6, 0xe6dce6e6, 0xdcd6eae6, 0xe6e6e6ca, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe4e8e6e6, 0xe6dadce4, 0xdce6dce9, 0x0, 0x0, 0x0, 0x0, 0x101e6e6, 0xe6e6e6e6, 0xe6010101, 0xe6, 0xe600, 0xe6010100, 0x101e6dc, 0xdcdcdcdc, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0x0, 0x0, 0xe4da0000, 0xe0e0dee8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80800, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0x0, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0x0, 0x0, 0x0, 0x0, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x90000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc000000, 0xdcdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7000000, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e600e6, 0xe60000dc, 0xe6, 0xe6e60000, 0xe600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a0000, 0xe6e6e6e6, 0xdce6e6e6, 0xdcdcdcdc, 0xe6e6dcdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc00, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0xe600dc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc01e6, 0x9000000, 0x0, 0xdce600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdc00, 0x0, 0xdcdc0000, 0xdce6e6e6, 0xdcdcdce6, 0xdc, 0x0, 0x0, 0x0, 0xdce60000, 0xdce6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70900, 0x0, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x9, 0x0, 0x0, 0x9, 0x0, 0x70000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70900, 0x0, 0x0, 0x0, 0x0, 0x90700, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7000000, 0x7, 0x0, 0xe6e60000, 0xe6e6e6e6, 0xe6, 0xe6e6e6e6, 0xe6, 0x0, 0x0, 0x90000, 0x70000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe60000, 0x7090000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7090000, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90900, 0x7000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x900, 0x0, 0x70000, 0x909, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x90900, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1010101, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x606, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x1d8d800, 0x101, 0xd8d8e200, 0xd8d8d8, 0x0, 0xdc000000, 0xdcdcdcdc, 0xdcdcdc, 0xe6e6e600, 0xdcdce6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0xe6e60000, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0xe6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe6e6e6e6, 0xe60000e6, 0xe6e6e6e6, 0xe600e6e6, 0xe6e600e6, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe60000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6dce8e8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdcdc, 0xdcdcdc, 0x0, 0x0, 0x0, 0xe6e6e6e6, 0x7e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +//10272 bytes +enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x" +0000000000000040000005C0", +x" +0000010000000B0000001120", +x" +020201000402030206020205090807020000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000002000100040003000000000000000000000000000000000000000500000000 +0000000000000000000700060000000800000009000B000A00000000000D000C000F000E000000100000000000110000 +00130012000000140000001500170016001800000000001900180000001B001A001800000000001A001800000000001A +001800000000001A000000000000001A001800000000001C001800000000001A001D00000000001A000000000000001E +001F00000000002000210000000000220024002300250000000000260000002700280000000000000000002900000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000002A0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +002C002B00000000000000000000002D0000000000000000002E000000000000002F0000000000000000000000000000 +0000003000310000003200000000003300340000003600350037000000380000003900000000000000000000003B003A +000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000003F003E0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000004000000000000000410000000000000042000000000000000000000000000000000000 +000000000000000000000000000000000043000000000000000000440000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000450000000000460047000000000000000000000000000000000000 +004900480000000000000000004A0035004B00000000004C004D00000000004E0000000000000000004F000000510050 +000000000000000000000000001A00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +005300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000005400000000000000000000000000000055000000000000005600000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +005800570000000000000000005900000000000000000000000000000000000000000000000000000000000000000000 +005A0000005B000000000000000000000000000000000000005C0000005D0000000000000000005E0000005F00000000 +0000000000600048006100000000000000630062004D0000000000000000006400650000000000000000000000660000 +006700000068001A0000000000000069000000000000006A000000000000006B0000000000000000004100000000006C +0041000000000000006D000000000000006E000000000000000000000000000000610000000000000000000000000000 +006F00000000007000000000004E0000002C000000000071000000720000000000000000000000000000000000000000 +004100000000000000000000000000000000000000000073000000740000000000000000000000000000000000000000 +000000000000007500000000000000000000000000000000000000000000000000760000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000770000 +007800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000079000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000007A0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000007B0000007D007C00000000000000000000007E0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000080007F00000000000000810000000000780000000000000000000000000000 +000000000000000000820000008300000000000000000000000000000000000000000000000000000000000000840000 +000000000000000000000000008500000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000860000000000000087000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6DCDCE8E6D8E8DCDCDCDCDCDC +DCCACADCCADCDCDCDCDCDCCADCDCDCDCDCDCDCDC01010101DCDCDC01E6E6E6DCE6E6E6E6DCE6F0E6E6E6DCDC00DCDCE6 +DCE6E6E6E6DCDCDCE6DCDCE8E9EAEAE9E6E9EAEAE6E6E6E6E6E6E6E6E6E6E6E600000000000000000000000000000000 +E6000000E6E6E6E600000000000000000000000000000000000000000000000000000000000000000000000000000000 +E6E6DC00E6DCE6E6DCDEE6E6E6E6E6E6DCDCE6E6DCDCDCDCE6DCE6E6E6E4DEE60D0C0B0A11100F0E1413131217001615 +001918001200DCE600000000000000000000000000000000000000000000000000000000000000000000000000000000 +E6E6E6E6E6E6E6E600201F1E0000000000000000000000001B0000001F1E1D1CE6222120E6DCDCE6E6E6E6E6DCE6E6DC +000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000 +00000000E6E60000E6E6E6E6E60000E6DCE6E6E6E60000E6E6DC00E60000DCE600000000000000000000000000000000 +000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000 +E6E6DCE6DCE6E6DCDCE6DCDCE6DCE6DCE6DCE6E6E6DCE6DC00E6E6DC0000000000000000000000000000000000000000 +0000000000000000E6000000E6E6E6E6E6DCE6E600000000000000000000DC0000000000000000000000000000000000 +00000000E6E60000E600E6E6E6E6E6E6E6E6E6E6E6E6E600E6E6E6000000E6E600000000000000000000000000000000 +000000000000000000000000000000000000000000000000DCDCDC000000000000000000000000000000000000000000 +00000000E6000000DCDCDCE6E6E6E6E60000000000000000E6E60000DCE6E6E6DCDCDCDCE6E6E6E6E6E6E6E6E6E6E6E6 +DC00E6E6E6DCE6E6E6E6DCE6DCDCDCE6E61D1C1BE6DCE6E6E6DCDCE6E6E6E6E600000000000000000000000000000000 +0000000000000000000000000000000700000000000000000000000000000900E6DCE600000000E60000000000000000 +000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000E600000000000000000000000000000000090000000000005B54000000000000000000 +000000000000000000000000000000000000000000000000090000000000000900000000000000000009000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000009676700000000 +00000000000000006B6B6B6B000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000976760000000000000000000000007A7A7A7A0000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000DCDC0000000000000000000000000000000000000000 +00000000DC00DC000000D800000000000000000000000000000000000000000000828100000000848282000000008282 +E6E60082E6E600090000000000000000000000000000000000000000000000000000000000DC00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000070000000009090000000000 +0000000000000000000000000000DC000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000E6E6E6000000000000000000000000000000000000000000000009090000000000000000 +000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000 +0009000000000000000000000000E60000000000000000000000E4000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000DCE6DE000000000000000000000000000000000000000000 +00000000E6000000000000DC000000000000000900000000000000000000000000000000E6E6E600E6E6E6E6DC0000E6 +00000000000000000000000000000000E6E6E6E6DCDCDCE6E6DCDCDCDC00DCE6DCE6E6DCE6E6E6DCE6DCE6E600E6E6E6 +000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000 +00000000000000090000000000000000000000000000000000000000000000000000000000000000E6000000E6E6E6DC +E6E6E6E60000000000000000000000000000000000000000090900000000000000000000000000000000000000000000 +000000000007000000000000000000000909000000000000000000000000000000000000000000000000000000000000 +000000000700000000000000000000000000000000000000000000000000000000E6E6E6DCDCDC01E6E6DCDCDCDCDCDC +010100E601010101000000010000DC0000000000000000E60000E6E600000000E6DCE6E6E6E6E6E6E6DCE6E6DCD6EAE6 +E6E6E6CAE6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6DADCE4DCE6DCE9 +000000000000000000000000000000000101E6E6E6E6E6E6E6010101000000E60000E600E60101000101E6DCDCDCDCDC +000000E6000000000000000000000000000000000000000000000000E60000000000E6E6000000000000000000000000 +0000000000000000000000000000000000000000000000000000000009000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 +E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000000000000000E4DA0000E0E0DEE800000000000000000000000000000000 +0000000000000000000000000000000000000000000000000008080000000000000000000000000000000000E6000000 +00000000E6E6E6E6E6E6E6E60000E6E600000000000000000000000000000000000000000000000000000000E6E60000 +000000000000000000000000000000000000E6E600000000000000000000000000000000000900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000 +E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E60000000000000000000000000000000000000000DC0000000000DCDC +000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000 +000000000000000000000000000000000700000000000000000000000000000000000009000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000E6E600E6E60000DC000000E6E6E60000 +0000E6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000090000000000000000000000000000000000000000000000000000000000000000000000000000001A0000 +E6E6E6E6DCE6E6E6DCDCDCDCE6E6DCDC0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000DC00000000DC00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000E6E6000000E6E6E600000000000000000000000000000000E600DC00 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000DC01E609000000 +0000000000DCE60000000000000000000000000000000000000000000000000000000000E6E6E6E60000000000000000 +000000000000000000000000000000000000000000000000E6E6E6000000E6E600000000000000000000000000000000 +0000000000000000E6000000000000E60000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000DCDCDC0000000000DCDC0000DCE6E6E6DCDCDCE6000000DC000000000000000000000000 +DCE600000000DCE600000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000090000000000000000090000000000000000000000000000000000000000000000000000000007090000000000 +00E6E6E60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +090000000000000900000000000000000000000900000000000700000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000070900000000000000000000000000000000000009070000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000007 +00000000E6E60000E6E6E6E6000000E6E6E6E6E6000000E6000000000000000000000000000000000000000009090000 +000000090000000000000000000000000009000000070000000000000000000000000000000000000000000000E60000 +070900000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000070900000000000000000000 +000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000909000700000000000000000000000000000000000000000000000000000000000000 +000000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000900000000000007000000000909000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000009000000000000000000000000090900000000000000000000000000 +000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000 +000000000000000000000000000000000101010100000001000000000000000000000000000000000000000000000000 +E6E6E6E600E6E6E600000000000000000000000000000000000000000000000000000606000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000100000000000001D8D80000000101D8D8E200 +00D8D8D800000000DC000000DCDCDCDC00DCDCDCE6E6E600DCDCE6E60000000000000000000000000000000000000000 +0000000000000000E6E600000000E6E600000000000000000000000000000000E6E60000000000E60000000000000000 +00000000000000000000000000000000E6E6E6E600E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6E6E6E6E6 +E600E6E6E6E600E600E6E6E60000000000000000000000000000000000000000000000000000000000000000E6000000 +0000000000000000000000000000000000000000000000000000000000E6000000000000000000000000000000000000 +000000000000000000000000E6E6E6E600000000000000000000000000000000000000000000000000000000E6DCE8E8 +00000000000000000000000000000000000000000000000000000000DCE6000000000000000000000000000000000000 +00000000000000000000000000000000DCDCDCDC00DCDCDC000000000000000000000000E6E6E6E60007E6E600000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11; -enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)([ 0x0, 0x800], [ 0x1000, 0x2600], [ 0x10000, 0x30002, 0x50004, 0x70006, 0x70008, 0x70007, 0x90007, 0xa0007, 0xc000b, 0x70007, 0x70007, 0x70007, 0x7000d, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0xf000e, 0x70010, 0x70011, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8010800, 0xffff0802, 0x8003ffff, 0x28161813, 0x8821301b, 0x38330832, 0x7841383a, 0x28510850, 0x185c3056, 0x8068485f, 0xffff1078, 0x3882407a, 0x98903889, 0x30a510a3, 0x48ad10ab, 0xffff30b6, 0xffffffff, 0xffffffff, 0x80bcffff, 0x28cf18cc, 0x88da30d4, 0x38ec08eb, 0x70fb40f3, 0x290b1109, 0x19163110, 0x81224919, 0xffff1132, 0x393c4134, 0x994b4143, 0x3960115e, 0x51691167, 0xffff3173, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff1979, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff217c, 0x9810980, 0x9841182, 0xffffffff, 0xffff2185, 0xffffffff, 0x989ffff, 0xffffffff, 0xffffffff, 0x198e218a, 0xffff0991, 0xffff0992, 0xffffffff, 0xffff2193, 0xffffffff, 0xffffffff, 0xffff2197, 0x99c099b, 0x99f119d, 0xffffffff, 0xffff21a0, 0xffffffff, 0x9a4ffff, 0xffffffff, 0xffffffff, 0x19a921a5, 0xffff09ac, 0xffff09ad, 0xffffffff, 0xffff21ae, 0xffffffff, 0xffffffff, 0x21b621b2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x11bc11ba, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x11c011be, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9c309c2, 0xffffffff, 0xffffffff, 0x9c509c4, 0xffffffff, 0xffffffff, 0xffffffff, 0x9c709c6, 0x9c909c8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9caffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x29d029cb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x29d5ffff, 0xffff29da, 0xffffffff, 0xffffffff, 0x9dfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9e109e0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9e309e2, 0x9e509e4, 0xffffffff, 0xffffffff, 0x9e709e6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff09e8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x39e9ffff, 0xffffffff, 0x21f0ffff, 0x29f4ffff, 0x39f9ffff, 0xffffffff, 0xffffffff, 0x2200ffff, 0xa04ffff, 0xffffffff, 0x3205ffff, 0xffffffff, 0x2a0bffff, 0xffffffff, 0xffff0a10, 0xffff0a11, 0x4212ffff, 0xffffffff, 0x221affff, 0x321effff, 0x4224ffff, 0xffffffff, 0xffffffff, 0x222cffff, 0x1230ffff, 0xffffffff, 0x4232ffff, 0xffffffff, 0x323affff, 0x1a431a40, 0xffffffff, 0xffff0a46, 0xffffffff, 0xffff1247, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a49, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff124a, 0xa4cffff, 0x1a4dffff, 0xa521250, 0xffff2253, 0xffff0a57, 0xffffffff, 0xffff0a58, 0xffffffff, 0x2259ffff, 0xffffffff, 0xa5dffff, 0xffffffff, 0xa5effff, 0xa5fffff, 0xffffffff, 0xffff1260, 0xa62ffff, 0x1a63ffff, 0xa681266, 0xffff2269, 0xffff0a6d, 0xffffffff, 0xffff0a6e, 0xffffffff, 0x226fffff, 0xffffffff, 0xa73ffff, 0xffffffff, 0xa74ffff, 0xa75ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a76, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa780a77, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa7a0a79, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa7c0a7b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1a7dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a80, 0xffff0a81, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa82ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a83, 0xa84ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a85, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a86, 0xa87ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1288ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1a8affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a8d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa90128e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0a91, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa92ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff1a93, 0xffffffff, 0xffff0a96, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa991297, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1a9affff, 0xffffffff, 0xffff0a9d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa9effff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa9fffff, 0xaa0ffff, 0xaa1ffff, 0xaa2ffff, 0xaa3ffff, 0xffffffff, 0xaa4ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0aa5, 0xffff0aa6, 0xaa80aa7, 0xffffffff, 0xffff0aa9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xaab0aaa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xaad0aac, 0xffffffff, 0xffffffff, 0xffffffff, 0xaaf0aae, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x12b212b0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xab50ab4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xab70ab6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x22bc22b8, 0xac10ac0, 0xac30ac2, 0xac50ac4, 0x22ca22c6, 0xacf0ace, 0xad10ad0, 0xad30ad2, 0x12d612d4, 0xffffffff, 0xffffffff, 0xffffffff, 0x12da12d8, 0xffffffff, 0xffffffff, 0xffffffff, 0x22e022dc, 0xae50ae4, 0xae70ae6, 0xae90ae8, 0x22ee22ea, 0xaf30af2, 0xaf50af4, 0xaf70af6, 0x1afb1af8, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b011afe, 0xffffffff, 0xffffffff, 0xffffffff, 0x13061304, 0xffffffff, 0xffffffff, 0xffffffff, 0x130a1308, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b0f1b0c, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b12ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x23192315, 0xb1e0b1d, 0xb200b1f, 0xb220b21, 0x23272323, 0xb2c0b2b, 0xb2e0b2d, 0xb300b2f, 0xffff0b31, 0xffffffff, 0xffff0b32, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b33, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b34, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b35ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b38, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b39, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff1b3a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b3d, 0xffff0b3e, 0xffff0b3f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b40, 0xffff0b41, 0xffff0b42, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb43ffff, 0xffffffff, 0xffffffff, 0xffff0b44, 0xb45ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb46ffff, 0xb47ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b48, 0xffffffff, 0xffffffff, 0xb49ffff, 0xb4affff, 0xffffffff, 0xffff0b4b, 0xffffffff, 0xb4cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb4dffff, 0xffffffff, 0xb4f0b4e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb510b50, 0xffffffff, 0xb530b52, 0xffffffff, 0xb550b54, 0xb570b56, 0xffffffff, 0xffffffff, 0xb590b58, 0xffffffff, 0xb5b0b5a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb5cffff, 0xffff0b5d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b5e, 0xffffffff, 0xffffffff, 0xb600b5f, 0xb61ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb630b62, 0xb650b64, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b66, 0xffffffff, 0xb67ffff, 0xb68ffff, 0xb69ffff, 0xb6affff, 0xb6bffff, 0xb6cffff, 0xb6dffff, 0xb6effff, 0xb6fffff, 0xb70ffff, 0xb71ffff, 0xb72ffff, 0xffffffff, 0xffff0b73, 0xffff0b74, 0xffff0b75, 0xffffffff, 0xffffffff, 0x1376ffff, 0xffffffff, 0xffff1378, 0x137affff, 0xffffffff, 0xffff137c, 0x137effff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb80ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b81, 0xffffffff, 0xb82ffff, 0xb83ffff, 0xb84ffff, 0xb85ffff, 0xb86ffff, 0xb87ffff, 0xb88ffff, 0xb89ffff, 0xb8affff, 0xb8bffff, 0xb8cffff, 0xb8dffff, 0xffffffff, 0xffff0b8e, 0xffff0b8f, 0xffff0b90, 0xffffffff, 0xffffffff, 0x1391ffff, 0xffffffff, 0xffff1393, 0x1395ffff, 0xffffffff, 0xffff1397, 0x1399ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb9bffff, 0xb9d0b9c, 0xffff0b9e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb9fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xba0ffff, 0xba1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xba2ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xba3ffff, 0xffff0ba4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x13a5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1ba7ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xbab0baa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xbacffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -@property immutable(CompEntry[]) compositionTable() nothrow pure @nogc @safe -{ -alias CE = CompEntry; -static immutable CE[] t = [CE(0x00338, 0x0226e),CE(0x00338, 0x02260),CE(0x00338, 0x0226f),CE(0x00300, 0x000c0),CE(0x00301, 0x000c1),CE(0x00302, 0x000c2),CE(0x00303, 0x000c3),CE(0x00304, 0x00100),CE(0x00306, 0x00102),CE(0x00307, 0x00226),CE(0x00308, 0x000c4),CE(0x00309, 0x01ea2),CE(0x0030a, 0x000c5),CE(0x0030c, 0x001cd),CE(0x0030f, 0x00200),CE(0x00311, 0x00202),CE(0x00323, 0x01ea0),CE(0x00325, 0x01e00),CE(0x00328, 0x00104),CE(0x00307, 0x01e02),CE(0x00323, 0x01e04),CE(0x00331, 0x01e06),CE(0x00301, 0x00106),CE(0x00302, 0x00108),CE(0x00307, 0x0010a),CE(0x0030c, 0x0010c),CE(0x00327, 0x000c7),CE(0x00307, 0x01e0a),CE(0x0030c, 0x0010e),CE(0x00323, 0x01e0c),CE(0x00327, 0x01e10),CE(0x0032d, 0x01e12),CE(0x00331, 0x01e0e),CE(0x00300, 0x000c8),CE(0x00301, 0x000c9),CE(0x00302, 0x000ca),CE(0x00303, 0x01ebc),CE(0x00304, 0x00112),CE(0x00306, 0x00114),CE(0x00307, 0x00116),CE(0x00308, 0x000cb),CE(0x00309, 0x01eba),CE(0x0030c, 0x0011a),CE(0x0030f, 0x00204),CE(0x00311, 0x00206),CE(0x00323, 0x01eb8),CE(0x00327, 0x00228),CE(0x00328, 0x00118),CE(0x0032d, 0x01e18),CE(0x00330, 0x01e1a),CE(0x00307, 0x01e1e),CE(0x00301, 0x001f4),CE(0x00302, 0x0011c),CE(0x00304, 0x01e20),CE(0x00306, 0x0011e),CE(0x00307, 0x00120),CE(0x0030c, 0x001e6),CE(0x00327, 0x00122),CE(0x00302, 0x00124),CE(0x00307, 0x01e22),CE(0x00308, 0x01e26),CE(0x0030c, 0x0021e),CE(0x00323, 0x01e24),CE(0x00327, 0x01e28),CE(0x0032e, 0x01e2a),CE(0x00300, 0x000cc),CE(0x00301, 0x000cd),CE(0x00302, 0x000ce),CE(0x00303, 0x00128),CE(0x00304, 0x0012a),CE(0x00306, 0x0012c),CE(0x00307, 0x00130),CE(0x00308, 0x000cf),CE(0x00309, 0x01ec8),CE(0x0030c, 0x001cf),CE(0x0030f, 0x00208),CE(0x00311, 0x0020a),CE(0x00323, 0x01eca),CE(0x00328, 0x0012e),CE(0x00330, 0x01e2c),CE(0x00302, 0x00134),CE(0x00301, 0x01e30),CE(0x0030c, 0x001e8),CE(0x00323, 0x01e32),CE(0x00327, 0x00136),CE(0x00331, 0x01e34),CE(0x00301, 0x00139),CE(0x0030c, 0x0013d),CE(0x00323, 0x01e36),CE(0x00327, 0x0013b),CE(0x0032d, 0x01e3c),CE(0x00331, 0x01e3a),CE(0x00301, 0x01e3e),CE(0x00307, 0x01e40),CE(0x00323, 0x01e42),CE(0x00300, 0x001f8),CE(0x00301, 0x00143),CE(0x00303, 0x000d1),CE(0x00307, 0x01e44),CE(0x0030c, 0x00147),CE(0x00323, 0x01e46),CE(0x00327, 0x00145),CE(0x0032d, 0x01e4a),CE(0x00331, 0x01e48),CE(0x00300, 0x000d2),CE(0x00301, 0x000d3),CE(0x00302, 0x000d4),CE(0x00303, 0x000d5),CE(0x00304, 0x0014c),CE(0x00306, 0x0014e),CE(0x00307, 0x0022e),CE(0x00308, 0x000d6),CE(0x00309, 0x01ece),CE(0x0030b, 0x00150),CE(0x0030c, 0x001d1),CE(0x0030f, 0x0020c),CE(0x00311, 0x0020e),CE(0x0031b, 0x001a0),CE(0x00323, 0x01ecc),CE(0x00328, 0x001ea),CE(0x00301, 0x01e54),CE(0x00307, 0x01e56),CE(0x00301, 0x00154),CE(0x00307, 0x01e58),CE(0x0030c, 0x00158),CE(0x0030f, 0x00210),CE(0x00311, 0x00212),CE(0x00323, 0x01e5a),CE(0x00327, 0x00156),CE(0x00331, 0x01e5e),CE(0x00301, 0x0015a),CE(0x00302, 0x0015c),CE(0x00307, 0x01e60),CE(0x0030c, 0x00160),CE(0x00323, 0x01e62),CE(0x00326, 0x00218),CE(0x00327, 0x0015e),CE(0x00307, 0x01e6a),CE(0x0030c, 0x00164),CE(0x00323, 0x01e6c),CE(0x00326, 0x0021a),CE(0x00327, 0x00162),CE(0x0032d, 0x01e70),CE(0x00331, 0x01e6e),CE(0x00300, 0x000d9),CE(0x00301, 0x000da),CE(0x00302, 0x000db),CE(0x00303, 0x00168),CE(0x00304, 0x0016a),CE(0x00306, 0x0016c),CE(0x00308, 0x000dc),CE(0x00309, 0x01ee6),CE(0x0030a, 0x0016e),CE(0x0030b, 0x00170),CE(0x0030c, 0x001d3),CE(0x0030f, 0x00214),CE(0x00311, 0x00216),CE(0x0031b, 0x001af),CE(0x00323, 0x01ee4),CE(0x00324, 0x01e72),CE(0x00328, 0x00172),CE(0x0032d, 0x01e76),CE(0x00330, 0x01e74),CE(0x00303, 0x01e7c),CE(0x00323, 0x01e7e),CE(0x00300, 0x01e80),CE(0x00301, 0x01e82),CE(0x00302, 0x00174),CE(0x00307, 0x01e86),CE(0x00308, 0x01e84),CE(0x00323, 0x01e88),CE(0x00307, 0x01e8a),CE(0x00308, 0x01e8c),CE(0x00300, 0x01ef2),CE(0x00301, 0x000dd),CE(0x00302, 0x00176),CE(0x00303, 0x01ef8),CE(0x00304, 0x00232),CE(0x00307, 0x01e8e),CE(0x00308, 0x00178),CE(0x00309, 0x01ef6),CE(0x00323, 0x01ef4),CE(0x00301, 0x00179),CE(0x00302, 0x01e90),CE(0x00307, 0x0017b),CE(0x0030c, 0x0017d),CE(0x00323, 0x01e92),CE(0x00331, 0x01e94),CE(0x00300, 0x000e0),CE(0x00301, 0x000e1),CE(0x00302, 0x000e2),CE(0x00303, 0x000e3),CE(0x00304, 0x00101),CE(0x00306, 0x00103),CE(0x00307, 0x00227),CE(0x00308, 0x000e4),CE(0x00309, 0x01ea3),CE(0x0030a, 0x000e5),CE(0x0030c, 0x001ce),CE(0x0030f, 0x00201),CE(0x00311, 0x00203),CE(0x00323, 0x01ea1),CE(0x00325, 0x01e01),CE(0x00328, 0x00105),CE(0x00307, 0x01e03),CE(0x00323, 0x01e05),CE(0x00331, 0x01e07),CE(0x00301, 0x00107),CE(0x00302, 0x00109),CE(0x00307, 0x0010b),CE(0x0030c, 0x0010d),CE(0x00327, 0x000e7),CE(0x00307, 0x01e0b),CE(0x0030c, 0x0010f),CE(0x00323, 0x01e0d),CE(0x00327, 0x01e11),CE(0x0032d, 0x01e13),CE(0x00331, 0x01e0f),CE(0x00300, 0x000e8),CE(0x00301, 0x000e9),CE(0x00302, 0x000ea),CE(0x00303, 0x01ebd),CE(0x00304, 0x00113),CE(0x00306, 0x00115),CE(0x00307, 0x00117),CE(0x00308, 0x000eb),CE(0x00309, 0x01ebb),CE(0x0030c, 0x0011b),CE(0x0030f, 0x00205),CE(0x00311, 0x00207),CE(0x00323, 0x01eb9),CE(0x00327, 0x00229),CE(0x00328, 0x00119),CE(0x0032d, 0x01e19),CE(0x00330, 0x01e1b),CE(0x00307, 0x01e1f),CE(0x00301, 0x001f5),CE(0x00302, 0x0011d),CE(0x00304, 0x01e21),CE(0x00306, 0x0011f),CE(0x00307, 0x00121),CE(0x0030c, 0x001e7),CE(0x00327, 0x00123),CE(0x00302, 0x00125),CE(0x00307, 0x01e23),CE(0x00308, 0x01e27),CE(0x0030c, 0x0021f),CE(0x00323, 0x01e25),CE(0x00327, 0x01e29),CE(0x0032e, 0x01e2b),CE(0x00331, 0x01e96),CE(0x00300, 0x000ec),CE(0x00301, 0x000ed),CE(0x00302, 0x000ee),CE(0x00303, 0x00129),CE(0x00304, 0x0012b),CE(0x00306, 0x0012d),CE(0x00308, 0x000ef),CE(0x00309, 0x01ec9),CE(0x0030c, 0x001d0),CE(0x0030f, 0x00209),CE(0x00311, 0x0020b),CE(0x00323, 0x01ecb),CE(0x00328, 0x0012f),CE(0x00330, 0x01e2d),CE(0x00302, 0x00135),CE(0x0030c, 0x001f0),CE(0x00301, 0x01e31),CE(0x0030c, 0x001e9),CE(0x00323, 0x01e33),CE(0x00327, 0x00137),CE(0x00331, 0x01e35),CE(0x00301, 0x0013a),CE(0x0030c, 0x0013e),CE(0x00323, 0x01e37),CE(0x00327, 0x0013c),CE(0x0032d, 0x01e3d),CE(0x00331, 0x01e3b),CE(0x00301, 0x01e3f),CE(0x00307, 0x01e41),CE(0x00323, 0x01e43),CE(0x00300, 0x001f9),CE(0x00301, 0x00144),CE(0x00303, 0x000f1),CE(0x00307, 0x01e45),CE(0x0030c, 0x00148),CE(0x00323, 0x01e47),CE(0x00327, 0x00146),CE(0x0032d, 0x01e4b),CE(0x00331, 0x01e49),CE(0x00300, 0x000f2),CE(0x00301, 0x000f3),CE(0x00302, 0x000f4),CE(0x00303, 0x000f5),CE(0x00304, 0x0014d),CE(0x00306, 0x0014f),CE(0x00307, 0x0022f),CE(0x00308, 0x000f6),CE(0x00309, 0x01ecf),CE(0x0030b, 0x00151),CE(0x0030c, 0x001d2),CE(0x0030f, 0x0020d),CE(0x00311, 0x0020f),CE(0x0031b, 0x001a1),CE(0x00323, 0x01ecd),CE(0x00328, 0x001eb),CE(0x00301, 0x01e55),CE(0x00307, 0x01e57),CE(0x00301, 0x00155),CE(0x00307, 0x01e59),CE(0x0030c, 0x00159),CE(0x0030f, 0x00211),CE(0x00311, 0x00213),CE(0x00323, 0x01e5b),CE(0x00327, 0x00157),CE(0x00331, 0x01e5f),CE(0x00301, 0x0015b),CE(0x00302, 0x0015d),CE(0x00307, 0x01e61),CE(0x0030c, 0x00161),CE(0x00323, 0x01e63),CE(0x00326, 0x00219),CE(0x00327, 0x0015f),CE(0x00307, 0x01e6b),CE(0x00308, 0x01e97),CE(0x0030c, 0x00165),CE(0x00323, 0x01e6d),CE(0x00326, 0x0021b),CE(0x00327, 0x00163),CE(0x0032d, 0x01e71),CE(0x00331, 0x01e6f),CE(0x00300, 0x000f9),CE(0x00301, 0x000fa),CE(0x00302, 0x000fb),CE(0x00303, 0x00169),CE(0x00304, 0x0016b),CE(0x00306, 0x0016d),CE(0x00308, 0x000fc),CE(0x00309, 0x01ee7),CE(0x0030a, 0x0016f),CE(0x0030b, 0x00171),CE(0x0030c, 0x001d4),CE(0x0030f, 0x00215),CE(0x00311, 0x00217),CE(0x0031b, 0x001b0),CE(0x00323, 0x01ee5),CE(0x00324, 0x01e73),CE(0x00328, 0x00173),CE(0x0032d, 0x01e77),CE(0x00330, 0x01e75),CE(0x00303, 0x01e7d),CE(0x00323, 0x01e7f),CE(0x00300, 0x01e81),CE(0x00301, 0x01e83),CE(0x00302, 0x00175),CE(0x00307, 0x01e87),CE(0x00308, 0x01e85),CE(0x0030a, 0x01e98),CE(0x00323, 0x01e89),CE(0x00307, 0x01e8b),CE(0x00308, 0x01e8d),CE(0x00300, 0x01ef3),CE(0x00301, 0x000fd),CE(0x00302, 0x00177),CE(0x00303, 0x01ef9),CE(0x00304, 0x00233),CE(0x00307, 0x01e8f),CE(0x00308, 0x000ff),CE(0x00309, 0x01ef7),CE(0x0030a, 0x01e99),CE(0x00323, 0x01ef5),CE(0x00301, 0x0017a),CE(0x00302, 0x01e91),CE(0x00307, 0x0017c),CE(0x0030c, 0x0017e),CE(0x00323, 0x01e93),CE(0x00331, 0x01e95),CE(0x00300, 0x01fed),CE(0x00301, 0x00385),CE(0x00342, 0x01fc1),CE(0x00300, 0x01ea6),CE(0x00301, 0x01ea4),CE(0x00303, 0x01eaa),CE(0x00309, 0x01ea8),CE(0x00304, 0x001de),CE(0x00301, 0x001fa),CE(0x00301, 0x001fc),CE(0x00304, 0x001e2),CE(0x00301, 0x01e08),CE(0x00300, 0x01ec0),CE(0x00301, 0x01ebe),CE(0x00303, 0x01ec4),CE(0x00309, 0x01ec2),CE(0x00301, 0x01e2e),CE(0x00300, 0x01ed2),CE(0x00301, 0x01ed0),CE(0x00303, 0x01ed6),CE(0x00309, 0x01ed4),CE(0x00301, 0x01e4c),CE(0x00304, 0x0022c),CE(0x00308, 0x01e4e),CE(0x00304, 0x0022a),CE(0x00301, 0x001fe),CE(0x00300, 0x001db),CE(0x00301, 0x001d7),CE(0x00304, 0x001d5),CE(0x0030c, 0x001d9),CE(0x00300, 0x01ea7),CE(0x00301, 0x01ea5),CE(0x00303, 0x01eab),CE(0x00309, 0x01ea9),CE(0x00304, 0x001df),CE(0x00301, 0x001fb),CE(0x00301, 0x001fd),CE(0x00304, 0x001e3),CE(0x00301, 0x01e09),CE(0x00300, 0x01ec1),CE(0x00301, 0x01ebf),CE(0x00303, 0x01ec5),CE(0x00309, 0x01ec3),CE(0x00301, 0x01e2f),CE(0x00300, 0x01ed3),CE(0x00301, 0x01ed1),CE(0x00303, 0x01ed7),CE(0x00309, 0x01ed5),CE(0x00301, 0x01e4d),CE(0x00304, 0x0022d),CE(0x00308, 0x01e4f),CE(0x00304, 0x0022b),CE(0x00301, 0x001ff),CE(0x00300, 0x001dc),CE(0x00301, 0x001d8),CE(0x00304, 0x001d6),CE(0x0030c, 0x001da),CE(0x00300, 0x01eb0),CE(0x00301, 0x01eae),CE(0x00303, 0x01eb4),CE(0x00309, 0x01eb2),CE(0x00300, 0x01eb1),CE(0x00301, 0x01eaf),CE(0x00303, 0x01eb5),CE(0x00309, 0x01eb3),CE(0x00300, 0x01e14),CE(0x00301, 0x01e16),CE(0x00300, 0x01e15),CE(0x00301, 0x01e17),CE(0x00300, 0x01e50),CE(0x00301, 0x01e52),CE(0x00300, 0x01e51),CE(0x00301, 0x01e53),CE(0x00307, 0x01e64),CE(0x00307, 0x01e65),CE(0x00307, 0x01e66),CE(0x00307, 0x01e67),CE(0x00301, 0x01e78),CE(0x00301, 0x01e79),CE(0x00308, 0x01e7a),CE(0x00308, 0x01e7b),CE(0x00307, 0x01e9b),CE(0x00300, 0x01edc),CE(0x00301, 0x01eda),CE(0x00303, 0x01ee0),CE(0x00309, 0x01ede),CE(0x00323, 0x01ee2),CE(0x00300, 0x01edd),CE(0x00301, 0x01edb),CE(0x00303, 0x01ee1),CE(0x00309, 0x01edf),CE(0x00323, 0x01ee3),CE(0x00300, 0x01eea),CE(0x00301, 0x01ee8),CE(0x00303, 0x01eee),CE(0x00309, 0x01eec),CE(0x00323, 0x01ef0),CE(0x00300, 0x01eeb),CE(0x00301, 0x01ee9),CE(0x00303, 0x01eef),CE(0x00309, 0x01eed),CE(0x00323, 0x01ef1),CE(0x0030c, 0x001ee),CE(0x00304, 0x001ec),CE(0x00304, 0x001ed),CE(0x00304, 0x001e0),CE(0x00304, 0x001e1),CE(0x00306, 0x01e1c),CE(0x00306, 0x01e1d),CE(0x00304, 0x00230),CE(0x00304, 0x00231),CE(0x0030c, 0x001ef),CE(0x00300, 0x01fba),CE(0x00301, 0x00386),CE(0x00304, 0x01fb9),CE(0x00306, 0x01fb8),CE(0x00313, 0x01f08),CE(0x00314, 0x01f09),CE(0x00345, 0x01fbc),CE(0x00300, 0x01fc8),CE(0x00301, 0x00388),CE(0x00313, 0x01f18),CE(0x00314, 0x01f19),CE(0x00300, 0x01fca),CE(0x00301, 0x00389),CE(0x00313, 0x01f28),CE(0x00314, 0x01f29),CE(0x00345, 0x01fcc),CE(0x00300, 0x01fda),CE(0x00301, 0x0038a),CE(0x00304, 0x01fd9),CE(0x00306, 0x01fd8),CE(0x00308, 0x003aa),CE(0x00313, 0x01f38),CE(0x00314, 0x01f39),CE(0x00300, 0x01ff8),CE(0x00301, 0x0038c),CE(0x00313, 0x01f48),CE(0x00314, 0x01f49),CE(0x00314, 0x01fec),CE(0x00300, 0x01fea),CE(0x00301, 0x0038e),CE(0x00304, 0x01fe9),CE(0x00306, 0x01fe8),CE(0x00308, 0x003ab),CE(0x00314, 0x01f59),CE(0x00300, 0x01ffa),CE(0x00301, 0x0038f),CE(0x00313, 0x01f68),CE(0x00314, 0x01f69),CE(0x00345, 0x01ffc),CE(0x00345, 0x01fb4),CE(0x00345, 0x01fc4),CE(0x00300, 0x01f70),CE(0x00301, 0x003ac),CE(0x00304, 0x01fb1),CE(0x00306, 0x01fb0),CE(0x00313, 0x01f00),CE(0x00314, 0x01f01),CE(0x00342, 0x01fb6),CE(0x00345, 0x01fb3),CE(0x00300, 0x01f72),CE(0x00301, 0x003ad),CE(0x00313, 0x01f10),CE(0x00314, 0x01f11),CE(0x00300, 0x01f74),CE(0x00301, 0x003ae),CE(0x00313, 0x01f20),CE(0x00314, 0x01f21),CE(0x00342, 0x01fc6),CE(0x00345, 0x01fc3),CE(0x00300, 0x01f76),CE(0x00301, 0x003af),CE(0x00304, 0x01fd1),CE(0x00306, 0x01fd0),CE(0x00308, 0x003ca),CE(0x00313, 0x01f30),CE(0x00314, 0x01f31),CE(0x00342, 0x01fd6),CE(0x00300, 0x01f78),CE(0x00301, 0x003cc),CE(0x00313, 0x01f40),CE(0x00314, 0x01f41),CE(0x00313, 0x01fe4),CE(0x00314, 0x01fe5),CE(0x00300, 0x01f7a),CE(0x00301, 0x003cd),CE(0x00304, 0x01fe1),CE(0x00306, 0x01fe0),CE(0x00308, 0x003cb),CE(0x00313, 0x01f50),CE(0x00314, 0x01f51),CE(0x00342, 0x01fe6),CE(0x00300, 0x01f7c),CE(0x00301, 0x003ce),CE(0x00313, 0x01f60),CE(0x00314, 0x01f61),CE(0x00342, 0x01ff6),CE(0x00345, 0x01ff3),CE(0x00300, 0x01fd2),CE(0x00301, 0x00390),CE(0x00342, 0x01fd7),CE(0x00300, 0x01fe2),CE(0x00301, 0x003b0),CE(0x00342, 0x01fe7),CE(0x00345, 0x01ff4),CE(0x00301, 0x003d3),CE(0x00308, 0x003d4),CE(0x00308, 0x00407),CE(0x00306, 0x004d0),CE(0x00308, 0x004d2),CE(0x00301, 0x00403),CE(0x00300, 0x00400),CE(0x00306, 0x004d6),CE(0x00308, 0x00401),CE(0x00306, 0x004c1),CE(0x00308, 0x004dc),CE(0x00308, 0x004de),CE(0x00300, 0x0040d),CE(0x00304, 0x004e2),CE(0x00306, 0x00419),CE(0x00308, 0x004e4),CE(0x00301, 0x0040c),CE(0x00308, 0x004e6),CE(0x00304, 0x004ee),CE(0x00306, 0x0040e),CE(0x00308, 0x004f0),CE(0x0030b, 0x004f2),CE(0x00308, 0x004f4),CE(0x00308, 0x004f8),CE(0x00308, 0x004ec),CE(0x00306, 0x004d1),CE(0x00308, 0x004d3),CE(0x00301, 0x00453),CE(0x00300, 0x00450),CE(0x00306, 0x004d7),CE(0x00308, 0x00451),CE(0x00306, 0x004c2),CE(0x00308, 0x004dd),CE(0x00308, 0x004df),CE(0x00300, 0x0045d),CE(0x00304, 0x004e3),CE(0x00306, 0x00439),CE(0x00308, 0x004e5),CE(0x00301, 0x0045c),CE(0x00308, 0x004e7),CE(0x00304, 0x004ef),CE(0x00306, 0x0045e),CE(0x00308, 0x004f1),CE(0x0030b, 0x004f3),CE(0x00308, 0x004f5),CE(0x00308, 0x004f9),CE(0x00308, 0x004ed),CE(0x00308, 0x00457),CE(0x0030f, 0x00476),CE(0x0030f, 0x00477),CE(0x00308, 0x004da),CE(0x00308, 0x004db),CE(0x00308, 0x004ea),CE(0x00308, 0x004eb),CE(0x00653, 0x00622),CE(0x00654, 0x00623),CE(0x00655, 0x00625),CE(0x00654, 0x00624),CE(0x00654, 0x00626),CE(0x00654, 0x006c2),CE(0x00654, 0x006d3),CE(0x00654, 0x006c0),CE(0x0093c, 0x00929),CE(0x0093c, 0x00931),CE(0x0093c, 0x00934),CE(0x009be, 0x009cb),CE(0x009d7, 0x009cc),CE(0x00b3e, 0x00b4b),CE(0x00b56, 0x00b48),CE(0x00b57, 0x00b4c),CE(0x00bd7, 0x00b94),CE(0x00bbe, 0x00bca),CE(0x00bd7, 0x00bcc),CE(0x00bbe, 0x00bcb),CE(0x00c56, 0x00c48),CE(0x00cd5, 0x00cc0),CE(0x00cc2, 0x00cca),CE(0x00cd5, 0x00cc7),CE(0x00cd6, 0x00cc8),CE(0x00cd5, 0x00ccb),CE(0x00d3e, 0x00d4a),CE(0x00d57, 0x00d4c),CE(0x00d3e, 0x00d4b),CE(0x00dca, 0x00dda),CE(0x00dcf, 0x00ddc),CE(0x00ddf, 0x00dde),CE(0x00dca, 0x00ddd),CE(0x0102e, 0x01026),CE(0x01b35, 0x01b06),CE(0x01b35, 0x01b08),CE(0x01b35, 0x01b0a),CE(0x01b35, 0x01b0c),CE(0x01b35, 0x01b0e),CE(0x01b35, 0x01b12),CE(0x01b35, 0x01b3b),CE(0x01b35, 0x01b3d),CE(0x01b35, 0x01b40),CE(0x01b35, 0x01b41),CE(0x01b35, 0x01b43),CE(0x00304, 0x01e38),CE(0x00304, 0x01e39),CE(0x00304, 0x01e5c),CE(0x00304, 0x01e5d),CE(0x00307, 0x01e68),CE(0x00307, 0x01e69),CE(0x00302, 0x01eac),CE(0x00306, 0x01eb6),CE(0x00302, 0x01ead),CE(0x00306, 0x01eb7),CE(0x00302, 0x01ec6),CE(0x00302, 0x01ec7),CE(0x00302, 0x01ed8),CE(0x00302, 0x01ed9),CE(0x00300, 0x01f02),CE(0x00301, 0x01f04),CE(0x00342, 0x01f06),CE(0x00345, 0x01f80),CE(0x00300, 0x01f03),CE(0x00301, 0x01f05),CE(0x00342, 0x01f07),CE(0x00345, 0x01f81),CE(0x00345, 0x01f82),CE(0x00345, 0x01f83),CE(0x00345, 0x01f84),CE(0x00345, 0x01f85),CE(0x00345, 0x01f86),CE(0x00345, 0x01f87),CE(0x00300, 0x01f0a),CE(0x00301, 0x01f0c),CE(0x00342, 0x01f0e),CE(0x00345, 0x01f88),CE(0x00300, 0x01f0b),CE(0x00301, 0x01f0d),CE(0x00342, 0x01f0f),CE(0x00345, 0x01f89),CE(0x00345, 0x01f8a),CE(0x00345, 0x01f8b),CE(0x00345, 0x01f8c),CE(0x00345, 0x01f8d),CE(0x00345, 0x01f8e),CE(0x00345, 0x01f8f),CE(0x00300, 0x01f12),CE(0x00301, 0x01f14),CE(0x00300, 0x01f13),CE(0x00301, 0x01f15),CE(0x00300, 0x01f1a),CE(0x00301, 0x01f1c),CE(0x00300, 0x01f1b),CE(0x00301, 0x01f1d),CE(0x00300, 0x01f22),CE(0x00301, 0x01f24),CE(0x00342, 0x01f26),CE(0x00345, 0x01f90),CE(0x00300, 0x01f23),CE(0x00301, 0x01f25),CE(0x00342, 0x01f27),CE(0x00345, 0x01f91),CE(0x00345, 0x01f92),CE(0x00345, 0x01f93),CE(0x00345, 0x01f94),CE(0x00345, 0x01f95),CE(0x00345, 0x01f96),CE(0x00345, 0x01f97),CE(0x00300, 0x01f2a),CE(0x00301, 0x01f2c),CE(0x00342, 0x01f2e),CE(0x00345, 0x01f98),CE(0x00300, 0x01f2b),CE(0x00301, 0x01f2d),CE(0x00342, 0x01f2f),CE(0x00345, 0x01f99),CE(0x00345, 0x01f9a),CE(0x00345, 0x01f9b),CE(0x00345, 0x01f9c),CE(0x00345, 0x01f9d),CE(0x00345, 0x01f9e),CE(0x00345, 0x01f9f),CE(0x00300, 0x01f32),CE(0x00301, 0x01f34),CE(0x00342, 0x01f36),CE(0x00300, 0x01f33),CE(0x00301, 0x01f35),CE(0x00342, 0x01f37),CE(0x00300, 0x01f3a),CE(0x00301, 0x01f3c),CE(0x00342, 0x01f3e),CE(0x00300, 0x01f3b),CE(0x00301, 0x01f3d),CE(0x00342, 0x01f3f),CE(0x00300, 0x01f42),CE(0x00301, 0x01f44),CE(0x00300, 0x01f43),CE(0x00301, 0x01f45),CE(0x00300, 0x01f4a),CE(0x00301, 0x01f4c),CE(0x00300, 0x01f4b),CE(0x00301, 0x01f4d),CE(0x00300, 0x01f52),CE(0x00301, 0x01f54),CE(0x00342, 0x01f56),CE(0x00300, 0x01f53),CE(0x00301, 0x01f55),CE(0x00342, 0x01f57),CE(0x00300, 0x01f5b),CE(0x00301, 0x01f5d),CE(0x00342, 0x01f5f),CE(0x00300, 0x01f62),CE(0x00301, 0x01f64),CE(0x00342, 0x01f66),CE(0x00345, 0x01fa0),CE(0x00300, 0x01f63),CE(0x00301, 0x01f65),CE(0x00342, 0x01f67),CE(0x00345, 0x01fa1),CE(0x00345, 0x01fa2),CE(0x00345, 0x01fa3),CE(0x00345, 0x01fa4),CE(0x00345, 0x01fa5),CE(0x00345, 0x01fa6),CE(0x00345, 0x01fa7),CE(0x00300, 0x01f6a),CE(0x00301, 0x01f6c),CE(0x00342, 0x01f6e),CE(0x00345, 0x01fa8),CE(0x00300, 0x01f6b),CE(0x00301, 0x01f6d),CE(0x00342, 0x01f6f),CE(0x00345, 0x01fa9),CE(0x00345, 0x01faa),CE(0x00345, 0x01fab),CE(0x00345, 0x01fac),CE(0x00345, 0x01fad),CE(0x00345, 0x01fae),CE(0x00345, 0x01faf),CE(0x00345, 0x01fb2),CE(0x00345, 0x01fc2),CE(0x00345, 0x01ff2),CE(0x00345, 0x01fb7),CE(0x00300, 0x01fcd),CE(0x00301, 0x01fce),CE(0x00342, 0x01fcf),CE(0x00345, 0x01fc7),CE(0x00345, 0x01ff7),CE(0x00300, 0x01fdd),CE(0x00301, 0x01fde),CE(0x00342, 0x01fdf),CE(0x00338, 0x0219a),CE(0x00338, 0x0219b),CE(0x00338, 0x021ae),CE(0x00338, 0x021cd),CE(0x00338, 0x021cf),CE(0x00338, 0x021ce),CE(0x00338, 0x02204),CE(0x00338, 0x02209),CE(0x00338, 0x0220c),CE(0x00338, 0x02224),CE(0x00338, 0x02226),CE(0x00338, 0x02241),CE(0x00338, 0x02244),CE(0x00338, 0x02247),CE(0x00338, 0x02249),CE(0x00338, 0x0226d),CE(0x00338, 0x02262),CE(0x00338, 0x02270),CE(0x00338, 0x02271),CE(0x00338, 0x02274),CE(0x00338, 0x02275),CE(0x00338, 0x02278),CE(0x00338, 0x02279),CE(0x00338, 0x02280),CE(0x00338, 0x02281),CE(0x00338, 0x022e0),CE(0x00338, 0x022e1),CE(0x00338, 0x02284),CE(0x00338, 0x02285),CE(0x00338, 0x02288),CE(0x00338, 0x02289),CE(0x00338, 0x022e2),CE(0x00338, 0x022e3),CE(0x00338, 0x022ac),CE(0x00338, 0x022ad),CE(0x00338, 0x022ae),CE(0x00338, 0x022af),CE(0x00338, 0x022ea),CE(0x00338, 0x022eb),CE(0x00338, 0x022ec),CE(0x00338, 0x022ed),CE(0x03099, 0x03094),CE(0x03099, 0x0304c),CE(0x03099, 0x0304e),CE(0x03099, 0x03050),CE(0x03099, 0x03052),CE(0x03099, 0x03054),CE(0x03099, 0x03056),CE(0x03099, 0x03058),CE(0x03099, 0x0305a),CE(0x03099, 0x0305c),CE(0x03099, 0x0305e),CE(0x03099, 0x03060),CE(0x03099, 0x03062),CE(0x03099, 0x03065),CE(0x03099, 0x03067),CE(0x03099, 0x03069),CE(0x03099, 0x03070),CE(0x0309a, 0x03071),CE(0x03099, 0x03073),CE(0x0309a, 0x03074),CE(0x03099, 0x03076),CE(0x0309a, 0x03077),CE(0x03099, 0x03079),CE(0x0309a, 0x0307a),CE(0x03099, 0x0307c),CE(0x0309a, 0x0307d),CE(0x03099, 0x0309e),CE(0x03099, 0x030f4),CE(0x03099, 0x030ac),CE(0x03099, 0x030ae),CE(0x03099, 0x030b0),CE(0x03099, 0x030b2),CE(0x03099, 0x030b4),CE(0x03099, 0x030b6),CE(0x03099, 0x030b8),CE(0x03099, 0x030ba),CE(0x03099, 0x030bc),CE(0x03099, 0x030be),CE(0x03099, 0x030c0),CE(0x03099, 0x030c2),CE(0x03099, 0x030c5),CE(0x03099, 0x030c7),CE(0x03099, 0x030c9),CE(0x03099, 0x030d0),CE(0x0309a, 0x030d1),CE(0x03099, 0x030d3),CE(0x0309a, 0x030d4),CE(0x03099, 0x030d6),CE(0x0309a, 0x030d7),CE(0x03099, 0x030d9),CE(0x0309a, 0x030da),CE(0x03099, 0x030dc),CE(0x0309a, 0x030dd),CE(0x03099, 0x030f7),CE(0x03099, 0x030f8),CE(0x03099, 0x030f9),CE(0x03099, 0x030fa),CE(0x03099, 0x030fe),CE(0x110ba, 0x1109a),CE(0x110ba, 0x1109c),CE(0x110ba, 0x110ab),CE(0x11127, 0x1112e),CE(0x11127, 0x1112f),CE(0x1133e, 0x1134b),CE(0x11357, 0x1134c),CE(0x114b0, 0x114bc),CE(0x114ba, 0x114bb),CE(0x114bd, 0x114be),CE(0x115af, 0x115ba),CE(0x115af, 0x115bb),CE(0x11930, 0x11938),]; -return t; +enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x" +0000000000000800", +x" +0000100000002C00", +x" +00010000000300020005000400070006000700080007000700090007000A0007000C000B000700070007000700070007 +0007000D0007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +00070007000700070007000700070007000700070007000E00070007000700070010000F000700110007001200070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007001300070007000700070007001400070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +0007000700070007000700070007000700070007000700070007000700070007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF08010800FFFF08028003FFFF281618138821301B383308327841383A28510850185C30568068485F +FFFF10783882407A9890388930A510A348AD10ABFFFF30B6FFFFFFFFFFFFFFFF80BCFFFF28CF18CC88DA30D438EC08EB +70FB40F3290B11091916311081224919FFFF1132393C4134994B41433960115E51691167FFFF3173FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1979FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF217C0981098009841182 +FFFFFFFFFFFF2185FFFFFFFF0989FFFFFFFFFFFFFFFFFFFF198E218AFFFF0991FFFF0992FFFFFFFFFFFF2193FFFFFFFF +FFFFFFFFFFFF2197099C099B099F119DFFFFFFFFFFFF21A0FFFFFFFF09A4FFFFFFFFFFFFFFFFFFFF19A921A5FFFF09AC +FFFF09ADFFFFFFFFFFFF21AEFFFFFFFFFFFFFFFF21B621B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF11BC11BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11C011BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF09C309C2FFFFFFFFFFFFFFFF09C509C4FFFFFFFFFFFFFFFFFFFFFFFF09C709C609C909C8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +29D029CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29D5FFFFFFFF29DAFFFFFFFFFFFFFFFF09DFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF09E109E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09E309E209E509E4FFFFFFFFFFFFFFFF09E709E6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF09E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39E9FFFFFFFFFFFF21F0FFFF29F4FFFF +39F9FFFFFFFFFFFFFFFFFFFF2200FFFF0A04FFFFFFFFFFFF3205FFFFFFFFFFFF2A0BFFFFFFFFFFFFFFFF0A10FFFF0A11 +4212FFFFFFFFFFFF221AFFFF321EFFFF4224FFFFFFFFFFFFFFFFFFFF222CFFFF1230FFFFFFFFFFFF4232FFFFFFFFFFFF +323AFFFF1A431A40FFFFFFFFFFFF0A46FFFFFFFFFFFF1247FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A49FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF124A0A4CFFFF1A4DFFFF0A521250FFFF2253FFFF0A57FFFFFFFFFFFF0A58FFFFFFFF2259FFFFFFFFFFFF0A5DFFFF +FFFFFFFF0A5EFFFF0A5FFFFFFFFFFFFFFFFF12600A62FFFF1A63FFFF0A681266FFFF2269FFFF0A6DFFFFFFFFFFFF0A6E +FFFFFFFF226FFFFFFFFFFFFF0A73FFFFFFFFFFFF0A74FFFF0A75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A76 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0A780A77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A7A0A79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0A7C0A7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF1A7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A80FFFF0A81FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A82FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A830A84FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A85FFFFFFFFFFFFFFFFFFFFFFFFFFFF0A860A87FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1288FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A8AFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0A8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0A90128EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A93 +FFFFFFFFFFFF0A96FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0A991297FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A9AFFFFFFFFFFFFFFFF0A9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A9EFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A9FFFFF0AA0FFFF0AA1FFFF0AA2FFFF0AA3FFFFFFFFFFFF +0AA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AA5FFFF0AA60AA80AA7 +FFFFFFFFFFFF0AA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0AAB0AAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAD0AACFFFFFFFFFFFFFFFF +FFFFFFFF0AAF0AAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12B212B0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AB50AB4FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AB70AB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22BC22B80AC10AC00AC30AC20AC50AC4 +22CA22C60ACF0ACE0AD10AD00AD30AD212D612D4FFFFFFFFFFFFFFFFFFFFFFFF12DA12D8FFFFFFFFFFFFFFFFFFFFFFFF +22E022DC0AE50AE40AE70AE60AE90AE822EE22EA0AF30AF20AF50AF40AF70AF61AFB1AF8FFFFFFFFFFFFFFFFFFFFFFFF +1B011AFEFFFFFFFFFFFFFFFFFFFFFFFF13061304FFFFFFFFFFFFFFFFFFFFFFFF130A1308FFFFFFFFFFFFFFFFFFFFFFFF +1B0F1B0CFFFFFFFFFFFFFFFFFFFFFFFF1B12FFFFFFFFFFFFFFFFFFFFFFFFFFFF231923150B1E0B1D0B200B1F0B220B21 +232723230B2C0B2B0B2E0B2D0B300B2FFFFF0B31FFFFFFFFFFFF0B32FFFFFFFFFFFFFFFFFFFFFFFFFFFF0B33FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0B34FFFFFFFFFFFFFFFFFFFFFFFF1B35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B38 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B39 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF1B3AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0B3DFFFF0B3EFFFF0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B40FFFF0B41FFFF0B42FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B43FFFFFFFFFFFFFFFFFFFF +FFFF0B440B45FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0B46FFFF0B47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0B48FFFFFFFFFFFFFFFF0B49FFFF0B4AFFFFFFFFFFFFFFFF0B4BFFFFFFFF0B4CFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B4DFFFFFFFFFFFF0B4F0B4EFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B510B50FFFFFFFF0B530B52FFFFFFFF0B550B540B570B56FFFFFFFF +FFFFFFFF0B590B58FFFFFFFF0B5B0B5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B5CFFFFFFFF0B5DFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B5EFFFFFFFFFFFFFFFF0B600B5F0B61FFFFFFFFFFFFFFFFFFFF +FFFFFFFF0B630B620B650B64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B66 +FFFFFFFF0B67FFFF0B68FFFF0B69FFFF0B6AFFFF0B6BFFFF0B6CFFFF0B6DFFFF0B6EFFFF0B6FFFFF0B70FFFF0B71FFFF +0B72FFFFFFFFFFFFFFFF0B73FFFF0B74FFFF0B75FFFFFFFFFFFFFFFF1376FFFFFFFFFFFFFFFF1378137AFFFFFFFFFFFF +FFFF137C137EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B81 +FFFFFFFF0B82FFFF0B83FFFF0B84FFFF0B85FFFF0B86FFFF0B87FFFF0B88FFFF0B89FFFF0B8AFFFF0B8BFFFF0B8CFFFF +0B8DFFFFFFFFFFFFFFFF0B8EFFFF0B8FFFFF0B90FFFFFFFFFFFFFFFF1391FFFFFFFFFFFFFFFF13931395FFFFFFFFFFFF +FFFF13971399FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B9BFFFF +0B9D0B9CFFFF0B9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA0FFFFFFFFFFFFFFFF +FFFFFFFFFFFF0BA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0BA2FFFF0BA3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA5FFFFFFFF0BA6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0BA9FFFF0BAAFFFFFFFFFFFFFFFF0BABFFFFFFFFFFFFFFFFFFFFFFFF0BACFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1BADFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +1BB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BB40BB3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23B6 +13BAFFFFFFFF0BBCFFFFFFFFFFFFFFFF0BBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0BBEFFFFFFFFFFFF0BBFFFFF0BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +dstring compositionTable() nothrow @nogc pure @safe { +static immutable dchar[1922] t = +"\u0338\u226E\u0338\u2260\u0338\u226F\u0300\u00C0\u0301\u00C1\u0302\u00C2\u0303\u00C3\u0304\u0100\u0306\u0102\u0307"d~ +"\u0226\u0308\u00C4\u0309\u1EA2\u030A\u00C5\u030C\u01CD\u030F\u0200\u0311\u0202\u0323\u1EA0\u0325\u1E00\u0328\u0104"d~ +"\u0307\u1E02\u0323\u1E04\u0331\u1E06\u0301\u0106\u0302\u0108\u0307\u010A\u030C\u010C\u0327\u00C7\u0307\u1E0A\u030C"d~ +"\u010E\u0323\u1E0C\u0327\u1E10\u032D\u1E12\u0331\u1E0E\u0300\u00C8\u0301\u00C9\u0302\u00CA\u0303\u1EBC\u0304\u0112"d~ +"\u0306\u0114\u0307\u0116\u0308\u00CB\u0309\u1EBA\u030C\u011A\u030F\u0204\u0311\u0206\u0323\u1EB8\u0327\u0228\u0328"d~ +"\u0118\u032D\u1E18\u0330\u1E1A\u0307\u1E1E\u0301\u01F4\u0302\u011C\u0304\u1E20\u0306\u011E\u0307\u0120\u030C\u01E6"d~ +"\u0327\u0122\u0302\u0124\u0307\u1E22\u0308\u1E26\u030C\u021E\u0323\u1E24\u0327\u1E28\u032E\u1E2A\u0300\u00CC\u0301"d~ +"\u00CD\u0302\u00CE\u0303\u0128\u0304\u012A\u0306\u012C\u0307\u0130\u0308\u00CF\u0309\u1EC8\u030C\u01CF\u030F\u0208"d~ +"\u0311\u020A\u0323\u1ECA\u0328\u012E\u0330\u1E2C\u0302\u0134\u0301\u1E30\u030C\u01E8\u0323\u1E32\u0327\u0136\u0331"d~ +"\u1E34\u0301\u0139\u030C\u013D\u0323\u1E36\u0327\u013B\u032D\u1E3C\u0331\u1E3A\u0301\u1E3E\u0307\u1E40\u0323\u1E42"d~ +"\u0300\u01F8\u0301\u0143\u0303\u00D1\u0307\u1E44\u030C\u0147\u0323\u1E46\u0327\u0145\u032D\u1E4A\u0331\u1E48\u0300"d~ +"\u00D2\u0301\u00D3\u0302\u00D4\u0303\u00D5\u0304\u014C\u0306\u014E\u0307\u022E\u0308\u00D6\u0309\u1ECE\u030B\u0150"d~ +"\u030C\u01D1\u030F\u020C\u0311\u020E\u031B\u01A0\u0323\u1ECC\u0328\u01EA\u0301\u1E54\u0307\u1E56\u0301\u0154\u0307"d~ +"\u1E58\u030C\u0158\u030F\u0210\u0311\u0212\u0323\u1E5A\u0327\u0156\u0331\u1E5E\u0301\u015A\u0302\u015C\u0307\u1E60"d~ +"\u030C\u0160\u0323\u1E62\u0326\u0218\u0327\u015E\u0307\u1E6A\u030C\u0164\u0323\u1E6C\u0326\u021A\u0327\u0162\u032D"d~ +"\u1E70\u0331\u1E6E\u0300\u00D9\u0301\u00DA\u0302\u00DB\u0303\u0168\u0304\u016A\u0306\u016C\u0308\u00DC\u0309\u1EE6"d~ +"\u030A\u016E\u030B\u0170\u030C\u01D3\u030F\u0214\u0311\u0216\u031B\u01AF\u0323\u1EE4\u0324\u1E72\u0328\u0172\u032D"d~ +"\u1E76\u0330\u1E74\u0303\u1E7C\u0323\u1E7E\u0300\u1E80\u0301\u1E82\u0302\u0174\u0307\u1E86\u0308\u1E84\u0323\u1E88"d~ +"\u0307\u1E8A\u0308\u1E8C\u0300\u1EF2\u0301\u00DD\u0302\u0176\u0303\u1EF8\u0304\u0232\u0307\u1E8E\u0308\u0178\u0309"d~ +"\u1EF6\u0323\u1EF4\u0301\u0179\u0302\u1E90\u0307\u017B\u030C\u017D\u0323\u1E92\u0331\u1E94\u0300\u00E0\u0301\u00E1"d~ +"\u0302\u00E2\u0303\u00E3\u0304\u0101\u0306\u0103\u0307\u0227\u0308\u00E4\u0309\u1EA3\u030A\u00E5\u030C\u01CE\u030F"d~ +"\u0201\u0311\u0203\u0323\u1EA1\u0325\u1E01\u0328\u0105\u0307\u1E03\u0323\u1E05\u0331\u1E07\u0301\u0107\u0302\u0109"d~ +"\u0307\u010B\u030C\u010D\u0327\u00E7\u0307\u1E0B\u030C\u010F\u0323\u1E0D\u0327\u1E11\u032D\u1E13\u0331\u1E0F\u0300"d~ +"\u00E8\u0301\u00E9\u0302\u00EA\u0303\u1EBD\u0304\u0113\u0306\u0115\u0307\u0117\u0308\u00EB\u0309\u1EBB\u030C\u011B"d~ +"\u030F\u0205\u0311\u0207\u0323\u1EB9\u0327\u0229\u0328\u0119\u032D\u1E19\u0330\u1E1B\u0307\u1E1F\u0301\u01F5\u0302"d~ +"\u011D\u0304\u1E21\u0306\u011F\u0307\u0121\u030C\u01E7\u0327\u0123\u0302\u0125\u0307\u1E23\u0308\u1E27\u030C\u021F"d~ +"\u0323\u1E25\u0327\u1E29\u032E\u1E2B\u0331\u1E96\u0300\u00EC\u0301\u00ED\u0302\u00EE\u0303\u0129\u0304\u012B\u0306"d~ +"\u012D\u0308\u00EF\u0309\u1EC9\u030C\u01D0\u030F\u0209\u0311\u020B\u0323\u1ECB\u0328\u012F\u0330\u1E2D\u0302\u0135"d~ +"\u030C\u01F0\u0301\u1E31\u030C\u01E9\u0323\u1E33\u0327\u0137\u0331\u1E35\u0301\u013A\u030C\u013E\u0323\u1E37\u0327"d~ +"\u013C\u032D\u1E3D\u0331\u1E3B\u0301\u1E3F\u0307\u1E41\u0323\u1E43\u0300\u01F9\u0301\u0144\u0303\u00F1\u0307\u1E45"d~ +"\u030C\u0148\u0323\u1E47\u0327\u0146\u032D\u1E4B\u0331\u1E49\u0300\u00F2\u0301\u00F3\u0302\u00F4\u0303\u00F5\u0304"d~ +"\u014D\u0306\u014F\u0307\u022F\u0308\u00F6\u0309\u1ECF\u030B\u0151\u030C\u01D2\u030F\u020D\u0311\u020F\u031B\u01A1"d~ +"\u0323\u1ECD\u0328\u01EB\u0301\u1E55\u0307\u1E57\u0301\u0155\u0307\u1E59\u030C\u0159\u030F\u0211\u0311\u0213\u0323"d~ +"\u1E5B\u0327\u0157\u0331\u1E5F\u0301\u015B\u0302\u015D\u0307\u1E61\u030C\u0161\u0323\u1E63\u0326\u0219\u0327\u015F"d~ +"\u0307\u1E6B\u0308\u1E97\u030C\u0165\u0323\u1E6D\u0326\u021B\u0327\u0163\u032D\u1E71\u0331\u1E6F\u0300\u00F9\u0301"d~ +"\u00FA\u0302\u00FB\u0303\u0169\u0304\u016B\u0306\u016D\u0308\u00FC\u0309\u1EE7\u030A\u016F\u030B\u0171\u030C\u01D4"d~ +"\u030F\u0215\u0311\u0217\u031B\u01B0\u0323\u1EE5\u0324\u1E73\u0328\u0173\u032D\u1E77\u0330\u1E75\u0303\u1E7D\u0323"d~ +"\u1E7F\u0300\u1E81\u0301\u1E83\u0302\u0175\u0307\u1E87\u0308\u1E85\u030A\u1E98\u0323\u1E89\u0307\u1E8B\u0308\u1E8D"d~ +"\u0300\u1EF3\u0301\u00FD\u0302\u0177\u0303\u1EF9\u0304\u0233\u0307\u1E8F\u0308\u00FF\u0309\u1EF7\u030A\u1E99\u0323"d~ +"\u1EF5\u0301\u017A\u0302\u1E91\u0307\u017C\u030C\u017E\u0323\u1E93\u0331\u1E95\u0300\u1FED\u0301\u0385\u0342\u1FC1"d~ +"\u0300\u1EA6\u0301\u1EA4\u0303\u1EAA\u0309\u1EA8\u0304\u01DE\u0301\u01FA\u0301\u01FC\u0304\u01E2\u0301\u1E08\u0300"d~ +"\u1EC0\u0301\u1EBE\u0303\u1EC4\u0309\u1EC2\u0301\u1E2E\u0300\u1ED2\u0301\u1ED0\u0303\u1ED6\u0309\u1ED4\u0301\u1E4C"d~ +"\u0304\u022C\u0308\u1E4E\u0304\u022A\u0301\u01FE\u0300\u01DB\u0301\u01D7\u0304\u01D5\u030C\u01D9\u0300\u1EA7\u0301"d~ +"\u1EA5\u0303\u1EAB\u0309\u1EA9\u0304\u01DF\u0301\u01FB\u0301\u01FD\u0304\u01E3\u0301\u1E09\u0300\u1EC1\u0301\u1EBF"d~ +"\u0303\u1EC5\u0309\u1EC3\u0301\u1E2F\u0300\u1ED3\u0301\u1ED1\u0303\u1ED7\u0309\u1ED5\u0301\u1E4D\u0304\u022D\u0308"d~ +"\u1E4F\u0304\u022B\u0301\u01FF\u0300\u01DC\u0301\u01D8\u0304\u01D6\u030C\u01DA\u0300\u1EB0\u0301\u1EAE\u0303\u1EB4"d~ +"\u0309\u1EB2\u0300\u1EB1\u0301\u1EAF\u0303\u1EB5\u0309\u1EB3\u0300\u1E14\u0301\u1E16\u0300\u1E15\u0301\u1E17\u0300"d~ +"\u1E50\u0301\u1E52\u0300\u1E51\u0301\u1E53\u0307\u1E64\u0307\u1E65\u0307\u1E66\u0307\u1E67\u0301\u1E78\u0301\u1E79"d~ +"\u0308\u1E7A\u0308\u1E7B\u0307\u1E9B\u0300\u1EDC\u0301\u1EDA\u0303\u1EE0\u0309\u1EDE\u0323\u1EE2\u0300\u1EDD\u0301"d~ +"\u1EDB\u0303\u1EE1\u0309\u1EDF\u0323\u1EE3\u0300\u1EEA\u0301\u1EE8\u0303\u1EEE\u0309\u1EEC\u0323\u1EF0\u0300\u1EEB"d~ +"\u0301\u1EE9\u0303\u1EEF\u0309\u1EED\u0323\u1EF1\u030C\u01EE\u0304\u01EC\u0304\u01ED\u0304\u01E0\u0304\u01E1\u0306"d~ +"\u1E1C\u0306\u1E1D\u0304\u0230\u0304\u0231\u030C\u01EF\u0300\u1FBA\u0301\u0386\u0304\u1FB9\u0306\u1FB8\u0313\u1F08"d~ +"\u0314\u1F09\u0345\u1FBC\u0300\u1FC8\u0301\u0388\u0313\u1F18\u0314\u1F19\u0300\u1FCA\u0301\u0389\u0313\u1F28\u0314"d~ +"\u1F29\u0345\u1FCC\u0300\u1FDA\u0301\u038A\u0304\u1FD9\u0306\u1FD8\u0308\u03AA\u0313\u1F38\u0314\u1F39\u0300\u1FF8"d~ +"\u0301\u038C\u0313\u1F48\u0314\u1F49\u0314\u1FEC\u0300\u1FEA\u0301\u038E\u0304\u1FE9\u0306\u1FE8\u0308\u03AB\u0314"d~ +"\u1F59\u0300\u1FFA\u0301\u038F\u0313\u1F68\u0314\u1F69\u0345\u1FFC\u0345\u1FB4\u0345\u1FC4\u0300\u1F70\u0301\u03AC"d~ +"\u0304\u1FB1\u0306\u1FB0\u0313\u1F00\u0314\u1F01\u0342\u1FB6\u0345\u1FB3\u0300\u1F72\u0301\u03AD\u0313\u1F10\u0314"d~ +"\u1F11\u0300\u1F74\u0301\u03AE\u0313\u1F20\u0314\u1F21\u0342\u1FC6\u0345\u1FC3\u0300\u1F76\u0301\u03AF\u0304\u1FD1"d~ +"\u0306\u1FD0\u0308\u03CA\u0313\u1F30\u0314\u1F31\u0342\u1FD6\u0300\u1F78\u0301\u03CC\u0313\u1F40\u0314\u1F41\u0313"d~ +"\u1FE4\u0314\u1FE5\u0300\u1F7A\u0301\u03CD\u0304\u1FE1\u0306\u1FE0\u0308\u03CB\u0313\u1F50\u0314\u1F51\u0342\u1FE6"d~ +"\u0300\u1F7C\u0301\u03CE\u0313\u1F60\u0314\u1F61\u0342\u1FF6\u0345\u1FF3\u0300\u1FD2\u0301\u0390\u0342\u1FD7\u0300"d~ +"\u1FE2\u0301\u03B0\u0342\u1FE7\u0345\u1FF4\u0301\u03D3\u0308\u03D4\u0308\u0407\u0306\u04D0\u0308\u04D2\u0301\u0403"d~ +"\u0300\u0400\u0306\u04D6\u0308\u0401\u0306\u04C1\u0308\u04DC\u0308\u04DE\u0300\u040D\u0304\u04E2\u0306\u0419\u0308"d~ +"\u04E4\u0301\u040C\u0308\u04E6\u0304\u04EE\u0306\u040E\u0308\u04F0\u030B\u04F2\u0308\u04F4\u0308\u04F8\u0308\u04EC"d~ +"\u0306\u04D1\u0308\u04D3\u0301\u0453\u0300\u0450\u0306\u04D7\u0308\u0451\u0306\u04C2\u0308\u04DD\u0308\u04DF\u0300"d~ +"\u045D\u0304\u04E3\u0306\u0439\u0308\u04E5\u0301\u045C\u0308\u04E7\u0304\u04EF\u0306\u045E\u0308\u04F1\u030B\u04F3"d~ +"\u0308\u04F5\u0308\u04F9\u0308\u04ED\u0308\u0457\u030F\u0476\u030F\u0477\u0308\u04DA\u0308\u04DB\u0308\u04EA\u0308"d~ +"\u04EB\u0653\u0622\u0654\u0623\u0655\u0625\u0654\u0624\u0654\u0626\u0654\u06C2\u0654\u06D3\u0654\u06C0\u093C\u0929"d~ +"\u093C\u0931\u093C\u0934\u09BE\u09CB\u09D7\u09CC\u0B3E\u0B4B\u0B56\u0B48\u0B57\u0B4C\u0BD7\u0B94\u0BBE\u0BCA\u0BD7"d~ +"\u0BCC\u0BBE\u0BCB\u0C56\u0C48\u0CD5\u0CC0\u0CC2\u0CCA\u0CD5\u0CC7\u0CD6\u0CC8\u0CD5\u0CCB\u0D3E\u0D4A\u0D57\u0D4C"d~ +"\u0D3E\u0D4B\u0DCA\u0DDA\u0DCF\u0DDC\u0DDF\u0DDE\u0DCA\u0DDD\u102E\u1026\u1B35\u1B06\u1B35\u1B08\u1B35\u1B0A\u1B35"d~ +"\u1B0C\u1B35\u1B0E\u1B35\u1B12\u1B35\u1B3B\u1B35\u1B3D\u1B35\u1B40\u1B35\u1B41\u1B35\u1B43\u0304\u1E38\u0304\u1E39"d~ +"\u0304\u1E5C\u0304\u1E5D\u0307\u1E68\u0307\u1E69\u0302\u1EAC\u0306\u1EB6\u0302\u1EAD\u0306\u1EB7\u0302\u1EC6\u0302"d~ +"\u1EC7\u0302\u1ED8\u0302\u1ED9\u0300\u1F02\u0301\u1F04\u0342\u1F06\u0345\u1F80\u0300\u1F03\u0301\u1F05\u0342\u1F07"d~ +"\u0345\u1F81\u0345\u1F82\u0345\u1F83\u0345\u1F84\u0345\u1F85\u0345\u1F86\u0345\u1F87\u0300\u1F0A\u0301\u1F0C\u0342"d~ +"\u1F0E\u0345\u1F88\u0300\u1F0B\u0301\u1F0D\u0342\u1F0F\u0345\u1F89\u0345\u1F8A\u0345\u1F8B\u0345\u1F8C\u0345\u1F8D"d~ +"\u0345\u1F8E\u0345\u1F8F\u0300\u1F12\u0301\u1F14\u0300\u1F13\u0301\u1F15\u0300\u1F1A\u0301\u1F1C\u0300\u1F1B\u0301"d~ +"\u1F1D\u0300\u1F22\u0301\u1F24\u0342\u1F26\u0345\u1F90\u0300\u1F23\u0301\u1F25\u0342\u1F27\u0345\u1F91\u0345\u1F92"d~ +"\u0345\u1F93\u0345\u1F94\u0345\u1F95\u0345\u1F96\u0345\u1F97\u0300\u1F2A\u0301\u1F2C\u0342\u1F2E\u0345\u1F98\u0300"d~ +"\u1F2B\u0301\u1F2D\u0342\u1F2F\u0345\u1F99\u0345\u1F9A\u0345\u1F9B\u0345\u1F9C\u0345\u1F9D\u0345\u1F9E\u0345\u1F9F"d~ +"\u0300\u1F32\u0301\u1F34\u0342\u1F36\u0300\u1F33\u0301\u1F35\u0342\u1F37\u0300\u1F3A\u0301\u1F3C\u0342\u1F3E\u0300"d~ +"\u1F3B\u0301\u1F3D\u0342\u1F3F\u0300\u1F42\u0301\u1F44\u0300\u1F43\u0301\u1F45\u0300\u1F4A\u0301\u1F4C\u0300\u1F4B"d~ +"\u0301\u1F4D\u0300\u1F52\u0301\u1F54\u0342\u1F56\u0300\u1F53\u0301\u1F55\u0342\u1F57\u0300\u1F5B\u0301\u1F5D\u0342"d~ +"\u1F5F\u0300\u1F62\u0301\u1F64\u0342\u1F66\u0345\u1FA0\u0300\u1F63\u0301\u1F65\u0342\u1F67\u0345\u1FA1\u0345\u1FA2"d~ +"\u0345\u1FA3\u0345\u1FA4\u0345\u1FA5\u0345\u1FA6\u0345\u1FA7\u0300\u1F6A\u0301\u1F6C\u0342\u1F6E\u0345\u1FA8\u0300"d~ +"\u1F6B\u0301\u1F6D\u0342\u1F6F\u0345\u1FA9\u0345\u1FAA\u0345\u1FAB\u0345\u1FAC\u0345\u1FAD\u0345\u1FAE\u0345\u1FAF"d~ +"\u0345\u1FB2\u0345\u1FC2\u0345\u1FF2\u0345\u1FB7\u0300\u1FCD\u0301\u1FCE\u0342\u1FCF\u0345\u1FC7\u0345\u1FF7\u0300"d~ +"\u1FDD\u0301\u1FDE\u0342\u1FDF\u0338\u219A\u0338\u219B\u0338\u21AE\u0338\u21CD\u0338\u21CF\u0338\u21CE\u0338\u2204"d~ +"\u0338\u2209\u0338\u220C\u0338\u2224\u0338\u2226\u0338\u2241\u0338\u2244\u0338\u2247\u0338\u2249\u0338\u226D\u0338"d~ +"\u2262\u0338\u2270\u0338\u2271\u0338\u2274\u0338\u2275\u0338\u2278\u0338\u2279\u0338\u2280\u0338\u2281\u0338\u22E0"d~ +"\u0338\u22E1\u0338\u2284\u0338\u2285\u0338\u2288\u0338\u2289\u0338\u22E2\u0338\u22E3\u0338\u22AC\u0338\u22AD\u0338"d~ +"\u22AE\u0338\u22AF\u0338\u22EA\u0338\u22EB\u0338\u22EC\u0338\u22ED\u3099\u3094\u3099\u304C\u3099\u304E\u3099\u3050"d~ +"\u3099\u3052\u3099\u3054\u3099\u3056\u3099\u3058\u3099\u305A\u3099\u305C\u3099\u305E\u3099\u3060\u3099\u3062\u3099"d~ +"\u3065\u3099\u3067\u3099\u3069\u3099\u3070\u309A\u3071\u3099\u3073\u309A\u3074\u3099\u3076\u309A\u3077\u3099\u3079"d~ +"\u309A\u307A\u3099\u307C\u309A\u307D\u3099\u309E\u3099\u30F4\u3099\u30AC\u3099\u30AE\u3099\u30B0\u3099\u30B2\u3099"d~ +"\u30B4\u3099\u30B6\u3099\u30B8\u3099\u30BA\u3099\u30BC\u3099\u30BE\u3099\u30C0\u3099\u30C2\u3099\u30C5\u3099\u30C7"d~ +"\u3099\u30C9\u3099\u30D0\u309A\u30D1\u3099\u30D3\u309A\u30D4\u3099\u30D6\u309A\u30D7\u3099\u30D9\u309A\u30DA\u3099"d~ +"\u30DC\u309A\u30DD\u3099\u30F7\u3099\u30F8\u3099\u30F9\u3099\u30FA\u3099\u30FE\u0307\U000105C9\u0307\U000105E4"d~ +"\U000110BA\U0001109A\U000110BA\U0001109C\U000110BA\U000110AB\U00011127\U0001112E\U00011127\U0001112F\U0001133E"d~ +"\U0001134B\U00011357\U0001134C\U000113C9\U00011383\U000113BB\U00011385\U000113C2\U0001138E\U000113C9\U00011391"d~ +"\U000113B8\U000113C7\U000113C2\U000113C5\U000113C9\U000113C8\U000114B0\U000114BC\U000114BA\U000114BB\U000114BD"d~ +"\U000114BE\U000115AF\U000115BA\U000115AF\U000115BB\U00011930\U00011938\U0001611E\U00016121\U0001611F\U00016123"d~ +"\U00016120\U00016125\U00016129\U00016122\U0001611F\U00016126\U00016120\U00016128\U0001611F\U00016127\U0001611F"d~ +"\U00016124\U00016D67\U00016D69\U00016D67\U00016D68\U00016D67\U00016D6A"d; +return t[]; } } @@ -22,15 +988,981 @@ return t; static if (size_t.sizeof == 8) { -//10144 bytes -enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)([ 0x0, 0x20, 0x2e0], [ 0x100, 0xb00, 0x10a0], [ 0x402030202020100, 0x908070206020205, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000300020001, 0x0, 0x0, 0x5, 0x0, 0x800070006, 0xb000a00000009, 0xd000c00000000, 0x10000f000e, 0x11000000000000, 0x1400130012, 0x17001600000015, 0x1900180000, 0x1b001a00180000, 0x1a00180000, 0x1a00180000, 0x1a00180000, 0x1a00000000, 0x1c00180000, 0x1a00180000, 0x1a001d0000, 0x1e00000000, 0x20001f0000, 0x2200210000, 0x25000000240023, 0x2700000026, 0x280000, 0x29, 0x0, 0x0, 0x0, 0x0, 0x2a00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c002b, 0x2d00000000, 0x0, 0x2e0000, 0x2f0000, 0x0, 0x31000000000030, 0x3300320000, 0x36003500340000, 0x38000000370000, 0x390000, 0x3b003a00000000, 0x0, 0x3d003c00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f003e00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000000000, 0x41000000000000, 0x42000000000000, 0x0, 0x0, 0x0, 0x0, 0x430000, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45000000000000, 0x47000000000046, 0x0, 0x0, 0x490048, 0x4a003500000000, 0x4c004b0000, 0x4e004d0000, 0x0, 0x510050004f0000, 0x0, 0x1a000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x530000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x54000000000000, 0x0, 0x55000000000000, 0x56000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x580057, 0x59000000000000, 0x0, 0x0, 0x0, 0x0, 0x5a0000, 0x0, 0x0, 0x5c0000005b0000, 0x5d00000000, 0x5e, 0x5f004800000000, 0x600000, 0x4d000000620061, 0x6300000000, 0x640000, 0x65000000000000, 0x67001a00660000, 0x0, 0x6800000000, 0x6900000000, 0x0, 0x6a00410000, 0x410000, 0x6b0000, 0x6c0000, 0x0, 0x600000, 0x0, 0x6e006d0000, 0x4e000000000000, 0x6f002c0000, 0x70, 0x0, 0x0, 0x410000, 0x0, 0x7100000000, 0x72, 0x0, 0x0, 0x7300000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x74000000000000, 0x750000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78000000000000, 0x7a0079, 0x7b00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7d007c, 0x7e, 0x750000, 0x0, 0x0, 0x800000007f0000, 0x0, 0x0, 0x0, 0x81000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8200000000, 0x8300000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xdcdce8e6e6e6e6e6, 0xdcdcdcdcd8e8dcdc, 0xcadcdcdcdccacadc, 0xdcdcdcdcdcdcdcca, 0x1010101dcdcdcdc, 0xe6e6e6dcdcdcdc01, 0xdce6f0e6e6e6e6e6, 0xdcdce6e6e6dcdc, 0xe6dcdcdcdce6e6e6, 0xe9eaeae9e6dcdce8, 0xe6e6e6e6e6e9eaea, 0xe6e6e6e6e6e6e6e6, 0x0, 0x0, 0xe6e6e6e6e6000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6dce6e6e6e6dc00, 0xe6e6e6e6dcdee6e6, 0xdcdcdcdcdcdce6e6, 0xe6e4dee6e6dce6e6, 0x11100f0e0d0c0b0a, 0x1700161514131312, 0x1200dce600191800, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6e6e6e6e6e6, 0x201f1e, 0x0, 0x1f1e1d1c1b000000, 0xe6dcdce6e6222120, 0xdce6e6dce6e6e6e6, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0xe6e6000000000000, 0xe60000e6e6e6e6e6, 0xe60000e6dce6e6e6, 0xdce6e6dc00e6, 0x0, 0x0, 0x0, 0x0, 0x2400, 0x0, 0x0, 0x0, 0xdce6e6dce6e6dce6, 0xe6dce6dcdce6dcdc, 0xe6dce6dce6dce6e6, 0xe6e6dc, 0x0, 0x0, 0x0, 0xe6e6e6e6e6000000, 0xe6dce6e6, 0xdc0000000000, 0x0, 0x0, 0xe6e6000000000000, 0xe6e6e6e6e600e6e6, 0xe6e6e600e6e6e6e6, 0xe6e6e6e6e600, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdc00, 0x0, 0x0, 0x0, 0xe6e6e6e6dcdcdce6, 0x0, 0xdce6e6e6e6e60000, 0xe6e6e6e6dcdcdcdc, 0xe6e6e6e6e6e6e6e6, 0xe6dce6e6dc00e6e6, 0xdcdcdce6e6e6dce6, 0xe6dce6e6e61d1c1b, 0xe6e6e6e6e6dcdce6, 0x0, 0x0, 0x0, 0x700000000, 0x0, 0x90000000000, 0xe6e6dce600, 0x0, 0x0, 0x90000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6000000000000, 0x0, 0x90000000000, 0x5b540000000000, 0x0, 0x0, 0x0, 0x0, 0x909000000, 0x0, 0x90000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x96767, 0x0, 0x6b6b6b6b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97676, 0x0, 0x7a7a7a7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdc, 0x0, 0x0, 0xdc00dc0000000000, 0xd800, 0x0, 0x0, 0x8400828100, 0x828282820000, 0xe6e60009e6e60082, 0x0, 0x0, 0x0, 0xdc000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x700000000000000, 0x90900, 0x0, 0xdc0000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6e60000000000, 0x0, 0x0, 0x90900000000, 0x0, 0x0, 0x0, 0x900000000, 0x0, 0x0, 0x0, 0x90000, 0xe60000000000, 0x0, 0xe400, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdce6de00, 0x0, 0x0, 0xe600000000000000, 0xdc, 0x9, 0x0, 0xe6e6e60000000000, 0xdc0000e6e6e6e6e6, 0x0, 0x0, 0xdcdcdce6e6e6e6e6, 0xdc00dce6e6dcdcdc, 0xe6e6e6dcdce6e6dc, 0xe6e6e6e6dce6e6, 0x0, 0x0, 0x0, 0x0, 0x700000000, 0x0, 0x900000000, 0x0, 0x0, 0x0, 0x0, 0xe6e6e6dce6000000, 0xe6e6e6e6, 0x0, 0x0, 0x9090000, 0x0, 0x0, 0x7000000000000, 0x0, 0x9090000, 0x0, 0x0, 0x0, 0x700000000000000, 0x0, 0x0, 0x0, 0xdcdcdc0100e6e6e6, 0xdcdcdcdce6e6dcdc, 0x1010101010100e6, 0xdc0000000001, 0xe600000000, 0xe6e6, 0xe6e6e6e6e6dce6e6, 0xdcd6eae6e6dce6e6, 0xe6e6e6e6e6e6e6ca, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe4e8e6e6e6e6e6e6, 0xdce6dce9e6dadce4, 0x0, 0x0, 0xe6e6e6e60101e6e6, 0xe6e6010101, 0xe60101000000e600, 0xdcdcdcdc0101e6dc, 0xe6, 0x0, 0x0, 0xe600000000000000, 0xe6e6, 0x0, 0x0, 0x0, 0x0, 0x900000000000000, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0x0, 0xe0e0dee8e4da0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80800, 0x0, 0xe600000000000000, 0xe6e6e6e600000000, 0xe6e6e6e6e6e6, 0x0, 0x0, 0x0, 0xe6e6000000000000, 0x0, 0x0, 0xe6e6, 0x0, 0x9000000000000, 0x0, 0x0, 0x0, 0x0, 0x900000000, 0x0, 0x0, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6, 0x0, 0x0, 0xdcdcdc000000, 0x0, 0x0, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x7000000, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe60000dce6e600e6, 0xe6e60000000000e6, 0xe600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9000000000000, 0x0, 0x0, 0x0, 0x0, 0x1a000000000000, 0xdce6e6e6e6e6e6e6, 0xe6e6dcdcdcdcdcdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc0000000000, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6e6000000000000, 0xe6e6e6, 0x0, 0xe600dc0000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x900000000dc01e6, 0xdce60000000000, 0x0, 0x0, 0x0, 0xe6e6e6e600000000, 0x0, 0x0, 0x0, 0x0, 0xe6e6000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdcdcdc0000000000, 0xdcdc000000000000, 0xdcdcdce6dce6e6e6, 0xdc, 0x0, 0xdce6dce60000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x900000000000000, 0x0, 0x0, 0x0, 0x70900, 0xe6e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x909000000, 0x0, 0x9, 0x70000, 0x0, 0x0, 0x0, 0x0, 0x7090000000000, 0x0, 0x0, 0x90700, 0x0, 0x0, 0x0, 0x0, 0x0, 0x707000000, 0xe6e6000000000000, 0xe6e6e6e6e6, 0xe6e6e6e6e6, 0x0, 0x7000000090000, 0x0, 0x0, 0xe6000000000000, 0x7090000, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x709000000000000, 0x0, 0x0, 0x9000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9090000000000, 0x7000000, 0x0, 0x0, 0x0, 0x900000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x900, 0x90900070000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x900000000000000, 0x0, 0x90900, 0x0, 0x0, 0x0, 0x0, 0x0, 0x101010101, 0x0, 0x0, 0x0, 0xe6e6e6e6e6e6e6, 0x0, 0x0, 0x0, 0x606, 0x0, 0x0, 0x0, 0x0, 0x1000000000000, 0x1d8d80000000000, 0xd8d8e20000000101, 0xd8d8d8, 0xdcdcdcdcdc000000, 0xe6e6e60000dcdcdc, 0xdcdce6e6, 0x0, 0x0, 0x0, 0xe6e6e6e60000, 0x0, 0x0, 0xe6e6e60000, 0x0, 0x0, 0x0, 0xe6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e60000e6, 0xe6e600e6e600e6e6, 0xe6e6e6, 0x0, 0x0, 0x0, 0xe600000000000000, 0x0, 0x0, 0x0, 0xe6000000000000, 0x0, 0x0, 0x0, 0xe6e6e6e600000000, 0x0, 0x0, 0x0, 0xe6dce8e800000000, 0x0, 0x0, 0x0, 0x0, 0xdcdcdcdcdcdcdc, 0x0, 0xe6e6e6e600000000, 0x7e6e6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +//10272 bytes +enum combiningClassTrieEntries = TrieEntry!(ubyte, 8, 8, 5)(x" +0000000000000000000000000000002000000000000002E0", +x" +00000000000001000000000000000B000000000000001120", +x" +040203020202010009080702060202050000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000004000300020001000000000000000000000000000000000000000000000005 +00000000000000000000000800070006000B000A00000009000D000C0000000000000010000F000E0011000000000000 +000000140013001200170016000000150000001900180000001B001A001800000000001A001800000000001A00180000 +0000001A001800000000001A000000000000001C001800000000001A001800000000001A001D00000000001E00000000 +00000020001F000000000022002100000025000000240023000000270000002600000000002800000000000000000029 +00000000000000000000000000000000000000000000000000000000000000000000002A000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000002C002B0000002D00000000000000000000000000000000002E000000000000002F00000000000000000000 +00310000000000300000003300320000003600350034000000380000003700000000000000390000003B003A00000000 +0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000003F003E000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000400000000000000041000000000000004200000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000430000000000000000004400000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000045000000000000004700000000004600000000000000000000000000000000 +0000000000490048004A0035000000000000004C004B00000000004E004D0000000000000000000000510050004F0000 +0000000000000000001A0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000005200000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000053000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000540000000000000000000000000000005500000000000000560000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000058005700590000000000000000000000000000000000000000000000000000000000000000000000000000 +005B0000005A000000000000000000000000000000000000005D0000005C00000000005E00000000000000000000005F +00600048000000000000000000610000004D000000630062000000640000000000000000006500000066000000000000 +0068001A0067000000000069000000000000006A000000000000006B0000000000000000000000000000006C00410000 +000000000041000000000000006D000000000000006E0000000000000000000000000000006100000000000000000000 +00000070006F0000004E00000000000000000071002C0000000000000000007200000000000000000000000000000000 +000000000041000000000000000000000000007300000000000000000000007400000000000000000000000000000000 +000000750000000000000000000000000000000000000000000000000000000000000000007600000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000077000000000000 +000000000078000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000007900000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000007A00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000007B00000000000000000000007D007C0000007E000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000080007F000000000000008100000000007800000000000000000000 +000000000000000000830000008200000000000000000000000000000000000000000000000000000084000000000000 +000000000000000000850000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000086000000000000008700000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6DCDCE8E6E6E6E6E6DCDCDCDCD8E8DCDC +CADCDCDCDCCACADCDCDCDCDCDCDCDCCA01010101DCDCDCDCE6E6E6DCDCDCDC01DCE6F0E6E6E6E6E600DCDCE6E6E6DCDC +E6DCDCDCDCE6E6E6E9EAEAE9E6DCDCE8E6E6E6E6E6E9EAEAE6E6E6E6E6E6E6E600000000000000000000000000000000 +E6E6E6E6E600000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +E6DCE6E6E6E6DC00E6E6E6E6DCDEE6E6DCDCDCDCDCDCE6E6E6E4DEE6E6DCE6E611100F0E0D0C0B0A1700161514131312 +1200DCE60019180000000000000000000000000000000000000000000000000000000000000000000000000000000000 +E6E6E6E6E6E6E6E60000000000201F1E00000000000000001F1E1D1C1B000000E6DCDCE6E6222120DCE6E6DCE6E6E6E6 +000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000 +E6E6000000000000E60000E6E6E6E6E6E60000E6DCE6E6E60000DCE6E6DC00E600000000000000000000000000000000 +000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000 +DCE6E6DCE6E6DCE6E6DCE6DCDCE6DCDCE6DCE6DCE6DCE6E60000000000E6E6DC00000000000000000000000000000000 +0000000000000000E6E6E6E6E600000000000000E6DCE6E60000DC000000000000000000000000000000000000000000 +E6E6000000000000E6E6E6E6E600E6E6E6E6E600E6E6E6E60000E6E6E6E6E60000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000DCDCDC0000000000000000000000000000000000 +E600000000000000E6E6E6E6DCDCDCE60000000000000000DCE6E6E6E6E60000E6E6E6E6DCDCDCDCE6E6E6E6E6E6E6E6 +E6DCE6E6DC00E6E6DCDCDCE6E6E6DCE6E6DCE6E6E61D1C1BE6E6E6E6E6DCDCE600000000000000000000000000000000 +0000000000000000000000070000000000000000000000000000090000000000000000E6E6DCE6000000000000000000 +000000000000000000000900000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000E600000000000000000000000000000000090000000000005B5400000000000000000000000000 +000000000000000000000000000000000000000000000000000000090900000000000000000000000000000000090000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096767 +0000000000000000000000006B6B6B6B0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000976760000000000000000000000007A7A7A7A00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000DCDC00000000000000000000000000000000 +DC00DC0000000000000000000000D8000000000000000000000000000000000000000084008281000000828282820000 +E6E60009E6E6008200000000000000000000000000000000000000000000000000DC0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000090900 +00000000000000000000DC00000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000E6E6E600000000000000000000000000000000000000000000000909000000000000000000000000 +000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000 +00000000000900000000E600000000000000000000000000000000000000E40000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000DCE6DE0000000000000000000000000000000000 +E60000000000000000000000000000DC00000000000000090000000000000000E6E6E60000000000DC0000E6E6E6E6E6 +00000000000000000000000000000000DCDCDCE6E6E6E6E6DC00DCE6E6DCDCDCE6E6E6DCDCE6E6DC00E6E6E6E6DCE6E6 +000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000 +00000009000000000000000000000000000000000000000000000000000000000000000000000000E6E6E6DCE6000000 +00000000E6E6E6E600000000000000000000000000000000000000000909000000000000000000000000000000000000 +000700000000000000000000000000000000000009090000000000000000000000000000000000000000000000000000 +0700000000000000000000000000000000000000000000000000000000000000DCDCDC0100E6E6E6DCDCDCDCE6E6DCDC +01010101010100E60000DC0000000001000000E600000000000000000000E6E6E6E6E6E6E6DCE6E6DCD6EAE6E6DCE6E6 +E6E6E6E6E6E6E6CAE6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E8E6E6E6E6E6E6DCE6DCE9E6DADCE4 +00000000000000000000000000000000E6E6E6E60101E6E6000000E6E6010101E60101000000E600DCDCDCDC0101E6DC +00000000000000E600000000000000000000000000000000E600000000000000000000000000E6E60000000000000000 +0000000000000000000000000000000000000000000000000900000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 +E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000000000000000E0E0DEE8E4DA000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000808000000000000000000E600000000000000 +E6E6E6E6000000000000E6E6E6E6E6E6000000000000000000000000000000000000000000000000E6E6000000000000 +00000000000000000000000000000000000000000000E6E6000000000000000000090000000000000000000000000000 +000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000 +E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6000000000000E6E6000000000000000000000000000000000000DCDCDC000000 +000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000 +000000000000000000000000000000000000000007000000000000000000000000000000000000090000000000000000 +0000000000000000000000000000000000000000000000000000000000000000E60000DCE6E600E6E6E60000000000E6 +000000000000E60000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00090000000000000000000000000000000000000000000000000000000000000000000000000000001A000000000000 +DCE6E6E6E6E6E6E6E6E6DCDCDCDCDCDC0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000DC000000000000000000000000DC000000000000000000000000000000000000000000000000 +00000000000000000000000000000000E6E60000000000000000000000E6E6E60000000000000000E600DC0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000900000000DC01E6 +00DCE60000000000000000000000000000000000000000000000000000000000E6E6E6E6000000000000000000000000 +0000000000000000000000000000000000000000000000000000E6E6E6E6E60000000000000000000000000000000000 +0000000000000000000000E6E60000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000DCDCDC0000000000DCDC000000000000DCDCDCE6DCE6E6E600000000000000DC0000000000000000 +0000DCE6DCE6000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000909000000000000000000000000000000000000000000000000000000000000000000000000070900 +0000000000E6E6E600000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000090900000000000000000000000000000000000009000000000007000000000000000000000000000000000000 +000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000090700 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000707000000 +E6E6000000000000000000E6E6E6E6E6000000E6E6E6E6E6000000000000000000000000000000000909000000000000 +0000000000000009000000000000000000070000000900000000000000000000000000000000000000E6000000000000 +000000000709000000000000000000000000000000000000000000000000000000000000000000070000000000000000 +000000000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000 +000000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000090900000000000000000007000000000000000000000000000000000000000000000000000000 +090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000009000000090900070000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000900000000000000000000000000000000000000000909000000000000000000 +000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000101010101000000000000000000000000000000000000000000000000 +00E6E6E6E6E6E6E600000000000000000000000000000000000000000000000000000000000006060000000000000000 +000000000000000000000000000000000000000000000000000100000000000001D8D80000000000D8D8E20000000101 +0000000000D8D8D8DCDCDCDCDC000000E6E6E60000DCDCDC00000000DCDCE6E600000000000000000000000000000000 +00000000000000000000E6E6E6E6000000000000000000000000000000000000000000E6E6E600000000000000000000 +0000000000000000000000000000000000E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E60000E6 +E6E600E6E600E6E60000000000E6E6E6000000000000000000000000000000000000000000000000E600000000000000 +00000000000000000000000000000000000000000000000000E600000000000000000000000000000000000000000000 +0000000000000000E6E6E6E600000000000000000000000000000000000000000000000000000000E6DCE8E800000000 +000000000000000000000000000000000000000000000000DCE600000000000000000000000000000000000000000000 +0000000000000000000000000000000000DCDCDCDCDCDCDC0000000000000000E6E6E6E600000000000000000007E6E6 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11; -enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)([ 0x0, 0x400], [ 0x1000, 0x2600], [ 0x3000200010000, 0x7000600050004, 0x7000700070008, 0xa000700090007, 0x70007000c000b, 0x7000700070007, 0x700070007000d, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x70010000f000e, 0x7000700070011, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff080208010800, 0x281618138003ffff, 0x383308328821301b, 0x285108507841383a, 0x8068485f185c3056, 0x3882407affff1078, 0x30a510a398903889, 0xffff30b648ad10ab, 0xffffffffffffffff, 0x28cf18cc80bcffff, 0x38ec08eb88da30d4, 0x290b110970fb40f3, 0x8122491919163110, 0x393c4134ffff1132, 0x3960115e994b4143, 0xffff317351691167, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff1979, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff217cffffffff, 0x984118209810980, 0xffff2185ffffffff, 0x989ffffffffffff, 0xffffffffffffffff, 0xffff0991198e218a, 0xffffffffffff0992, 0xffffffffffff2193, 0xffff2197ffffffff, 0x99f119d099c099b, 0xffff21a0ffffffff, 0x9a4ffffffffffff, 0xffffffffffffffff, 0xffff09ac19a921a5, 0xffffffffffff09ad, 0xffffffffffff21ae, 0x21b621b2ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x11bc11baffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff11c011be, 0xffffffffffffffff, 0xffffffffffffffff, 0x9c309c2ffffffff, 0xffffffffffffffff, 0xffffffff09c509c4, 0xffffffffffffffff, 0x9c909c809c709c6, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x9caffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff29d029cb, 0xffffffffffffffff, 0xffffffffffffffff, 0x29d5ffffffffffff, 0xffffffffffff29da, 0x9dfffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x9e109e0ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x9e309e2ffffffff, 0xffffffff09e509e4, 0x9e709e6ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff09e8ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff39e9ffff, 0x29f4ffff21f0ffff, 0xffffffff39f9ffff, 0x2200ffffffffffff, 0xffffffff0a04ffff, 0xffffffff3205ffff, 0xffffffff2a0bffff, 0xffff0a11ffff0a10, 0xffffffff4212ffff, 0x321effff221affff, 0xffffffff4224ffff, 0x222cffffffffffff, 0xffffffff1230ffff, 0xffffffff4232ffff, 0x1a431a40323affff, 0xffff0a46ffffffff, 0xffff1247ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a49ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xa4cffffffff124a, 0xa5212501a4dffff, 0xffff0a57ffff2253, 0xffff0a58ffffffff, 0x2259ffffffffffff, 0xa5dffffffffffff, 0xa5effffffffffff, 0xffffffff0a5fffff, 0xa62ffffffff1260, 0xa6812661a63ffff, 0xffff0a6dffff2269, 0xffff0a6effffffff, 0x226fffffffffffff, 0xa73ffffffffffff, 0xa74ffffffffffff, 0xffffffff0a75ffff, 0xffffffffffffffff, 0xffff0a76ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a780a77, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a7a0a79, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a7c0a7b, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1a7dffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a81ffff0a80, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a82ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a83ffffffff, 0xffffffff0a84ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff0a85, 0xffffffffffffffff, 0xa87ffffffff0a86, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1288ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1a8affffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a8dffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xa90128effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a91ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xa92ffffffffffff, 0xffffffffffffffff, 0xffff1a93ffffffff, 0xffff0a96ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xa991297ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff1a9affff, 0xffffffffffff0a9d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a9effff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xaa0ffff0a9fffff, 0xaa2ffff0aa1ffff, 0xffffffff0aa3ffff, 0xffffffff0aa4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0aa5ffffffff, 0xaa80aa7ffff0aa6, 0xffff0aa9ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xaab0aaaffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xaad0aacffffffff, 0xffffffffffffffff, 0xaaf0aaeffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff12b212b0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0ab50ab4, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0ab70ab6, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xac10ac022bc22b8, 0xac50ac40ac30ac2, 0xacf0ace22ca22c6, 0xad30ad20ad10ad0, 0xffffffff12d612d4, 0xffffffffffffffff, 0xffffffff12da12d8, 0xffffffffffffffff, 0xae50ae422e022dc, 0xae90ae80ae70ae6, 0xaf30af222ee22ea, 0xaf70af60af50af4, 0xffffffff1afb1af8, 0xffffffffffffffff, 0xffffffff1b011afe, 0xffffffffffffffff, 0xffffffff13061304, 0xffffffffffffffff, 0xffffffff130a1308, 0xffffffffffffffff, 0xffffffff1b0f1b0c, 0xffffffffffffffff, 0xffffffff1b12ffff, 0xffffffffffffffff, 0xb1e0b1d23192315, 0xb220b210b200b1f, 0xb2c0b2b23272323, 0xb300b2f0b2e0b2d, 0xffffffffffff0b31, 0xffffffffffff0b32, 0xffffffffffffffff, 0xffffffffffff0b33, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b34ffffffff, 0xffffffffffffffff, 0x1b35ffffffffffff, 0xffffffffffffffff, 0xffff0b38ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b39ffffffff, 0xffffffffffffffff, 0xffff1b3affffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b3effff0b3d, 0xffffffffffff0b3f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b41ffff0b40, 0xffffffffffff0b42, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xb43ffffffffffff, 0xffffffffffffffff, 0xb45ffffffff0b44, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xb46ffffffffffff, 0xffffffff0b47ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff0b48, 0xb49ffffffffffff, 0xffffffff0b4affff, 0xffffffffffff0b4b, 0xffffffff0b4cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0b4dffff, 0xffffffff0b4f0b4e, 0xffffffffffffffff, 0xffffffffffffffff, 0xb510b50ffffffff, 0xb530b52ffffffff, 0xb550b54ffffffff, 0xffffffff0b570b56, 0xb590b58ffffffff, 0xb5b0b5affffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b5d0b5cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b5effffffff, 0xffffffffffffffff, 0xb61ffff0b600b5f, 0xffffffffffffffff, 0xb630b62ffffffff, 0xffffffff0b650b64, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b66ffffffff, 0xb67ffffffffffff, 0xb69ffff0b68ffff, 0xb6bffff0b6affff, 0xb6dffff0b6cffff, 0xb6fffff0b6effff, 0xb71ffff0b70ffff, 0xffffffff0b72ffff, 0xffff0b74ffff0b73, 0xffffffffffff0b75, 0x1376ffffffffffff, 0xffff1378ffffffff, 0xffffffff137affff, 0x137effffffff137c, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0b80ffff, 0xffffffffffffffff, 0xffff0b81ffffffff, 0xb82ffffffffffff, 0xb84ffff0b83ffff, 0xb86ffff0b85ffff, 0xb88ffff0b87ffff, 0xb8affff0b89ffff, 0xb8cffff0b8bffff, 0xffffffff0b8dffff, 0xffff0b8fffff0b8e, 0xffffffffffff0b90, 0x1391ffffffffffff, 0xffff1393ffffffff, 0xffffffff1395ffff, 0x1399ffffffff1397, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xb9bffffffffffff, 0xffff0b9e0b9d0b9c, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0b9fffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xba1ffff0ba0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0ba2ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0ba40ba3ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x13a5ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff1ba7ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0bab0baa, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0bacffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -@property immutable(CompEntry[]) compositionTable() nothrow pure @nogc @safe -{ -alias CE = CompEntry; -static immutable CE[] t = [CE(0x00338, 0x0226e),CE(0x00338, 0x02260),CE(0x00338, 0x0226f),CE(0x00300, 0x000c0),CE(0x00301, 0x000c1),CE(0x00302, 0x000c2),CE(0x00303, 0x000c3),CE(0x00304, 0x00100),CE(0x00306, 0x00102),CE(0x00307, 0x00226),CE(0x00308, 0x000c4),CE(0x00309, 0x01ea2),CE(0x0030a, 0x000c5),CE(0x0030c, 0x001cd),CE(0x0030f, 0x00200),CE(0x00311, 0x00202),CE(0x00323, 0x01ea0),CE(0x00325, 0x01e00),CE(0x00328, 0x00104),CE(0x00307, 0x01e02),CE(0x00323, 0x01e04),CE(0x00331, 0x01e06),CE(0x00301, 0x00106),CE(0x00302, 0x00108),CE(0x00307, 0x0010a),CE(0x0030c, 0x0010c),CE(0x00327, 0x000c7),CE(0x00307, 0x01e0a),CE(0x0030c, 0x0010e),CE(0x00323, 0x01e0c),CE(0x00327, 0x01e10),CE(0x0032d, 0x01e12),CE(0x00331, 0x01e0e),CE(0x00300, 0x000c8),CE(0x00301, 0x000c9),CE(0x00302, 0x000ca),CE(0x00303, 0x01ebc),CE(0x00304, 0x00112),CE(0x00306, 0x00114),CE(0x00307, 0x00116),CE(0x00308, 0x000cb),CE(0x00309, 0x01eba),CE(0x0030c, 0x0011a),CE(0x0030f, 0x00204),CE(0x00311, 0x00206),CE(0x00323, 0x01eb8),CE(0x00327, 0x00228),CE(0x00328, 0x00118),CE(0x0032d, 0x01e18),CE(0x00330, 0x01e1a),CE(0x00307, 0x01e1e),CE(0x00301, 0x001f4),CE(0x00302, 0x0011c),CE(0x00304, 0x01e20),CE(0x00306, 0x0011e),CE(0x00307, 0x00120),CE(0x0030c, 0x001e6),CE(0x00327, 0x00122),CE(0x00302, 0x00124),CE(0x00307, 0x01e22),CE(0x00308, 0x01e26),CE(0x0030c, 0x0021e),CE(0x00323, 0x01e24),CE(0x00327, 0x01e28),CE(0x0032e, 0x01e2a),CE(0x00300, 0x000cc),CE(0x00301, 0x000cd),CE(0x00302, 0x000ce),CE(0x00303, 0x00128),CE(0x00304, 0x0012a),CE(0x00306, 0x0012c),CE(0x00307, 0x00130),CE(0x00308, 0x000cf),CE(0x00309, 0x01ec8),CE(0x0030c, 0x001cf),CE(0x0030f, 0x00208),CE(0x00311, 0x0020a),CE(0x00323, 0x01eca),CE(0x00328, 0x0012e),CE(0x00330, 0x01e2c),CE(0x00302, 0x00134),CE(0x00301, 0x01e30),CE(0x0030c, 0x001e8),CE(0x00323, 0x01e32),CE(0x00327, 0x00136),CE(0x00331, 0x01e34),CE(0x00301, 0x00139),CE(0x0030c, 0x0013d),CE(0x00323, 0x01e36),CE(0x00327, 0x0013b),CE(0x0032d, 0x01e3c),CE(0x00331, 0x01e3a),CE(0x00301, 0x01e3e),CE(0x00307, 0x01e40),CE(0x00323, 0x01e42),CE(0x00300, 0x001f8),CE(0x00301, 0x00143),CE(0x00303, 0x000d1),CE(0x00307, 0x01e44),CE(0x0030c, 0x00147),CE(0x00323, 0x01e46),CE(0x00327, 0x00145),CE(0x0032d, 0x01e4a),CE(0x00331, 0x01e48),CE(0x00300, 0x000d2),CE(0x00301, 0x000d3),CE(0x00302, 0x000d4),CE(0x00303, 0x000d5),CE(0x00304, 0x0014c),CE(0x00306, 0x0014e),CE(0x00307, 0x0022e),CE(0x00308, 0x000d6),CE(0x00309, 0x01ece),CE(0x0030b, 0x00150),CE(0x0030c, 0x001d1),CE(0x0030f, 0x0020c),CE(0x00311, 0x0020e),CE(0x0031b, 0x001a0),CE(0x00323, 0x01ecc),CE(0x00328, 0x001ea),CE(0x00301, 0x01e54),CE(0x00307, 0x01e56),CE(0x00301, 0x00154),CE(0x00307, 0x01e58),CE(0x0030c, 0x00158),CE(0x0030f, 0x00210),CE(0x00311, 0x00212),CE(0x00323, 0x01e5a),CE(0x00327, 0x00156),CE(0x00331, 0x01e5e),CE(0x00301, 0x0015a),CE(0x00302, 0x0015c),CE(0x00307, 0x01e60),CE(0x0030c, 0x00160),CE(0x00323, 0x01e62),CE(0x00326, 0x00218),CE(0x00327, 0x0015e),CE(0x00307, 0x01e6a),CE(0x0030c, 0x00164),CE(0x00323, 0x01e6c),CE(0x00326, 0x0021a),CE(0x00327, 0x00162),CE(0x0032d, 0x01e70),CE(0x00331, 0x01e6e),CE(0x00300, 0x000d9),CE(0x00301, 0x000da),CE(0x00302, 0x000db),CE(0x00303, 0x00168),CE(0x00304, 0x0016a),CE(0x00306, 0x0016c),CE(0x00308, 0x000dc),CE(0x00309, 0x01ee6),CE(0x0030a, 0x0016e),CE(0x0030b, 0x00170),CE(0x0030c, 0x001d3),CE(0x0030f, 0x00214),CE(0x00311, 0x00216),CE(0x0031b, 0x001af),CE(0x00323, 0x01ee4),CE(0x00324, 0x01e72),CE(0x00328, 0x00172),CE(0x0032d, 0x01e76),CE(0x00330, 0x01e74),CE(0x00303, 0x01e7c),CE(0x00323, 0x01e7e),CE(0x00300, 0x01e80),CE(0x00301, 0x01e82),CE(0x00302, 0x00174),CE(0x00307, 0x01e86),CE(0x00308, 0x01e84),CE(0x00323, 0x01e88),CE(0x00307, 0x01e8a),CE(0x00308, 0x01e8c),CE(0x00300, 0x01ef2),CE(0x00301, 0x000dd),CE(0x00302, 0x00176),CE(0x00303, 0x01ef8),CE(0x00304, 0x00232),CE(0x00307, 0x01e8e),CE(0x00308, 0x00178),CE(0x00309, 0x01ef6),CE(0x00323, 0x01ef4),CE(0x00301, 0x00179),CE(0x00302, 0x01e90),CE(0x00307, 0x0017b),CE(0x0030c, 0x0017d),CE(0x00323, 0x01e92),CE(0x00331, 0x01e94),CE(0x00300, 0x000e0),CE(0x00301, 0x000e1),CE(0x00302, 0x000e2),CE(0x00303, 0x000e3),CE(0x00304, 0x00101),CE(0x00306, 0x00103),CE(0x00307, 0x00227),CE(0x00308, 0x000e4),CE(0x00309, 0x01ea3),CE(0x0030a, 0x000e5),CE(0x0030c, 0x001ce),CE(0x0030f, 0x00201),CE(0x00311, 0x00203),CE(0x00323, 0x01ea1),CE(0x00325, 0x01e01),CE(0x00328, 0x00105),CE(0x00307, 0x01e03),CE(0x00323, 0x01e05),CE(0x00331, 0x01e07),CE(0x00301, 0x00107),CE(0x00302, 0x00109),CE(0x00307, 0x0010b),CE(0x0030c, 0x0010d),CE(0x00327, 0x000e7),CE(0x00307, 0x01e0b),CE(0x0030c, 0x0010f),CE(0x00323, 0x01e0d),CE(0x00327, 0x01e11),CE(0x0032d, 0x01e13),CE(0x00331, 0x01e0f),CE(0x00300, 0x000e8),CE(0x00301, 0x000e9),CE(0x00302, 0x000ea),CE(0x00303, 0x01ebd),CE(0x00304, 0x00113),CE(0x00306, 0x00115),CE(0x00307, 0x00117),CE(0x00308, 0x000eb),CE(0x00309, 0x01ebb),CE(0x0030c, 0x0011b),CE(0x0030f, 0x00205),CE(0x00311, 0x00207),CE(0x00323, 0x01eb9),CE(0x00327, 0x00229),CE(0x00328, 0x00119),CE(0x0032d, 0x01e19),CE(0x00330, 0x01e1b),CE(0x00307, 0x01e1f),CE(0x00301, 0x001f5),CE(0x00302, 0x0011d),CE(0x00304, 0x01e21),CE(0x00306, 0x0011f),CE(0x00307, 0x00121),CE(0x0030c, 0x001e7),CE(0x00327, 0x00123),CE(0x00302, 0x00125),CE(0x00307, 0x01e23),CE(0x00308, 0x01e27),CE(0x0030c, 0x0021f),CE(0x00323, 0x01e25),CE(0x00327, 0x01e29),CE(0x0032e, 0x01e2b),CE(0x00331, 0x01e96),CE(0x00300, 0x000ec),CE(0x00301, 0x000ed),CE(0x00302, 0x000ee),CE(0x00303, 0x00129),CE(0x00304, 0x0012b),CE(0x00306, 0x0012d),CE(0x00308, 0x000ef),CE(0x00309, 0x01ec9),CE(0x0030c, 0x001d0),CE(0x0030f, 0x00209),CE(0x00311, 0x0020b),CE(0x00323, 0x01ecb),CE(0x00328, 0x0012f),CE(0x00330, 0x01e2d),CE(0x00302, 0x00135),CE(0x0030c, 0x001f0),CE(0x00301, 0x01e31),CE(0x0030c, 0x001e9),CE(0x00323, 0x01e33),CE(0x00327, 0x00137),CE(0x00331, 0x01e35),CE(0x00301, 0x0013a),CE(0x0030c, 0x0013e),CE(0x00323, 0x01e37),CE(0x00327, 0x0013c),CE(0x0032d, 0x01e3d),CE(0x00331, 0x01e3b),CE(0x00301, 0x01e3f),CE(0x00307, 0x01e41),CE(0x00323, 0x01e43),CE(0x00300, 0x001f9),CE(0x00301, 0x00144),CE(0x00303, 0x000f1),CE(0x00307, 0x01e45),CE(0x0030c, 0x00148),CE(0x00323, 0x01e47),CE(0x00327, 0x00146),CE(0x0032d, 0x01e4b),CE(0x00331, 0x01e49),CE(0x00300, 0x000f2),CE(0x00301, 0x000f3),CE(0x00302, 0x000f4),CE(0x00303, 0x000f5),CE(0x00304, 0x0014d),CE(0x00306, 0x0014f),CE(0x00307, 0x0022f),CE(0x00308, 0x000f6),CE(0x00309, 0x01ecf),CE(0x0030b, 0x00151),CE(0x0030c, 0x001d2),CE(0x0030f, 0x0020d),CE(0x00311, 0x0020f),CE(0x0031b, 0x001a1),CE(0x00323, 0x01ecd),CE(0x00328, 0x001eb),CE(0x00301, 0x01e55),CE(0x00307, 0x01e57),CE(0x00301, 0x00155),CE(0x00307, 0x01e59),CE(0x0030c, 0x00159),CE(0x0030f, 0x00211),CE(0x00311, 0x00213),CE(0x00323, 0x01e5b),CE(0x00327, 0x00157),CE(0x00331, 0x01e5f),CE(0x00301, 0x0015b),CE(0x00302, 0x0015d),CE(0x00307, 0x01e61),CE(0x0030c, 0x00161),CE(0x00323, 0x01e63),CE(0x00326, 0x00219),CE(0x00327, 0x0015f),CE(0x00307, 0x01e6b),CE(0x00308, 0x01e97),CE(0x0030c, 0x00165),CE(0x00323, 0x01e6d),CE(0x00326, 0x0021b),CE(0x00327, 0x00163),CE(0x0032d, 0x01e71),CE(0x00331, 0x01e6f),CE(0x00300, 0x000f9),CE(0x00301, 0x000fa),CE(0x00302, 0x000fb),CE(0x00303, 0x00169),CE(0x00304, 0x0016b),CE(0x00306, 0x0016d),CE(0x00308, 0x000fc),CE(0x00309, 0x01ee7),CE(0x0030a, 0x0016f),CE(0x0030b, 0x00171),CE(0x0030c, 0x001d4),CE(0x0030f, 0x00215),CE(0x00311, 0x00217),CE(0x0031b, 0x001b0),CE(0x00323, 0x01ee5),CE(0x00324, 0x01e73),CE(0x00328, 0x00173),CE(0x0032d, 0x01e77),CE(0x00330, 0x01e75),CE(0x00303, 0x01e7d),CE(0x00323, 0x01e7f),CE(0x00300, 0x01e81),CE(0x00301, 0x01e83),CE(0x00302, 0x00175),CE(0x00307, 0x01e87),CE(0x00308, 0x01e85),CE(0x0030a, 0x01e98),CE(0x00323, 0x01e89),CE(0x00307, 0x01e8b),CE(0x00308, 0x01e8d),CE(0x00300, 0x01ef3),CE(0x00301, 0x000fd),CE(0x00302, 0x00177),CE(0x00303, 0x01ef9),CE(0x00304, 0x00233),CE(0x00307, 0x01e8f),CE(0x00308, 0x000ff),CE(0x00309, 0x01ef7),CE(0x0030a, 0x01e99),CE(0x00323, 0x01ef5),CE(0x00301, 0x0017a),CE(0x00302, 0x01e91),CE(0x00307, 0x0017c),CE(0x0030c, 0x0017e),CE(0x00323, 0x01e93),CE(0x00331, 0x01e95),CE(0x00300, 0x01fed),CE(0x00301, 0x00385),CE(0x00342, 0x01fc1),CE(0x00300, 0x01ea6),CE(0x00301, 0x01ea4),CE(0x00303, 0x01eaa),CE(0x00309, 0x01ea8),CE(0x00304, 0x001de),CE(0x00301, 0x001fa),CE(0x00301, 0x001fc),CE(0x00304, 0x001e2),CE(0x00301, 0x01e08),CE(0x00300, 0x01ec0),CE(0x00301, 0x01ebe),CE(0x00303, 0x01ec4),CE(0x00309, 0x01ec2),CE(0x00301, 0x01e2e),CE(0x00300, 0x01ed2),CE(0x00301, 0x01ed0),CE(0x00303, 0x01ed6),CE(0x00309, 0x01ed4),CE(0x00301, 0x01e4c),CE(0x00304, 0x0022c),CE(0x00308, 0x01e4e),CE(0x00304, 0x0022a),CE(0x00301, 0x001fe),CE(0x00300, 0x001db),CE(0x00301, 0x001d7),CE(0x00304, 0x001d5),CE(0x0030c, 0x001d9),CE(0x00300, 0x01ea7),CE(0x00301, 0x01ea5),CE(0x00303, 0x01eab),CE(0x00309, 0x01ea9),CE(0x00304, 0x001df),CE(0x00301, 0x001fb),CE(0x00301, 0x001fd),CE(0x00304, 0x001e3),CE(0x00301, 0x01e09),CE(0x00300, 0x01ec1),CE(0x00301, 0x01ebf),CE(0x00303, 0x01ec5),CE(0x00309, 0x01ec3),CE(0x00301, 0x01e2f),CE(0x00300, 0x01ed3),CE(0x00301, 0x01ed1),CE(0x00303, 0x01ed7),CE(0x00309, 0x01ed5),CE(0x00301, 0x01e4d),CE(0x00304, 0x0022d),CE(0x00308, 0x01e4f),CE(0x00304, 0x0022b),CE(0x00301, 0x001ff),CE(0x00300, 0x001dc),CE(0x00301, 0x001d8),CE(0x00304, 0x001d6),CE(0x0030c, 0x001da),CE(0x00300, 0x01eb0),CE(0x00301, 0x01eae),CE(0x00303, 0x01eb4),CE(0x00309, 0x01eb2),CE(0x00300, 0x01eb1),CE(0x00301, 0x01eaf),CE(0x00303, 0x01eb5),CE(0x00309, 0x01eb3),CE(0x00300, 0x01e14),CE(0x00301, 0x01e16),CE(0x00300, 0x01e15),CE(0x00301, 0x01e17),CE(0x00300, 0x01e50),CE(0x00301, 0x01e52),CE(0x00300, 0x01e51),CE(0x00301, 0x01e53),CE(0x00307, 0x01e64),CE(0x00307, 0x01e65),CE(0x00307, 0x01e66),CE(0x00307, 0x01e67),CE(0x00301, 0x01e78),CE(0x00301, 0x01e79),CE(0x00308, 0x01e7a),CE(0x00308, 0x01e7b),CE(0x00307, 0x01e9b),CE(0x00300, 0x01edc),CE(0x00301, 0x01eda),CE(0x00303, 0x01ee0),CE(0x00309, 0x01ede),CE(0x00323, 0x01ee2),CE(0x00300, 0x01edd),CE(0x00301, 0x01edb),CE(0x00303, 0x01ee1),CE(0x00309, 0x01edf),CE(0x00323, 0x01ee3),CE(0x00300, 0x01eea),CE(0x00301, 0x01ee8),CE(0x00303, 0x01eee),CE(0x00309, 0x01eec),CE(0x00323, 0x01ef0),CE(0x00300, 0x01eeb),CE(0x00301, 0x01ee9),CE(0x00303, 0x01eef),CE(0x00309, 0x01eed),CE(0x00323, 0x01ef1),CE(0x0030c, 0x001ee),CE(0x00304, 0x001ec),CE(0x00304, 0x001ed),CE(0x00304, 0x001e0),CE(0x00304, 0x001e1),CE(0x00306, 0x01e1c),CE(0x00306, 0x01e1d),CE(0x00304, 0x00230),CE(0x00304, 0x00231),CE(0x0030c, 0x001ef),CE(0x00300, 0x01fba),CE(0x00301, 0x00386),CE(0x00304, 0x01fb9),CE(0x00306, 0x01fb8),CE(0x00313, 0x01f08),CE(0x00314, 0x01f09),CE(0x00345, 0x01fbc),CE(0x00300, 0x01fc8),CE(0x00301, 0x00388),CE(0x00313, 0x01f18),CE(0x00314, 0x01f19),CE(0x00300, 0x01fca),CE(0x00301, 0x00389),CE(0x00313, 0x01f28),CE(0x00314, 0x01f29),CE(0x00345, 0x01fcc),CE(0x00300, 0x01fda),CE(0x00301, 0x0038a),CE(0x00304, 0x01fd9),CE(0x00306, 0x01fd8),CE(0x00308, 0x003aa),CE(0x00313, 0x01f38),CE(0x00314, 0x01f39),CE(0x00300, 0x01ff8),CE(0x00301, 0x0038c),CE(0x00313, 0x01f48),CE(0x00314, 0x01f49),CE(0x00314, 0x01fec),CE(0x00300, 0x01fea),CE(0x00301, 0x0038e),CE(0x00304, 0x01fe9),CE(0x00306, 0x01fe8),CE(0x00308, 0x003ab),CE(0x00314, 0x01f59),CE(0x00300, 0x01ffa),CE(0x00301, 0x0038f),CE(0x00313, 0x01f68),CE(0x00314, 0x01f69),CE(0x00345, 0x01ffc),CE(0x00345, 0x01fb4),CE(0x00345, 0x01fc4),CE(0x00300, 0x01f70),CE(0x00301, 0x003ac),CE(0x00304, 0x01fb1),CE(0x00306, 0x01fb0),CE(0x00313, 0x01f00),CE(0x00314, 0x01f01),CE(0x00342, 0x01fb6),CE(0x00345, 0x01fb3),CE(0x00300, 0x01f72),CE(0x00301, 0x003ad),CE(0x00313, 0x01f10),CE(0x00314, 0x01f11),CE(0x00300, 0x01f74),CE(0x00301, 0x003ae),CE(0x00313, 0x01f20),CE(0x00314, 0x01f21),CE(0x00342, 0x01fc6),CE(0x00345, 0x01fc3),CE(0x00300, 0x01f76),CE(0x00301, 0x003af),CE(0x00304, 0x01fd1),CE(0x00306, 0x01fd0),CE(0x00308, 0x003ca),CE(0x00313, 0x01f30),CE(0x00314, 0x01f31),CE(0x00342, 0x01fd6),CE(0x00300, 0x01f78),CE(0x00301, 0x003cc),CE(0x00313, 0x01f40),CE(0x00314, 0x01f41),CE(0x00313, 0x01fe4),CE(0x00314, 0x01fe5),CE(0x00300, 0x01f7a),CE(0x00301, 0x003cd),CE(0x00304, 0x01fe1),CE(0x00306, 0x01fe0),CE(0x00308, 0x003cb),CE(0x00313, 0x01f50),CE(0x00314, 0x01f51),CE(0x00342, 0x01fe6),CE(0x00300, 0x01f7c),CE(0x00301, 0x003ce),CE(0x00313, 0x01f60),CE(0x00314, 0x01f61),CE(0x00342, 0x01ff6),CE(0x00345, 0x01ff3),CE(0x00300, 0x01fd2),CE(0x00301, 0x00390),CE(0x00342, 0x01fd7),CE(0x00300, 0x01fe2),CE(0x00301, 0x003b0),CE(0x00342, 0x01fe7),CE(0x00345, 0x01ff4),CE(0x00301, 0x003d3),CE(0x00308, 0x003d4),CE(0x00308, 0x00407),CE(0x00306, 0x004d0),CE(0x00308, 0x004d2),CE(0x00301, 0x00403),CE(0x00300, 0x00400),CE(0x00306, 0x004d6),CE(0x00308, 0x00401),CE(0x00306, 0x004c1),CE(0x00308, 0x004dc),CE(0x00308, 0x004de),CE(0x00300, 0x0040d),CE(0x00304, 0x004e2),CE(0x00306, 0x00419),CE(0x00308, 0x004e4),CE(0x00301, 0x0040c),CE(0x00308, 0x004e6),CE(0x00304, 0x004ee),CE(0x00306, 0x0040e),CE(0x00308, 0x004f0),CE(0x0030b, 0x004f2),CE(0x00308, 0x004f4),CE(0x00308, 0x004f8),CE(0x00308, 0x004ec),CE(0x00306, 0x004d1),CE(0x00308, 0x004d3),CE(0x00301, 0x00453),CE(0x00300, 0x00450),CE(0x00306, 0x004d7),CE(0x00308, 0x00451),CE(0x00306, 0x004c2),CE(0x00308, 0x004dd),CE(0x00308, 0x004df),CE(0x00300, 0x0045d),CE(0x00304, 0x004e3),CE(0x00306, 0x00439),CE(0x00308, 0x004e5),CE(0x00301, 0x0045c),CE(0x00308, 0x004e7),CE(0x00304, 0x004ef),CE(0x00306, 0x0045e),CE(0x00308, 0x004f1),CE(0x0030b, 0x004f3),CE(0x00308, 0x004f5),CE(0x00308, 0x004f9),CE(0x00308, 0x004ed),CE(0x00308, 0x00457),CE(0x0030f, 0x00476),CE(0x0030f, 0x00477),CE(0x00308, 0x004da),CE(0x00308, 0x004db),CE(0x00308, 0x004ea),CE(0x00308, 0x004eb),CE(0x00653, 0x00622),CE(0x00654, 0x00623),CE(0x00655, 0x00625),CE(0x00654, 0x00624),CE(0x00654, 0x00626),CE(0x00654, 0x006c2),CE(0x00654, 0x006d3),CE(0x00654, 0x006c0),CE(0x0093c, 0x00929),CE(0x0093c, 0x00931),CE(0x0093c, 0x00934),CE(0x009be, 0x009cb),CE(0x009d7, 0x009cc),CE(0x00b3e, 0x00b4b),CE(0x00b56, 0x00b48),CE(0x00b57, 0x00b4c),CE(0x00bd7, 0x00b94),CE(0x00bbe, 0x00bca),CE(0x00bd7, 0x00bcc),CE(0x00bbe, 0x00bcb),CE(0x00c56, 0x00c48),CE(0x00cd5, 0x00cc0),CE(0x00cc2, 0x00cca),CE(0x00cd5, 0x00cc7),CE(0x00cd6, 0x00cc8),CE(0x00cd5, 0x00ccb),CE(0x00d3e, 0x00d4a),CE(0x00d57, 0x00d4c),CE(0x00d3e, 0x00d4b),CE(0x00dca, 0x00dda),CE(0x00dcf, 0x00ddc),CE(0x00ddf, 0x00dde),CE(0x00dca, 0x00ddd),CE(0x0102e, 0x01026),CE(0x01b35, 0x01b06),CE(0x01b35, 0x01b08),CE(0x01b35, 0x01b0a),CE(0x01b35, 0x01b0c),CE(0x01b35, 0x01b0e),CE(0x01b35, 0x01b12),CE(0x01b35, 0x01b3b),CE(0x01b35, 0x01b3d),CE(0x01b35, 0x01b40),CE(0x01b35, 0x01b41),CE(0x01b35, 0x01b43),CE(0x00304, 0x01e38),CE(0x00304, 0x01e39),CE(0x00304, 0x01e5c),CE(0x00304, 0x01e5d),CE(0x00307, 0x01e68),CE(0x00307, 0x01e69),CE(0x00302, 0x01eac),CE(0x00306, 0x01eb6),CE(0x00302, 0x01ead),CE(0x00306, 0x01eb7),CE(0x00302, 0x01ec6),CE(0x00302, 0x01ec7),CE(0x00302, 0x01ed8),CE(0x00302, 0x01ed9),CE(0x00300, 0x01f02),CE(0x00301, 0x01f04),CE(0x00342, 0x01f06),CE(0x00345, 0x01f80),CE(0x00300, 0x01f03),CE(0x00301, 0x01f05),CE(0x00342, 0x01f07),CE(0x00345, 0x01f81),CE(0x00345, 0x01f82),CE(0x00345, 0x01f83),CE(0x00345, 0x01f84),CE(0x00345, 0x01f85),CE(0x00345, 0x01f86),CE(0x00345, 0x01f87),CE(0x00300, 0x01f0a),CE(0x00301, 0x01f0c),CE(0x00342, 0x01f0e),CE(0x00345, 0x01f88),CE(0x00300, 0x01f0b),CE(0x00301, 0x01f0d),CE(0x00342, 0x01f0f),CE(0x00345, 0x01f89),CE(0x00345, 0x01f8a),CE(0x00345, 0x01f8b),CE(0x00345, 0x01f8c),CE(0x00345, 0x01f8d),CE(0x00345, 0x01f8e),CE(0x00345, 0x01f8f),CE(0x00300, 0x01f12),CE(0x00301, 0x01f14),CE(0x00300, 0x01f13),CE(0x00301, 0x01f15),CE(0x00300, 0x01f1a),CE(0x00301, 0x01f1c),CE(0x00300, 0x01f1b),CE(0x00301, 0x01f1d),CE(0x00300, 0x01f22),CE(0x00301, 0x01f24),CE(0x00342, 0x01f26),CE(0x00345, 0x01f90),CE(0x00300, 0x01f23),CE(0x00301, 0x01f25),CE(0x00342, 0x01f27),CE(0x00345, 0x01f91),CE(0x00345, 0x01f92),CE(0x00345, 0x01f93),CE(0x00345, 0x01f94),CE(0x00345, 0x01f95),CE(0x00345, 0x01f96),CE(0x00345, 0x01f97),CE(0x00300, 0x01f2a),CE(0x00301, 0x01f2c),CE(0x00342, 0x01f2e),CE(0x00345, 0x01f98),CE(0x00300, 0x01f2b),CE(0x00301, 0x01f2d),CE(0x00342, 0x01f2f),CE(0x00345, 0x01f99),CE(0x00345, 0x01f9a),CE(0x00345, 0x01f9b),CE(0x00345, 0x01f9c),CE(0x00345, 0x01f9d),CE(0x00345, 0x01f9e),CE(0x00345, 0x01f9f),CE(0x00300, 0x01f32),CE(0x00301, 0x01f34),CE(0x00342, 0x01f36),CE(0x00300, 0x01f33),CE(0x00301, 0x01f35),CE(0x00342, 0x01f37),CE(0x00300, 0x01f3a),CE(0x00301, 0x01f3c),CE(0x00342, 0x01f3e),CE(0x00300, 0x01f3b),CE(0x00301, 0x01f3d),CE(0x00342, 0x01f3f),CE(0x00300, 0x01f42),CE(0x00301, 0x01f44),CE(0x00300, 0x01f43),CE(0x00301, 0x01f45),CE(0x00300, 0x01f4a),CE(0x00301, 0x01f4c),CE(0x00300, 0x01f4b),CE(0x00301, 0x01f4d),CE(0x00300, 0x01f52),CE(0x00301, 0x01f54),CE(0x00342, 0x01f56),CE(0x00300, 0x01f53),CE(0x00301, 0x01f55),CE(0x00342, 0x01f57),CE(0x00300, 0x01f5b),CE(0x00301, 0x01f5d),CE(0x00342, 0x01f5f),CE(0x00300, 0x01f62),CE(0x00301, 0x01f64),CE(0x00342, 0x01f66),CE(0x00345, 0x01fa0),CE(0x00300, 0x01f63),CE(0x00301, 0x01f65),CE(0x00342, 0x01f67),CE(0x00345, 0x01fa1),CE(0x00345, 0x01fa2),CE(0x00345, 0x01fa3),CE(0x00345, 0x01fa4),CE(0x00345, 0x01fa5),CE(0x00345, 0x01fa6),CE(0x00345, 0x01fa7),CE(0x00300, 0x01f6a),CE(0x00301, 0x01f6c),CE(0x00342, 0x01f6e),CE(0x00345, 0x01fa8),CE(0x00300, 0x01f6b),CE(0x00301, 0x01f6d),CE(0x00342, 0x01f6f),CE(0x00345, 0x01fa9),CE(0x00345, 0x01faa),CE(0x00345, 0x01fab),CE(0x00345, 0x01fac),CE(0x00345, 0x01fad),CE(0x00345, 0x01fae),CE(0x00345, 0x01faf),CE(0x00345, 0x01fb2),CE(0x00345, 0x01fc2),CE(0x00345, 0x01ff2),CE(0x00345, 0x01fb7),CE(0x00300, 0x01fcd),CE(0x00301, 0x01fce),CE(0x00342, 0x01fcf),CE(0x00345, 0x01fc7),CE(0x00345, 0x01ff7),CE(0x00300, 0x01fdd),CE(0x00301, 0x01fde),CE(0x00342, 0x01fdf),CE(0x00338, 0x0219a),CE(0x00338, 0x0219b),CE(0x00338, 0x021ae),CE(0x00338, 0x021cd),CE(0x00338, 0x021cf),CE(0x00338, 0x021ce),CE(0x00338, 0x02204),CE(0x00338, 0x02209),CE(0x00338, 0x0220c),CE(0x00338, 0x02224),CE(0x00338, 0x02226),CE(0x00338, 0x02241),CE(0x00338, 0x02244),CE(0x00338, 0x02247),CE(0x00338, 0x02249),CE(0x00338, 0x0226d),CE(0x00338, 0x02262),CE(0x00338, 0x02270),CE(0x00338, 0x02271),CE(0x00338, 0x02274),CE(0x00338, 0x02275),CE(0x00338, 0x02278),CE(0x00338, 0x02279),CE(0x00338, 0x02280),CE(0x00338, 0x02281),CE(0x00338, 0x022e0),CE(0x00338, 0x022e1),CE(0x00338, 0x02284),CE(0x00338, 0x02285),CE(0x00338, 0x02288),CE(0x00338, 0x02289),CE(0x00338, 0x022e2),CE(0x00338, 0x022e3),CE(0x00338, 0x022ac),CE(0x00338, 0x022ad),CE(0x00338, 0x022ae),CE(0x00338, 0x022af),CE(0x00338, 0x022ea),CE(0x00338, 0x022eb),CE(0x00338, 0x022ec),CE(0x00338, 0x022ed),CE(0x03099, 0x03094),CE(0x03099, 0x0304c),CE(0x03099, 0x0304e),CE(0x03099, 0x03050),CE(0x03099, 0x03052),CE(0x03099, 0x03054),CE(0x03099, 0x03056),CE(0x03099, 0x03058),CE(0x03099, 0x0305a),CE(0x03099, 0x0305c),CE(0x03099, 0x0305e),CE(0x03099, 0x03060),CE(0x03099, 0x03062),CE(0x03099, 0x03065),CE(0x03099, 0x03067),CE(0x03099, 0x03069),CE(0x03099, 0x03070),CE(0x0309a, 0x03071),CE(0x03099, 0x03073),CE(0x0309a, 0x03074),CE(0x03099, 0x03076),CE(0x0309a, 0x03077),CE(0x03099, 0x03079),CE(0x0309a, 0x0307a),CE(0x03099, 0x0307c),CE(0x0309a, 0x0307d),CE(0x03099, 0x0309e),CE(0x03099, 0x030f4),CE(0x03099, 0x030ac),CE(0x03099, 0x030ae),CE(0x03099, 0x030b0),CE(0x03099, 0x030b2),CE(0x03099, 0x030b4),CE(0x03099, 0x030b6),CE(0x03099, 0x030b8),CE(0x03099, 0x030ba),CE(0x03099, 0x030bc),CE(0x03099, 0x030be),CE(0x03099, 0x030c0),CE(0x03099, 0x030c2),CE(0x03099, 0x030c5),CE(0x03099, 0x030c7),CE(0x03099, 0x030c9),CE(0x03099, 0x030d0),CE(0x0309a, 0x030d1),CE(0x03099, 0x030d3),CE(0x0309a, 0x030d4),CE(0x03099, 0x030d6),CE(0x0309a, 0x030d7),CE(0x03099, 0x030d9),CE(0x0309a, 0x030da),CE(0x03099, 0x030dc),CE(0x0309a, 0x030dd),CE(0x03099, 0x030f7),CE(0x03099, 0x030f8),CE(0x03099, 0x030f9),CE(0x03099, 0x030fa),CE(0x03099, 0x030fe),CE(0x110ba, 0x1109a),CE(0x110ba, 0x1109c),CE(0x110ba, 0x110ab),CE(0x11127, 0x1112e),CE(0x11127, 0x1112f),CE(0x1133e, 0x1134b),CE(0x11357, 0x1134c),CE(0x114b0, 0x114bc),CE(0x114ba, 0x114bb),CE(0x114bd, 0x114be),CE(0x115af, 0x115ba),CE(0x115af, 0x115bb),CE(0x11930, 0x11938),]; -return t; +enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)(x" +00000000000000000000000000000400", +x" +00000000000010000000000000002C00", +x" +000300020001000000070006000500040007000700070008000A00070009000700070007000C000B0007000700070007 +000700070007000D00070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000E000700070007000700070007000700110010000F0007000700070012 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070013000700140007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +0007000700070007000700070007000700070007000700070007000700070007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF080208010800281618138003FFFF383308328821301B285108507841383A8068485F185C3056 +3882407AFFFF107830A510A398903889FFFF30B648AD10ABFFFFFFFFFFFFFFFF28CF18CC80BCFFFF38EC08EB88DA30D4 +290B110970FB40F38122491919163110393C4134FFFF11323960115E994B4143FFFF317351691167FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1979FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF217CFFFFFFFF0984118209810980 +FFFF2185FFFFFFFF0989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0991198E218AFFFFFFFFFFFF0992FFFFFFFFFFFF2193 +FFFF2197FFFFFFFF099F119D099C099BFFFF21A0FFFFFFFF09A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09AC19A921A5 +FFFFFFFFFFFF09ADFFFFFFFFFFFF21AE21B621B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +11BC11BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11C011BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +09C309C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09C509C4FFFFFFFFFFFFFFFF09C909C809C709C6FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF29D029CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29D5FFFFFFFFFFFFFFFFFFFFFFFF29DA09DFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +09E109E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09E309E2FFFFFFFFFFFFFFFF09E509E409E709E6FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF09E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39E9FFFF29F4FFFF21F0FFFF +FFFFFFFF39F9FFFF2200FFFFFFFFFFFFFFFFFFFF0A04FFFFFFFFFFFF3205FFFFFFFFFFFF2A0BFFFFFFFF0A11FFFF0A10 +FFFFFFFF4212FFFF321EFFFF221AFFFFFFFFFFFF4224FFFF222CFFFFFFFFFFFFFFFFFFFF1230FFFFFFFFFFFF4232FFFF +1A431A40323AFFFFFFFF0A46FFFFFFFFFFFF1247FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A49FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0A4CFFFFFFFF124A0A5212501A4DFFFFFFFF0A57FFFF2253FFFF0A58FFFFFFFF2259FFFFFFFFFFFF0A5DFFFFFFFFFFFF +0A5EFFFFFFFFFFFFFFFFFFFF0A5FFFFF0A62FFFFFFFF12600A6812661A63FFFFFFFF0A6DFFFF2269FFFF0A6EFFFFFFFF +226FFFFFFFFFFFFF0A73FFFFFFFFFFFF0A74FFFFFFFFFFFFFFFFFFFF0A75FFFFFFFFFFFFFFFFFFFFFFFF0A76FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0A780A77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A7A0A79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0A7C0A7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF1A7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A81FFFF0A80FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A82FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A83FFFFFFFFFFFFFFFF0A84FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A85FFFFFFFFFFFFFFFF0A87FFFFFFFF0A86FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1288FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0A8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0A90128EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A91FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A93FFFFFFFF +FFFF0A96FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0A991297FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A9AFFFFFFFFFFFFFFFF0A9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A9EFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AA0FFFF0A9FFFFF0AA2FFFF0AA1FFFFFFFFFFFF0AA3FFFF +FFFFFFFF0AA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AA5FFFFFFFF0AA80AA7FFFF0AA6 +FFFF0AA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0AAB0AAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAD0AACFFFFFFFFFFFFFFFFFFFFFFFF +0AAF0AAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12B212B0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AB50AB4FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AB70AB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AC10AC022BC22B80AC50AC40AC30AC2 +0ACF0ACE22CA22C60AD30AD20AD10AD0FFFFFFFF12D612D4FFFFFFFFFFFFFFFFFFFFFFFF12DA12D8FFFFFFFFFFFFFFFF +0AE50AE422E022DC0AE90AE80AE70AE60AF30AF222EE22EA0AF70AF60AF50AF4FFFFFFFF1AFB1AF8FFFFFFFFFFFFFFFF +FFFFFFFF1B011AFEFFFFFFFFFFFFFFFFFFFFFFFF13061304FFFFFFFFFFFFFFFFFFFFFFFF130A1308FFFFFFFFFFFFFFFF +FFFFFFFF1B0F1B0CFFFFFFFFFFFFFFFFFFFFFFFF1B12FFFFFFFFFFFFFFFFFFFF0B1E0B1D231923150B220B210B200B1F +0B2C0B2B232723230B300B2F0B2E0B2DFFFFFFFFFFFF0B31FFFFFFFFFFFF0B32FFFFFFFFFFFFFFFFFFFFFFFFFFFF0B33 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0B34FFFFFFFFFFFFFFFFFFFFFFFF1B35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B38FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B39FFFFFFFF +FFFFFFFFFFFFFFFFFFFF1B3AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0B3EFFFF0B3DFFFFFFFFFFFF0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B41FFFF0B40FFFFFFFFFFFF0B42 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B43FFFFFFFFFFFFFFFFFFFFFFFFFFFF +0B45FFFFFFFF0B44FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0B46FFFFFFFFFFFFFFFFFFFF0B47FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0B480B49FFFFFFFFFFFFFFFFFFFF0B4AFFFFFFFFFFFFFFFF0B4BFFFFFFFF0B4CFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B4DFFFFFFFFFFFF0B4F0B4E +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B510B50FFFFFFFF0B530B52FFFFFFFF0B550B54FFFFFFFFFFFFFFFF0B570B56 +0B590B58FFFFFFFF0B5B0B5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B5D0B5CFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B5EFFFFFFFFFFFFFFFFFFFFFFFF0B61FFFF0B600B5FFFFFFFFFFFFFFFFF +0B630B62FFFFFFFFFFFFFFFF0B650B64FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B66FFFFFFFF +0B67FFFFFFFFFFFF0B69FFFF0B68FFFF0B6BFFFF0B6AFFFF0B6DFFFF0B6CFFFF0B6FFFFF0B6EFFFF0B71FFFF0B70FFFF +FFFFFFFF0B72FFFFFFFF0B74FFFF0B73FFFFFFFFFFFF0B751376FFFFFFFFFFFFFFFF1378FFFFFFFFFFFFFFFF137AFFFF +137EFFFFFFFF137CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B80FFFFFFFFFFFFFFFFFFFFFFFF0B81FFFFFFFF +0B82FFFFFFFFFFFF0B84FFFF0B83FFFF0B86FFFF0B85FFFF0B88FFFF0B87FFFF0B8AFFFF0B89FFFF0B8CFFFF0B8BFFFF +FFFFFFFF0B8DFFFFFFFF0B8FFFFF0B8EFFFFFFFFFFFF0B901391FFFFFFFFFFFFFFFF1393FFFFFFFFFFFFFFFF1395FFFF +1399FFFFFFFF1397FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B9BFFFFFFFFFFFF +FFFF0B9E0B9D0B9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA0FFFFFFFFFFFFFFFFFFFFFFFF +FFFF0BA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0BA3FFFF0BA2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BA60BA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF13A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0BA9FFFFFFFFFFFFFFFFFFFF0BAA0BABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BACFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1BADFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF1BB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BB40BB3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23B6FFFFFFFF +FFFF0BBC13BAFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0BBEFFFFFFFFFFFF0BBFFFFFFFFFFFFFFFFFFFFF0BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +dstring compositionTable() nothrow @nogc pure @safe { +static immutable dchar[1922] t = +"\u0338\u226E\u0338\u2260\u0338\u226F\u0300\u00C0\u0301\u00C1\u0302\u00C2\u0303\u00C3\u0304\u0100\u0306\u0102\u0307"d~ +"\u0226\u0308\u00C4\u0309\u1EA2\u030A\u00C5\u030C\u01CD\u030F\u0200\u0311\u0202\u0323\u1EA0\u0325\u1E00\u0328\u0104"d~ +"\u0307\u1E02\u0323\u1E04\u0331\u1E06\u0301\u0106\u0302\u0108\u0307\u010A\u030C\u010C\u0327\u00C7\u0307\u1E0A\u030C"d~ +"\u010E\u0323\u1E0C\u0327\u1E10\u032D\u1E12\u0331\u1E0E\u0300\u00C8\u0301\u00C9\u0302\u00CA\u0303\u1EBC\u0304\u0112"d~ +"\u0306\u0114\u0307\u0116\u0308\u00CB\u0309\u1EBA\u030C\u011A\u030F\u0204\u0311\u0206\u0323\u1EB8\u0327\u0228\u0328"d~ +"\u0118\u032D\u1E18\u0330\u1E1A\u0307\u1E1E\u0301\u01F4\u0302\u011C\u0304\u1E20\u0306\u011E\u0307\u0120\u030C\u01E6"d~ +"\u0327\u0122\u0302\u0124\u0307\u1E22\u0308\u1E26\u030C\u021E\u0323\u1E24\u0327\u1E28\u032E\u1E2A\u0300\u00CC\u0301"d~ +"\u00CD\u0302\u00CE\u0303\u0128\u0304\u012A\u0306\u012C\u0307\u0130\u0308\u00CF\u0309\u1EC8\u030C\u01CF\u030F\u0208"d~ +"\u0311\u020A\u0323\u1ECA\u0328\u012E\u0330\u1E2C\u0302\u0134\u0301\u1E30\u030C\u01E8\u0323\u1E32\u0327\u0136\u0331"d~ +"\u1E34\u0301\u0139\u030C\u013D\u0323\u1E36\u0327\u013B\u032D\u1E3C\u0331\u1E3A\u0301\u1E3E\u0307\u1E40\u0323\u1E42"d~ +"\u0300\u01F8\u0301\u0143\u0303\u00D1\u0307\u1E44\u030C\u0147\u0323\u1E46\u0327\u0145\u032D\u1E4A\u0331\u1E48\u0300"d~ +"\u00D2\u0301\u00D3\u0302\u00D4\u0303\u00D5\u0304\u014C\u0306\u014E\u0307\u022E\u0308\u00D6\u0309\u1ECE\u030B\u0150"d~ +"\u030C\u01D1\u030F\u020C\u0311\u020E\u031B\u01A0\u0323\u1ECC\u0328\u01EA\u0301\u1E54\u0307\u1E56\u0301\u0154\u0307"d~ +"\u1E58\u030C\u0158\u030F\u0210\u0311\u0212\u0323\u1E5A\u0327\u0156\u0331\u1E5E\u0301\u015A\u0302\u015C\u0307\u1E60"d~ +"\u030C\u0160\u0323\u1E62\u0326\u0218\u0327\u015E\u0307\u1E6A\u030C\u0164\u0323\u1E6C\u0326\u021A\u0327\u0162\u032D"d~ +"\u1E70\u0331\u1E6E\u0300\u00D9\u0301\u00DA\u0302\u00DB\u0303\u0168\u0304\u016A\u0306\u016C\u0308\u00DC\u0309\u1EE6"d~ +"\u030A\u016E\u030B\u0170\u030C\u01D3\u030F\u0214\u0311\u0216\u031B\u01AF\u0323\u1EE4\u0324\u1E72\u0328\u0172\u032D"d~ +"\u1E76\u0330\u1E74\u0303\u1E7C\u0323\u1E7E\u0300\u1E80\u0301\u1E82\u0302\u0174\u0307\u1E86\u0308\u1E84\u0323\u1E88"d~ +"\u0307\u1E8A\u0308\u1E8C\u0300\u1EF2\u0301\u00DD\u0302\u0176\u0303\u1EF8\u0304\u0232\u0307\u1E8E\u0308\u0178\u0309"d~ +"\u1EF6\u0323\u1EF4\u0301\u0179\u0302\u1E90\u0307\u017B\u030C\u017D\u0323\u1E92\u0331\u1E94\u0300\u00E0\u0301\u00E1"d~ +"\u0302\u00E2\u0303\u00E3\u0304\u0101\u0306\u0103\u0307\u0227\u0308\u00E4\u0309\u1EA3\u030A\u00E5\u030C\u01CE\u030F"d~ +"\u0201\u0311\u0203\u0323\u1EA1\u0325\u1E01\u0328\u0105\u0307\u1E03\u0323\u1E05\u0331\u1E07\u0301\u0107\u0302\u0109"d~ +"\u0307\u010B\u030C\u010D\u0327\u00E7\u0307\u1E0B\u030C\u010F\u0323\u1E0D\u0327\u1E11\u032D\u1E13\u0331\u1E0F\u0300"d~ +"\u00E8\u0301\u00E9\u0302\u00EA\u0303\u1EBD\u0304\u0113\u0306\u0115\u0307\u0117\u0308\u00EB\u0309\u1EBB\u030C\u011B"d~ +"\u030F\u0205\u0311\u0207\u0323\u1EB9\u0327\u0229\u0328\u0119\u032D\u1E19\u0330\u1E1B\u0307\u1E1F\u0301\u01F5\u0302"d~ +"\u011D\u0304\u1E21\u0306\u011F\u0307\u0121\u030C\u01E7\u0327\u0123\u0302\u0125\u0307\u1E23\u0308\u1E27\u030C\u021F"d~ +"\u0323\u1E25\u0327\u1E29\u032E\u1E2B\u0331\u1E96\u0300\u00EC\u0301\u00ED\u0302\u00EE\u0303\u0129\u0304\u012B\u0306"d~ +"\u012D\u0308\u00EF\u0309\u1EC9\u030C\u01D0\u030F\u0209\u0311\u020B\u0323\u1ECB\u0328\u012F\u0330\u1E2D\u0302\u0135"d~ +"\u030C\u01F0\u0301\u1E31\u030C\u01E9\u0323\u1E33\u0327\u0137\u0331\u1E35\u0301\u013A\u030C\u013E\u0323\u1E37\u0327"d~ +"\u013C\u032D\u1E3D\u0331\u1E3B\u0301\u1E3F\u0307\u1E41\u0323\u1E43\u0300\u01F9\u0301\u0144\u0303\u00F1\u0307\u1E45"d~ +"\u030C\u0148\u0323\u1E47\u0327\u0146\u032D\u1E4B\u0331\u1E49\u0300\u00F2\u0301\u00F3\u0302\u00F4\u0303\u00F5\u0304"d~ +"\u014D\u0306\u014F\u0307\u022F\u0308\u00F6\u0309\u1ECF\u030B\u0151\u030C\u01D2\u030F\u020D\u0311\u020F\u031B\u01A1"d~ +"\u0323\u1ECD\u0328\u01EB\u0301\u1E55\u0307\u1E57\u0301\u0155\u0307\u1E59\u030C\u0159\u030F\u0211\u0311\u0213\u0323"d~ +"\u1E5B\u0327\u0157\u0331\u1E5F\u0301\u015B\u0302\u015D\u0307\u1E61\u030C\u0161\u0323\u1E63\u0326\u0219\u0327\u015F"d~ +"\u0307\u1E6B\u0308\u1E97\u030C\u0165\u0323\u1E6D\u0326\u021B\u0327\u0163\u032D\u1E71\u0331\u1E6F\u0300\u00F9\u0301"d~ +"\u00FA\u0302\u00FB\u0303\u0169\u0304\u016B\u0306\u016D\u0308\u00FC\u0309\u1EE7\u030A\u016F\u030B\u0171\u030C\u01D4"d~ +"\u030F\u0215\u0311\u0217\u031B\u01B0\u0323\u1EE5\u0324\u1E73\u0328\u0173\u032D\u1E77\u0330\u1E75\u0303\u1E7D\u0323"d~ +"\u1E7F\u0300\u1E81\u0301\u1E83\u0302\u0175\u0307\u1E87\u0308\u1E85\u030A\u1E98\u0323\u1E89\u0307\u1E8B\u0308\u1E8D"d~ +"\u0300\u1EF3\u0301\u00FD\u0302\u0177\u0303\u1EF9\u0304\u0233\u0307\u1E8F\u0308\u00FF\u0309\u1EF7\u030A\u1E99\u0323"d~ +"\u1EF5\u0301\u017A\u0302\u1E91\u0307\u017C\u030C\u017E\u0323\u1E93\u0331\u1E95\u0300\u1FED\u0301\u0385\u0342\u1FC1"d~ +"\u0300\u1EA6\u0301\u1EA4\u0303\u1EAA\u0309\u1EA8\u0304\u01DE\u0301\u01FA\u0301\u01FC\u0304\u01E2\u0301\u1E08\u0300"d~ +"\u1EC0\u0301\u1EBE\u0303\u1EC4\u0309\u1EC2\u0301\u1E2E\u0300\u1ED2\u0301\u1ED0\u0303\u1ED6\u0309\u1ED4\u0301\u1E4C"d~ +"\u0304\u022C\u0308\u1E4E\u0304\u022A\u0301\u01FE\u0300\u01DB\u0301\u01D7\u0304\u01D5\u030C\u01D9\u0300\u1EA7\u0301"d~ +"\u1EA5\u0303\u1EAB\u0309\u1EA9\u0304\u01DF\u0301\u01FB\u0301\u01FD\u0304\u01E3\u0301\u1E09\u0300\u1EC1\u0301\u1EBF"d~ +"\u0303\u1EC5\u0309\u1EC3\u0301\u1E2F\u0300\u1ED3\u0301\u1ED1\u0303\u1ED7\u0309\u1ED5\u0301\u1E4D\u0304\u022D\u0308"d~ +"\u1E4F\u0304\u022B\u0301\u01FF\u0300\u01DC\u0301\u01D8\u0304\u01D6\u030C\u01DA\u0300\u1EB0\u0301\u1EAE\u0303\u1EB4"d~ +"\u0309\u1EB2\u0300\u1EB1\u0301\u1EAF\u0303\u1EB5\u0309\u1EB3\u0300\u1E14\u0301\u1E16\u0300\u1E15\u0301\u1E17\u0300"d~ +"\u1E50\u0301\u1E52\u0300\u1E51\u0301\u1E53\u0307\u1E64\u0307\u1E65\u0307\u1E66\u0307\u1E67\u0301\u1E78\u0301\u1E79"d~ +"\u0308\u1E7A\u0308\u1E7B\u0307\u1E9B\u0300\u1EDC\u0301\u1EDA\u0303\u1EE0\u0309\u1EDE\u0323\u1EE2\u0300\u1EDD\u0301"d~ +"\u1EDB\u0303\u1EE1\u0309\u1EDF\u0323\u1EE3\u0300\u1EEA\u0301\u1EE8\u0303\u1EEE\u0309\u1EEC\u0323\u1EF0\u0300\u1EEB"d~ +"\u0301\u1EE9\u0303\u1EEF\u0309\u1EED\u0323\u1EF1\u030C\u01EE\u0304\u01EC\u0304\u01ED\u0304\u01E0\u0304\u01E1\u0306"d~ +"\u1E1C\u0306\u1E1D\u0304\u0230\u0304\u0231\u030C\u01EF\u0300\u1FBA\u0301\u0386\u0304\u1FB9\u0306\u1FB8\u0313\u1F08"d~ +"\u0314\u1F09\u0345\u1FBC\u0300\u1FC8\u0301\u0388\u0313\u1F18\u0314\u1F19\u0300\u1FCA\u0301\u0389\u0313\u1F28\u0314"d~ +"\u1F29\u0345\u1FCC\u0300\u1FDA\u0301\u038A\u0304\u1FD9\u0306\u1FD8\u0308\u03AA\u0313\u1F38\u0314\u1F39\u0300\u1FF8"d~ +"\u0301\u038C\u0313\u1F48\u0314\u1F49\u0314\u1FEC\u0300\u1FEA\u0301\u038E\u0304\u1FE9\u0306\u1FE8\u0308\u03AB\u0314"d~ +"\u1F59\u0300\u1FFA\u0301\u038F\u0313\u1F68\u0314\u1F69\u0345\u1FFC\u0345\u1FB4\u0345\u1FC4\u0300\u1F70\u0301\u03AC"d~ +"\u0304\u1FB1\u0306\u1FB0\u0313\u1F00\u0314\u1F01\u0342\u1FB6\u0345\u1FB3\u0300\u1F72\u0301\u03AD\u0313\u1F10\u0314"d~ +"\u1F11\u0300\u1F74\u0301\u03AE\u0313\u1F20\u0314\u1F21\u0342\u1FC6\u0345\u1FC3\u0300\u1F76\u0301\u03AF\u0304\u1FD1"d~ +"\u0306\u1FD0\u0308\u03CA\u0313\u1F30\u0314\u1F31\u0342\u1FD6\u0300\u1F78\u0301\u03CC\u0313\u1F40\u0314\u1F41\u0313"d~ +"\u1FE4\u0314\u1FE5\u0300\u1F7A\u0301\u03CD\u0304\u1FE1\u0306\u1FE0\u0308\u03CB\u0313\u1F50\u0314\u1F51\u0342\u1FE6"d~ +"\u0300\u1F7C\u0301\u03CE\u0313\u1F60\u0314\u1F61\u0342\u1FF6\u0345\u1FF3\u0300\u1FD2\u0301\u0390\u0342\u1FD7\u0300"d~ +"\u1FE2\u0301\u03B0\u0342\u1FE7\u0345\u1FF4\u0301\u03D3\u0308\u03D4\u0308\u0407\u0306\u04D0\u0308\u04D2\u0301\u0403"d~ +"\u0300\u0400\u0306\u04D6\u0308\u0401\u0306\u04C1\u0308\u04DC\u0308\u04DE\u0300\u040D\u0304\u04E2\u0306\u0419\u0308"d~ +"\u04E4\u0301\u040C\u0308\u04E6\u0304\u04EE\u0306\u040E\u0308\u04F0\u030B\u04F2\u0308\u04F4\u0308\u04F8\u0308\u04EC"d~ +"\u0306\u04D1\u0308\u04D3\u0301\u0453\u0300\u0450\u0306\u04D7\u0308\u0451\u0306\u04C2\u0308\u04DD\u0308\u04DF\u0300"d~ +"\u045D\u0304\u04E3\u0306\u0439\u0308\u04E5\u0301\u045C\u0308\u04E7\u0304\u04EF\u0306\u045E\u0308\u04F1\u030B\u04F3"d~ +"\u0308\u04F5\u0308\u04F9\u0308\u04ED\u0308\u0457\u030F\u0476\u030F\u0477\u0308\u04DA\u0308\u04DB\u0308\u04EA\u0308"d~ +"\u04EB\u0653\u0622\u0654\u0623\u0655\u0625\u0654\u0624\u0654\u0626\u0654\u06C2\u0654\u06D3\u0654\u06C0\u093C\u0929"d~ +"\u093C\u0931\u093C\u0934\u09BE\u09CB\u09D7\u09CC\u0B3E\u0B4B\u0B56\u0B48\u0B57\u0B4C\u0BD7\u0B94\u0BBE\u0BCA\u0BD7"d~ +"\u0BCC\u0BBE\u0BCB\u0C56\u0C48\u0CD5\u0CC0\u0CC2\u0CCA\u0CD5\u0CC7\u0CD6\u0CC8\u0CD5\u0CCB\u0D3E\u0D4A\u0D57\u0D4C"d~ +"\u0D3E\u0D4B\u0DCA\u0DDA\u0DCF\u0DDC\u0DDF\u0DDE\u0DCA\u0DDD\u102E\u1026\u1B35\u1B06\u1B35\u1B08\u1B35\u1B0A\u1B35"d~ +"\u1B0C\u1B35\u1B0E\u1B35\u1B12\u1B35\u1B3B\u1B35\u1B3D\u1B35\u1B40\u1B35\u1B41\u1B35\u1B43\u0304\u1E38\u0304\u1E39"d~ +"\u0304\u1E5C\u0304\u1E5D\u0307\u1E68\u0307\u1E69\u0302\u1EAC\u0306\u1EB6\u0302\u1EAD\u0306\u1EB7\u0302\u1EC6\u0302"d~ +"\u1EC7\u0302\u1ED8\u0302\u1ED9\u0300\u1F02\u0301\u1F04\u0342\u1F06\u0345\u1F80\u0300\u1F03\u0301\u1F05\u0342\u1F07"d~ +"\u0345\u1F81\u0345\u1F82\u0345\u1F83\u0345\u1F84\u0345\u1F85\u0345\u1F86\u0345\u1F87\u0300\u1F0A\u0301\u1F0C\u0342"d~ +"\u1F0E\u0345\u1F88\u0300\u1F0B\u0301\u1F0D\u0342\u1F0F\u0345\u1F89\u0345\u1F8A\u0345\u1F8B\u0345\u1F8C\u0345\u1F8D"d~ +"\u0345\u1F8E\u0345\u1F8F\u0300\u1F12\u0301\u1F14\u0300\u1F13\u0301\u1F15\u0300\u1F1A\u0301\u1F1C\u0300\u1F1B\u0301"d~ +"\u1F1D\u0300\u1F22\u0301\u1F24\u0342\u1F26\u0345\u1F90\u0300\u1F23\u0301\u1F25\u0342\u1F27\u0345\u1F91\u0345\u1F92"d~ +"\u0345\u1F93\u0345\u1F94\u0345\u1F95\u0345\u1F96\u0345\u1F97\u0300\u1F2A\u0301\u1F2C\u0342\u1F2E\u0345\u1F98\u0300"d~ +"\u1F2B\u0301\u1F2D\u0342\u1F2F\u0345\u1F99\u0345\u1F9A\u0345\u1F9B\u0345\u1F9C\u0345\u1F9D\u0345\u1F9E\u0345\u1F9F"d~ +"\u0300\u1F32\u0301\u1F34\u0342\u1F36\u0300\u1F33\u0301\u1F35\u0342\u1F37\u0300\u1F3A\u0301\u1F3C\u0342\u1F3E\u0300"d~ +"\u1F3B\u0301\u1F3D\u0342\u1F3F\u0300\u1F42\u0301\u1F44\u0300\u1F43\u0301\u1F45\u0300\u1F4A\u0301\u1F4C\u0300\u1F4B"d~ +"\u0301\u1F4D\u0300\u1F52\u0301\u1F54\u0342\u1F56\u0300\u1F53\u0301\u1F55\u0342\u1F57\u0300\u1F5B\u0301\u1F5D\u0342"d~ +"\u1F5F\u0300\u1F62\u0301\u1F64\u0342\u1F66\u0345\u1FA0\u0300\u1F63\u0301\u1F65\u0342\u1F67\u0345\u1FA1\u0345\u1FA2"d~ +"\u0345\u1FA3\u0345\u1FA4\u0345\u1FA5\u0345\u1FA6\u0345\u1FA7\u0300\u1F6A\u0301\u1F6C\u0342\u1F6E\u0345\u1FA8\u0300"d~ +"\u1F6B\u0301\u1F6D\u0342\u1F6F\u0345\u1FA9\u0345\u1FAA\u0345\u1FAB\u0345\u1FAC\u0345\u1FAD\u0345\u1FAE\u0345\u1FAF"d~ +"\u0345\u1FB2\u0345\u1FC2\u0345\u1FF2\u0345\u1FB7\u0300\u1FCD\u0301\u1FCE\u0342\u1FCF\u0345\u1FC7\u0345\u1FF7\u0300"d~ +"\u1FDD\u0301\u1FDE\u0342\u1FDF\u0338\u219A\u0338\u219B\u0338\u21AE\u0338\u21CD\u0338\u21CF\u0338\u21CE\u0338\u2204"d~ +"\u0338\u2209\u0338\u220C\u0338\u2224\u0338\u2226\u0338\u2241\u0338\u2244\u0338\u2247\u0338\u2249\u0338\u226D\u0338"d~ +"\u2262\u0338\u2270\u0338\u2271\u0338\u2274\u0338\u2275\u0338\u2278\u0338\u2279\u0338\u2280\u0338\u2281\u0338\u22E0"d~ +"\u0338\u22E1\u0338\u2284\u0338\u2285\u0338\u2288\u0338\u2289\u0338\u22E2\u0338\u22E3\u0338\u22AC\u0338\u22AD\u0338"d~ +"\u22AE\u0338\u22AF\u0338\u22EA\u0338\u22EB\u0338\u22EC\u0338\u22ED\u3099\u3094\u3099\u304C\u3099\u304E\u3099\u3050"d~ +"\u3099\u3052\u3099\u3054\u3099\u3056\u3099\u3058\u3099\u305A\u3099\u305C\u3099\u305E\u3099\u3060\u3099\u3062\u3099"d~ +"\u3065\u3099\u3067\u3099\u3069\u3099\u3070\u309A\u3071\u3099\u3073\u309A\u3074\u3099\u3076\u309A\u3077\u3099\u3079"d~ +"\u309A\u307A\u3099\u307C\u309A\u307D\u3099\u309E\u3099\u30F4\u3099\u30AC\u3099\u30AE\u3099\u30B0\u3099\u30B2\u3099"d~ +"\u30B4\u3099\u30B6\u3099\u30B8\u3099\u30BA\u3099\u30BC\u3099\u30BE\u3099\u30C0\u3099\u30C2\u3099\u30C5\u3099\u30C7"d~ +"\u3099\u30C9\u3099\u30D0\u309A\u30D1\u3099\u30D3\u309A\u30D4\u3099\u30D6\u309A\u30D7\u3099\u30D9\u309A\u30DA\u3099"d~ +"\u30DC\u309A\u30DD\u3099\u30F7\u3099\u30F8\u3099\u30F9\u3099\u30FA\u3099\u30FE\u0307\U000105C9\u0307\U000105E4"d~ +"\U000110BA\U0001109A\U000110BA\U0001109C\U000110BA\U000110AB\U00011127\U0001112E\U00011127\U0001112F\U0001133E"d~ +"\U0001134B\U00011357\U0001134C\U000113C9\U00011383\U000113BB\U00011385\U000113C2\U0001138E\U000113C9\U00011391"d~ +"\U000113B8\U000113C7\U000113C2\U000113C5\U000113C9\U000113C8\U000114B0\U000114BC\U000114BA\U000114BB\U000114BD"d~ +"\U000114BE\U000115AF\U000115BA\U000115AF\U000115BB\U00011930\U00011938\U0001611E\U00016121\U0001611F\U00016123"d~ +"\U00016120\U00016125\U00016129\U00016122\U0001611F\U00016126\U00016120\U00016128\U0001611F\U00016127\U0001611F"d~ +"\U00016124\U00016D67\U00016D69\U00016D67\U00016D68\U00016D67\U00016D6A"d; +return t[]; } } diff --git a/std/internal/unicode_decomp.d b/std/internal/unicode_decomp.d index 66bb35217c0..76fe10cd42a 100644 --- a/std/internal/unicode_decomp.d +++ b/std/internal/unicode_decomp.d @@ -18,15 +18,1665 @@ import std.internal.unicode_tables; static if (size_t.sizeof == 4) { -//23488 bytes -enum compatMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)([ 0x0, 0x40, 0x540], [ 0x100, 0xa00, 0x2360], [ 0x2020100, 0x4020302, 0x2020205, 0x7060202, 0x2020202, 0x8020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x80000, 0xa0009, 0xc000b, 0x0, 0xd0000, 0xf000e, 0x0, 0x110010, 0x130012, 0x150014, 0x170016, 0x190018, 0x0, 0x1b001a, 0x0, 0x0, 0x1c, 0x0, 0x1d0000, 0x1e0000, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x200000, 0x21, 0x0, 0x22, 0x230000, 0x24, 0x0, 0x0, 0x0, 0x25, 0x26, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2a, 0x0, 0x2b, 0x2c0000, 0x0, 0x2d0000, 0x2e, 0x2f, 0x310030, 0x330032, 0x0, 0x340000, 0x0, 0x0, 0x350000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x370036, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x3b003a, 0x3d003c, 0x0, 0x3f003e, 0x410040, 0x430042, 0x450044, 0x470046, 0x490048, 0x4b004a, 0x4d004c, 0x4f004e, 0x510050, 0x530052, 0x0, 0x550054, 0x570056, 0x590058, 0x5a, 0x5c005b, 0x5e005d, 0x60005f, 0x610000, 0x620000, 0x0, 0x0, 0x0, 0x0, 0x630000, 0x650064, 0x670066, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x690000, 0x0, 0x6a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b0000, 0x0, 0x0, 0x0, 0x6c0000, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x6e0000, 0x70006f, 0x720071, 0x740073, 0x75, 0x770076, 0x790078, 0x7b007a, 0x7d007c, 0x7e0000, 0x80007f, 0x81, 0x0, 0x830082, 0x850084, 0x870086, 0x890088, 0x8b008a, 0x8d008c, 0x8f008e, 0x910090, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92, 0x0, 0x0, 0x930000, 0x0, 0x940000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x960095, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x980097, 0x9a0099, 0x9c009b, 0x9e009d, 0xa0009f, 0xa200a1, 0xa400a3, 0xa5, 0xa700a6, 0xa900a8, 0xab00aa, 0xad00ac, 0xaf00ae, 0xb100b0, 0xb300b2, 0xb500b4, 0xb700b6, 0xb900b8, 0xbb00ba, 0xbd00bc, 0xbf00be, 0xc100c0, 0xc300c2, 0xc500c4, 0xc700c6, 0xc900c8, 0xcb00ca, 0xcd00cc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf00ce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd100d0, 0x0, 0xd20000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd3, 0x0, 0x0, 0x0, 0x0, 0xd40000, 0x0, 0x0, 0x0, 0xd50000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd60000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd800d7, 0xd90000, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc00db, 0xde00dd, 0xe000df, 0xe200e1, 0xe400e3, 0xe600e5, 0xdb00e7, 0xe800dc, 0xe900de, 0xeb00ea, 0xec00e2, 0xee00ed, 0xf000ef, 0xf200f1, 0xf400f3, 0xf600f5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf70000, 0xf900f8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfb00fa, 0xfd00fc, 0xff00fe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1010100, 0x1030102, 0x104, 0x0, 0x1060105, 0x107, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1080000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10a0109, 0x10c010b, 0x10e010d, 0x110010f, 0x1120111, 0x1140113, 0x1160115, 0x1180117, 0x119, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x15, 0x692, 0x0, 0x90000, 0x0, 0x30f0343, 0x120f0003, 0x0, 0x3140048, 0x78a, 0x3c603ce, 0x494, 0x570056d, 0x5860573, 0x5b005a6, 0x5f80000, 0x62e062b, 0x6580631, 0x6e706e4, 0x6f906ea, 0x7920000, 0x7ac07a9, 0x7c207af, 0x7e6, 0x8b40000, 0x8ba08b7, 0x96208ce, 0x0, 0x9af09ac, 0x9c509b2, 0x9ef09e5, 0xa4a0000, 0xa8c0a89, 0xab60a8f, 0xb490b46, 0xb580b4c, 0xc440000, 0xc610c5e, 0xc770c64, 0xc9b, 0xd6b0000, 0xd710d6e, 0xe0f0d85, 0xe1e0000, 0x9c80589, 0x9cb058c, 0xa0d05ce, 0xa3e05ec, 0xa4105ef, 0xa4405f2, 0xa4705f5, 0xa71061a, 0x0, 0xaa50647, 0xab00652, 0xab30655, 0xad30675, 0xabc065e, 0xafe069a, 0xb0406a0, 0xb0706a3, 0xb0d06a9, 0xb1906ba, 0x0, 0xb4f06ed, 0xb5206f0, 0xb5506f3, 0xb6e070f, 0x6f6, 0xb3a06d8, 0xb760717, 0xbb1072e, 0x7430000, 0x7500bcf, 0x7460bdc, 0x7400bd2, 0xbcc, 0x78f0000, 0x79e0c41, 0x7980c50, 0xf300c4a, 0x0, 0xc8607d1, 0xc9107dc, 0xca507f0, 0x0, 0xd0a0845, 0xd20085b, 0xd10084b, 0xd2e086f, 0xd350876, 0xd4c088d, 0xd3b087c, 0xd6008a9, 0xd5708a0, 0x0, 0xd7408bd, 0xd7b08c4, 0xd8208cb, 0xd9b08e4, 0xd9e08e7, 0xdc70910, 0xdec0942, 0xe120965, 0x97c0971, 0x9820e2c, 0x60d0e32, 0x8430614, 0xcb107fc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f30000, 0xdaa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x613060c, 0x7360a6a, 0xbbc073d, 0x7860783, 0x5b70c35, 0x70309f6, 0x7f30b62, 0x8ea0ca8, 0x8d90da1, 0x8d50d90, 0x8dd0d8c, 0x8d10d94, 0xd88, 0x9e805a9, 0x9e105a2, 0xe680e5d, 0x0, 0xb0a06a6, 0xbab0728, 0xccf081a, 0xcd2081d, 0xf070e82, 0x6090b79, 0xa670610, 0xafb0697, 0x0, 0xc3e078c, 0x9f205b3, 0xe650e5a, 0xe6f0e60, 0x9f905ba, 0x9fc05bd, 0xabf0661, 0xac20664, 0xb650706, 0xb680709, 0xcab07f6, 0xcae07f9, 0xd13084e, 0xd160851, 0xda408ed, 0xda708f0, 0xd49088a, 0xd5d08a6, 0x0, 0xb2206c3, 0x0, 0x0, 0x0, 0x9de059f, 0xacc066e, 0xc9e07e9, 0xc7e07c9, 0xc9407df, 0xc9707e2, 0xe18096b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeb70b10, 0xa14073e, 0xee10edd, 0xde40ee9, 0x695, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12000f, 0x4b0024, 0x270006, 0x0, 0xa2b0eb1, 0xb440843, 0xf0a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4001a, 0x2b0000, 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2e, 0x0, 0x0, 0x54, 0x0, 0x546, 0x0, 0x0, 0x1c0003, 0x7410f45, 0xfc00fa0, 0x1011, 0x104a, 0x10991073, 0x11e2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x107c101a, 0x115210ec, 0x11d21176, 0x1270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x126911db, 0x12601232, 0x12a8, 0x11cb1147, 0x1073106e, 0x1299107c, 0x124b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x124d120b, 0x1255, 0x114d100a, 0x0, 0x106a0000, 0x0, 0x0, 0x0, 0x1313130d, 0x130a0000, 0x0, 0x13010000, 0x0, 0x0, 0x131f132b, 0x1334, 0x0, 0x0, 0x0, 0x0, 0x13250000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13790000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1361135b, 0x13540000, 0x0, 0x13c60000, 0x0, 0x0, 0x13731381, 0x139c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13d013cd, 0x0, 0x0, 0x0, 0x0, 0x13160000, 0x1366, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13481304, 0x134b1307, 0x0, 0x135e1310, 0x0, 0x13e213dd, 0x13691319, 0x136e131c, 0x0, 0x13761322, 0x137c1328, 0x138c132e, 0x0, 0x13ea13e5, 0x13bd1343, 0x13991331, 0x139f1337, 0x13a2133a, 0x13ad133d, 0x0, 0x13b61340, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13ed0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14941491, 0x1497183a, 0x1875, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x149a0000, 0x1906183d, 0x18bc, 0x0, 0x0, 0x0, 0x1918, 0x18fd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19150000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x192d0000, 0x0, 0x0, 0x0, 0x19360000, 0x0, 0x1939, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x191e191b, 0x19241921, 0x192a1927, 0x19331930, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19450000, 0x1948, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x193f193c, 0x19420000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19570000, 0x0, 0x195a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x194b0000, 0x1951194e, 0x0, 0x1954, 0x0, 0x0, 0x0, 0x0, 0x1966, 0x19630000, 0x1969, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1960195d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x196c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1975196f, 0x1972, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1978, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x197b, 0x0, 0x0, 0x19850000, 0x1988, 0x1981197e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1991198b, 0x198e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1994, 0x199a1997, 0x199e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19a10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19aa0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19a719a4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ad, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19b20000, 0x0, 0x0, 0x0, 0x0, 0x19b50000, 0x0, 0x0, 0x19b8, 0x0, 0x19bb0000, 0x0, 0x0, 0x19be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19af0000, 0x0, 0x0, 0x0, 0x0, 0x19c10000, 0x19c40000, 0x19dc19e0, 0x19e319e7, 0x0, 0x0, 0x0, 0x19c70000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19cd0000, 0x0, 0x0, 0x0, 0x0, 0x19d00000, 0x0, 0x0, 0x19d3, 0x0, 0x19d60000, 0x0, 0x0, 0x19d9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ca0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ea, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ed, 0x0, 0x0, 0x0, 0x0, 0x1ae3, 0x1ae6, 0x1ae9, 0x1aec, 0x1aef, 0x0, 0x1af2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1af50000, 0x1af80000, 0x0, 0x1afe1afb, 0x1b010000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe580568, 0x5d5, 0x62905e6, 0x6870e7c, 0x6cf06ac, 0x71a0607, 0x7230734, 0x781, 0xe8b07a7, 0x76d06af, 0x56b0890, 0x6920773, 0xe910e8f, 0x93a1b04, 0xa800a31, 0xea30ea1, 0x6020ea5, 0xb7c0000, 0xe7805d3, 0xe97078a, 0x1b081b06, 0xba60cd6, 0x1b0c0a27, 0x86d0ec9, 0x11471b0e, 0x114b1149, 0x129b1299, 0xa140ae3, 0x86d0a27, 0x11491147, 0x1299124d, 0x129b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1388, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe930000, 0xe9909a3, 0xea50e6b, 0xea90adc, 0xeb50ead, 0xebd0ebb, 0x1b100ebf, 0xec50f14, 0xf161b12, 0xecb0ecd, 0xed10ecf, 0xed50ed3, 0xeeb0edb, 0xe800eed, 0xef50ef3, 0xef71b0a, 0x6110ef9, 0xf030f01, 0x11cb0f05, 0xa0a05cb, 0xa1605da, 0xa1905dd, 0xa1c05e0, 0xa4d05fb, 0xa6e0617, 0xa74061d, 0xa7d0626, 0xa770620, 0xa7a0623, 0xaa8064a, 0xaac064e, 0xad60678, 0xad9067b, 0xacf0671, 0xaf20684, 0xb01069d, 0xb1c06bd, 0xb2506c6, 0xb1f06c0, 0xb2806c9, 0xb2b06cc, 0xb710712, 0xb5b06fc, 0xba80725, 0xbae072b, 0xbb40731, 0xbd50749, 0xbd8074c, 0xbe20756, 0xbdf0753, 0xc150775, 0xc180778, 0xc1b077b, 0xc470795, 0xc4d079b, 0xc5607a4, 0xc5307a1, 0xc7a07c5, 0xc8207cd, 0xc8907d4, 0xc8d07d8, 0xcef0838, 0xcf2083b, 0xd0d0848, 0xd190854, 0xd1c0857, 0xd23085e, 0xd380879, 0xd420883, 0xd310872, 0xd3e087f, 0xd450886, 0xd51089d, 0xd5a08a3, 0xd6608af, 0xd6308ac, 0xdc4090d, 0xdcd0916, 0xdca0913, 0xd7708c0, 0xd7e08c7, 0xdde0927, 0xde1092a, 0xde6093c, 0xde9093f, 0xdf20948, 0xdef0945, 0xdf8094b, 0xe040957, 0xe07095a, 0xe1b096e, 0xe2f097f, 0xe380988, 0xe3b098b, 0xd540b2e, 0xe240df5, 0xd3809a9, 0x0, 0x0, 0x9ff05c0, 0x9ec05ad, 0x9b9057a, 0x9b50576, 0x9c10582, 0x9bd057e, 0xa0205c3, 0x9d20593, 0x9ce058f, 0x9da059b, 0x9d60597, 0xa0605c7, 0xac50667, 0xab9065b, 0xaa20644, 0xa960638, 0xa920634, 0xa9e0640, 0xa9a063c, 0xac8066a, 0xb5f0700, 0xb6b070c, 0xcc80813, 0xca207ed, 0xc6b07b6, 0xc6707b2, 0xc7307be, 0xc6f07ba, 0xccb0816, 0xcb80803, 0xcb407ff, 0xcc0080b, 0xcbc0807, 0xcc4080f, 0xdc1090a, 0xd9808e1, 0xdb108fa, 0xdad08f6, 0xdb90902, 0xdb508fe, 0xdbd0906, 0xe0c095f, 0xe270977, 0xe210974, 0xe150968, 0x0, 0x0, 0x0, 0x111b10f9, 0x111e10fc, 0x11271105, 0x1130110e, 0xf700f4e, 0xf730f51, 0xf7c0f5a, 0xf850f63, 0x11601155, 0x11631158, 0x1167115c, 0x0, 0xfae0fa3, 0xfb10fa6, 0xfb50faa, 0x0, 0x119f117d, 0x11a21180, 0x11ab1189, 0x11b41192, 0xfe50fc3, 0xfe80fc6, 0xff10fcf, 0xffa0fd8, 0x11f911ea, 0x11fc11ed, 0x120011f1, 0x120411f5, 0x102c101d, 0x102f1020, 0x10331024, 0x10371028, 0x12401235, 0x12431238, 0x1247123c, 0x0, 0x1058104d, 0x105b1050, 0x105f1054, 0x0, 0x12871278, 0x128a127b, 0x128e127f, 0x12921283, 0x107f0000, 0x10820000, 0x10860000, 0x108a0000, 0x12d112af, 0x12d412b2, 0x12dd12bb, 0x12e612c4, 0x10be109c, 0x10c1109f, 0x10ca10a8, 0x10d310b1, 0x10ec10e5, 0x1152114f, 0x1176116f, 0x11d211cf, 0x1232122f, 0x1260125d, 0x12a812a1, 0x0, 0x11391117, 0x11221100, 0x112b1109, 0x11341112, 0xf8e0f6c, 0xf770f55, 0xf800f5e, 0xf890f67, 0x11bd119b, 0x11a61184, 0x11af118d, 0x11b81196, 0x10030fe1, 0xfec0fca, 0xff50fd3, 0xffe0fdc, 0x12ef12cd, 0x12d812b6, 0x12e112bf, 0x12ea12c8, 0x10dc10ba, 0x10c510a3, 0x10ce10ac, 0x10d710b5, 0x10f310f6, 0x114410e8, 0x10ef, 0x1140113d, 0xf480f4b, 0xf450f42, 0x2a0f92, 0x2a11cd, 0x200051, 0x11c81172, 0x1179, 0x11c411c1, 0xfa00f9d, 0xfc00fbd, 0x2d1007, 0x350031, 0x11d511d8, 0x11e211de, 0x0, 0x11e61208, 0x10141017, 0x1011100e, 0x3c0000, 0x440040, 0x12631266, 0x1270126c, 0x1252124f, 0x12741296, 0x10761079, 0x10731070, 0x181067, 0x998001c, 0x0, 0x12fa12a4, 0x12ab, 0x12f612f3, 0x104a1047, 0x10991096, 0x310e0, 0x39, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x1, 0x0, 0x0, 0x1b160000, 0x0, 0x0, 0x4e0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2fc02fa, 0x2ff, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x1b1c0000, 0x1b1f, 0x1b2b1b28, 0x0, 0x0, 0x8f, 0xc, 0x0, 0x0, 0x0, 0x5630000, 0x920560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b230000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xae30305, 0x0, 0x3740365, 0x3920383, 0x3b003a1, 0x1b5a02f4, 0xa10544, 0xb3e00a5, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x1b5a02f4, 0xa10544, 0xa5, 0xa800692, 0xb44078a, 0xb100ea1, 0xa2b0b7c, 0xb3e05d3, 0x8430cd6, 0xba6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x842, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9a509a1, 0xe5005e3, 0xa210000, 0xe7e0a25, 0xe530000, 0x6ac0602, 0x6ac06ac, 0xe740b10, 0x6cf06cf, 0xa2b0734, 0x7810000, 0x789, 0x6af0000, 0x76d083e, 0x76d076d, 0x0, 0x8920866, 0x89a, 0x60a, 0x77f, 0x60a, 0x5b0071a, 0x5e305d5, 0xa800000, 0x67e0629, 0x7230000, 0x13ff078a, 0x1415140d, 0xae3141a, 0x6800000, 0x1149124b, 0x10630f97, 0x1b58, 0x0, 0x5e60000, 0xa800a31, 0x73e0ae3, 0x0, 0x0, 0x0, 0x3e203da, 0x3ca03c1, 0x3d20455, 0x4980459, 0x3d604cf, 0x3de04e7, 0x4eb049c, 0x3be0511, 0x6d106cf, 0x6de06d4, 0x91b06b2, 0x922091e, 0x68206e1, 0x9530950, 0x5e30734, 0x72305e6, 0xb330ae3, 0xb400b36, 0xdd2086d, 0xdd90dd5, 0xb440b43, 0xe000dfd, 0x9a30a2b, 0x5d30a31, 0x0, 0x0, 0x0, 0x0, 0x30d0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b3a1b33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b420000, 0x1b451b48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b4d, 0x0, 0x1b520000, 0x0, 0x1b55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b5c, 0x1b5f, 0x0, 0x0, 0x1b651b62, 0x1b6e0000, 0x1b71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b750000, 0x0, 0x1b78, 0x1b7b0000, 0x1b7e0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x556, 0x1b84, 0x0, 0x0, 0x0, 0x0, 0x1b810000, 0x55b054a, 0x1b8a1b87, 0x0, 0x1b901b8d, 0x0, 0x1b961b93, 0x0, 0x0, 0x0, 0x1b9c1b99, 0x0, 0x1ba81ba5, 0x0, 0x1bae1bab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bba1bb7, 0x1bc01bbd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ba21b9f, 0x1bb41bb1, 0x0, 0x0, 0x0, 0x1bc61bc3, 0x1bcc1bc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1be40000, 0x1be6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3430314, 0x365030f, 0x3830374, 0x3a10392, 0x31c03b0, 0x342032f, 0x3640355, 0x3820373, 0x3a00391, 0x3f703af, 0xd900a3, 0xe600e2, 0xee00ea, 0xf600f2, 0xa700fa, 0xb100ac, 0xbb00b6, 0xc500c0, 0xcf00ca, 0xdd00d4, 0x3460319, 0x3680359, 0x3860377, 0x3a40395, 0x31f03b3, 0x3450332, 0x3670358, 0x3850376, 0x3a30394, 0x3fa03b2, 0x16a0166, 0x172016e, 0x17a0176, 0x182017e, 0x18a0186, 0x192018e, 0x19a0196, 0x1a2019e, 0x1aa01a6, 0x1b201ae, 0x1ba01b6, 0x1c201be, 0x1ca01c6, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x305, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x54f0542, 0x552, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b2073e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bde0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x232e0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27640000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1faa1f98, 0x1fb81fb0, 0x1fc21fbc, 0x1fca1fc6, 0x1ffd1fd0, 0x20112009, 0x20212019, 0x20392029, 0x203d203b, 0x206b2057, 0x20772073, 0x207f2079, 0x208f208d, 0x209d209b, 0x20a920a1, 0x210120f7, 0x212b2121, 0x2131212f, 0x214a2139, 0x21662160, 0x217c2176, 0x2180217e, 0x218e218c, 0x21aa21a4, 0x21b221ae, 0x21c121ba, 0x21db21c5, 0x21e121dd, 0x21e721e3, 0x21f321eb, 0x223d2201, 0x22492247, 0x228b2289, 0x22972295, 0x229f229b, 0x32522a3, 0x32922c3, 0x231222d5, 0x23202318, 0x232c2326, 0x23322330, 0x23362334, 0x23942338, 0x23be23b8, 0x23c223c0, 0x23c823c4, 0x23d423ca, 0x23e623e2, 0x24082406, 0x240e240c, 0x24142412, 0x24282426, 0x24382436, 0x243c243a, 0x24582446, 0x245c245a, 0x248e246e, 0x24a02490, 0x24ac24a8, 0x24ce24bc, 0x24f424f0, 0x250424fe, 0x250c2508, 0x2510250e, 0x251e251c, 0x2530252c, 0x25362534, 0x2540253c, 0x25442542, 0x254a2548, 0x25a4259a, 0x25c025be, 0x25da25c4, 0x25e225de, 0x260425e6, 0x260a2606, 0x260e260c, 0x26262624, 0x2634262a, 0x26442636, 0x264a2648, 0x266c265c, 0x26782676, 0x2692267c, 0x269c2694, 0x26b426ae, 0x26c826bc, 0x26ce26cc, 0x26d226d0, 0x26da26d8, 0x26ec26de, 0x26f026ee, 0x26fe26fc, 0x270c2702, 0x2710270e, 0x27162714, 0x271a2718, 0x2724271c, 0x27322730, 0x273a2738, 0x273e273c, 0x27442742, 0x274c2746, 0x27542750, 0x275a2756, 0x275e275c, 0x27662762, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bf8, 0x2081207f, 0x2083, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c2d, 0x1c30, 0x1c33, 0x1c36, 0x1c39, 0x1c3c, 0x1c3f, 0x1c42, 0x1c45, 0x1c48, 0x1c4b, 0x1c4e, 0x1c510000, 0x1c540000, 0x1c570000, 0x0, 0x0, 0x0, 0x1c5d1c5a, 0x1c600000, 0x1c63, 0x1c691c66, 0x1c6c0000, 0x1c6f, 0x1c781c75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c2a, 0x0, 0x0, 0x870000, 0x8a, 0x1c7b1c82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1cd5, 0x1cf2, 0x1ca5, 0x1d41, 0x1d4a, 0x1d5e, 0x1d6e, 0x1d79, 0x1d7e, 0x1d8b, 0x1d90, 0x1d9a, 0x1da10000, 0x1da60000, 0x1cbf0000, 0x0, 0x0, 0x0, 0x1dd51dcc, 0x1dea0000, 0x1df1, 0x1e101e06, 0x1e250000, 0x1e2d, 0x1d591e50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1cb0, 0x1ef30000, 0x1f011efc, 0x1f06, 0x0, 0x1d501f0f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ef0000, 0x1abb19f4, 0x1abd19f6, 0x19fb1abf, 0x1a021a00, 0x1ac31ac1, 0x1ac71ac5, 0x1acb1ac9, 0x1a071a51, 0x1a111a0c, 0x1a131a5b, 0x1a1a1a18, 0x1a2c1a22, 0x1a391a2e, 0x1a431a3e, 0x19f21a48, 0x1a851a83, 0x1a891a87, 0x1a8d1a8b, 0x1a371a8f, 0x1a951a93, 0x1a991a97, 0x1a9d1a20, 0x1aa11a9f, 0x1aa51aa3, 0x1aa91a2a, 0x1a4d1a7f, 0x1acd1a4f, 0x1ad11acf, 0x1ad51ad3, 0x1ad91ad7, 0x1adb1a53, 0x1a551add, 0x1a591a57, 0x1a5f1a5d, 0x1a631a61, 0x1a671a65, 0x1a6b1a69, 0x1a6f1a6d, 0x1a731a71, 0x1a771a75, 0x1ae11adf, 0x1a7b1a79, 0x1aab1a7d, 0x1aaf1aad, 0x1ab31ab1, 0x1ab71ab5, 0x1ab9, 0x0, 0x1fc61f98, 0x20f91f9e, 0x1fac1fa0, 0x24161fa2, 0x1fa61fbc, 0x213e1f9a, 0x1fd02103, 0x1d701ce, 0x1e901e0, 0x1fb01f2, 0x20d0204, 0x2330225, 0x245023c, 0x257024e, 0x1db01d2, 0x1ed01e4, 0x1ff01f6, 0x2110208, 0x2370229, 0x2490240, 0x25b0252, 0x216022e, 0x21e, 0x2700260, 0x2a00268, 0x2880274, 0x2840264, 0x290026c, 0x2c402b0, 0x2b802c0, 0x2a402ec, 0x2bc02ac, 0x2d002b4, 0x2c80298, 0x2d402e4, 0x278028c, 0x2a8029c, 0x27c02cc, 0x29402e8, 0x28002d8, 0x2e002dc, 0x21c320d3, 0x24b02295, 0x0, 0x0, 0x0, 0x0, 0x4060831, 0x41c0411, 0x4320427, 0x4400439, 0x44e0447, 0x475046e, 0x47f047c, 0x4850482, 0x19f619ef, 0x1a0219fb, 0x1a0c1a07, 0x1a1a1a13, 0x1a2e1a22, 0x1a3e1a39, 0x1a481a43, 0x19f819f1, 0x1a0419fd, 0x1a0e1a09, 0x1a1c1a15, 0x1a301a24, 0x1a401a3b, 0x1a4a1a45, 0x1a271a33, 0x1a1f, 0x1fc61f98, 0x20f91f9e, 0x20131fc8, 0x20111f9c, 0x207f1fbe, 0x23940329, 0x22d52338, 0x2101267c, 0x22ed0325, 0x22f222cd, 0x23ce20b9, 0x247c2610, 0x2494205d, 0x214a241a, 0x1ffb2654, 0x23482091, 0x1fdd26e0, 0x213c2025, 0x1fac1fa0, 0x21ac1fa2, 0x207b20b3, 0x2164216a, 0x1fdb2442, 0x2089261a, 0x4882135, 0x48e048b, 0x4b10491, 0x4b704b4, 0x4bd04ba, 0x4c304c0, 0x4c904c6, 0x4e404cc, 0x34e033b, 0x4d604a3, 0x50304f2, 0x5290518, 0x327053a, 0x34d033a, 0xa8506b4, 0x7390a82, 0x1ca01c87, 0x1cb91cae, 0x1cd31cc9, 0x1d221cf0, 0x1d481d3f, 0x1d6c1d5c, 0x1d7c1ccd, 0x1d8e1d89, 0x1d9f1caa, 0x1c8d1da4, 0x1dbe1d55, 0x1d3d1dc0, 0x1dca1dbc, 0x1e041de8, 0x1e4e1e23, 0x1e8b1ce0, 0x1e9e1cd1, 0x1eb31eaf, 0x1ec81ec0, 0x1ce41eca, 0x1ee31c9c, 0x1ef11d0c, 0x1eff1efa, 0x1fd81f04, 0x1c8f1c89, 0x1c9a1c94, 0x1ca81ca2, 0x1cbb1cb3, 0x1ccb1cc2, 0x1ce21ccf, 0x1ceb1ce6, 0x1cdd1cd8, 0x1cfa1cf5, 0x1cff1d06, 0x1d0e1d0b, 0x1d1c1d15, 0x1d2c1d10, 0x1d3a1d33, 0x1d531d44, 0x1d611d57, 0x1d711d66, 0x1d851d81, 0x1da91d93, 0x1d301db2, 0x1dc61dbb, 0x1dd81de4, 0x1dcf1ddf, 0x1dfb1df4, 0x1ded1e00, 0x1e1a1e13, 0x1e1f1e09, 0x1e301e44, 0x1e4a1e34, 0x1e3e1e39, 0x1e5b1e28, 0x1e671e53, 0x1e6a1e61, 0x1e741e6e, 0x1e7d1e79, 0x1e851e81, 0x1e921e8d, 0x1ea01e95, 0x1d171ea4, 0x1eba1eb5, 0x1ece1ec2, 0x1ed81ed3, 0x1ee51edd, 0x1d1e1ee8, 0x33f0311, 0x3610352, 0x37f0370, 0x39d038e, 0x3bb03ac, 0x33e032b, 0x3600351, 0x37e036f, 0x39c038d, 0x3ba03ab, 0x40d0402, 0x4230418, 0xb12042e, 0x56a0a56, 0xc5b0a12, 0xa5c0ce9, 0xa630a5f, 0x21bc06db, 0x213b22b2, 0x22ef22ab, 0xc290cdd, 0xbed1211, 0x71c0b7e, 0x689075b, 0xb8f0a29, 0xc2c0ce0, 0x121d1214, 0x6010bf9, 0xb81068d, 0x68c0764, 0x12200896, 0xa590c00, 0xaef0b97, 0x12230c38, 0xa330c03, 0xc060b9a, 0xa370a36, 0xc0a0b9d, 0xa3b0a3a, 0xc1e0ba1, 0x6910c22, 0x7680b85, 0xcf90690, 0xd030cfd, 0xc3b0cec, 0xc121226, 0xc2f0ce3, 0xbf01217, 0x76f0b89, 0xc320ce6, 0xbf3121a, 0x7720b8c, 0x77e0bb7, 0x5d7099c, 0xa300a2d, 0x5e805ff, 0x6940a53, 0x6ae0b16, 0x71f0b3d, 0xba50722, 0xbc20bbf, 0xbc90bc5, 0xbfc0bf6, 0x8230c0e, 0x8260cd8, 0xd28082e, 0x939086c, 0x5d1092d, 0x34a0337, 0x36c035d, 0x38a037b, 0x3a80399, 0x32303b7, 0x3490336, 0x36b035c, 0x389037a, 0x3a70398, 0x3fe03b6, 0x4140409, 0x42a041f, 0x43c0435, 0x44a0443, 0x4710451, 0xaf70478, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13b913b2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x276e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x67e05e3, 0x83e, 0x0, 0xe7a0e72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2772276c, 0x27740ec1, 0x0, 0x0, 0x0, 0x0, 0xefb0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22c52608, 0x261c2636, 0x1fae2378, 0x276220ab, 0x21442762, 0x20dd267c, 0x22392142, 0x24fc2434, 0x25b62598, 0x265a25d0, 0x234c2306, 0x23ee23a2, 0x2670257c, 0x1fc02706, 0x23102095, 0x259623b4, 0x2198272e, 0x258e2388, 0x225325d8, 0x25bc252a, 0x22cf21d1, 0x23da2358, 0x1fe32660, 0x2065202f, 0x230c2287, 0x244423b2, 0x25922508, 0x2630259e, 0x271e26c4, 0x2462272c, 0x24de2482, 0x268a256e, 0x25f22732, 0x21df211f, 0x251a24ba, 0x246623cc, 0x26c02618, 0x2186211d, 0x23622308, 0x24d6237c, 0x26a024ea, 0x25202063, 0x20332035, 0x24e02498, 0x26a4257a, 0x22552600, 0x25f82306, 0x21701fb4, 0x23e4220b, 0x20752424, 0x1feb246a, 0x1fa421fd, 0x22932342, 0x209f24d4, 0x244a2115, 0x25ea257e, 0x26482328, 0x225d233e, 0x226d255a, 0x1fce2422, 0x2031200f, 0x24ca22f6, 0x25f02546, 0x2069267a, 0x214a20c3, 0x22a121d9, 0x246c238a, 0x270a2698, 0x27402734, 0x22c12057, 0x2642231e, 0x222d21bf, 0x2283223b, 0x23a82382, 0x24922400, 0x251624e4, 0x2582263a, 0x268c264e, 0x20592043, 0x23a020cd, 0x25ea25c6, 0x220721cf, 0x23242269, 0x23de24b8, 0x20fb1fd6, 0x21a22170, 0x23ec220d, 0x250223fa, 0x267e2512, 0x26c626be, 0x1fe526e4, 0x2674248c, 0x221926b2, 0x1ff71fc4, 0x21822172, 0x23062299, 0x243223ae, 0x26582588, 0x22b9275e, 0x2055269e, 0x22e522df, 0x23702354, 0x242023f2, 0x24d22460, 0x201326ea, 0x26a62243, 0x21941fef, 0x263c2364, 0x221d21f5, 0x23e422e9, 0x204726aa, 0x218a20bb, 0x22d722ae, 0x234622fc, 0x242a23f0, 0x25c824f8, 0x267825ce, 0x207d26b8, 0x20bd2372, 0x240223b0, 0x26ac2590, 0x27362722, 0x236022e3, 0x24a8252e, 0x24c024ae, 0x239c23d8, 0x1fd225fe, 0x20492562, 0x21c72041, 0x24c62257, 0x234e2168, 0x264022bf, 0x26a225c0, 0x21d525de, 0x20e91fff, 0x0, 0x2113, 0x22b7, 0x20370000, 0x243e23dc, 0x247e2470, 0x248a2480, 0x24c226ca, 0x2504, 0x2594, 0x25f6, 0x26500000, 0x2666, 0x0, 0x26f626f4, 0x272a26f8, 0x26b02662, 0x1ff91fe7, 0x20612003, 0x20872067, 0x20ef20e1, 0x211120f3, 0x21882117, 0x2213218c, 0x222b2227, 0x228d2237, 0x22bb22a5, 0x235a22f8, 0x23802368, 0x23ba23aa, 0x246423f4, 0x247622f2, 0x24782474, 0x247c247a, 0x24882486, 0x24a4249a, 0x24e424b2, 0x24ec24e8, 0x250a24f6, 0x254c2532, 0x2580254c, 0x25e025d4, 0x25fc25fa, 0x2620261e, 0x2650264c, 0x26dc26ba, 0x220f26e8, 0x253e2833, 0x0, 0x202d1fa8, 0x1fe1200d, 0x20172001, 0x206d205f, 0x20d720e1, 0x20ed20df, 0x211b2113, 0x21462140, 0x215c2154, 0x21d721d3, 0x21ff21ef, 0x22232217, 0x222b221b, 0x22372225, 0x22712245, 0x227b2277, 0x22b7228f, 0x22d122cf, 0x232022db, 0x23542328, 0x2376237a, 0x238e2380, 0x245623aa, 0x23d623bc, 0x23fc23dc, 0x241c240a, 0x2430242e, 0x2440243e, 0x24522448, 0x24682450, 0x24b224a6, 0x24da24be, 0x24f224e4, 0x2564250a, 0x25b22578, 0x25dc25d6, 0x25ec25e0, 0x25ee25f6, 0x25f825fa, 0x25fc25f4, 0x26202602, 0x2656263e, 0x26822672, 0x26ba26a8, 0x26d426ca, 0x26e226dc, 0x271226e8, 0x28092762, 0x281b2807, 0x1f501f3c, 0x284f1f52, 0x28912861, 0x27602758, 0x0, 0x0, 0x0, 0xae20ade, 0xae10ae6, 0xd2b0ae5, 0xd2b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13f90000, 0x13f313f0, 0x13f613fc, 0x0, 0x0, 0x14300000, 0x147d0000, 0x13ff1451, 0x141f141a, 0x140b1439, 0x14621446, 0x2f41478, 0x14751472, 0x146e146a, 0x14041401, 0x140f1407, 0x141c1417, 0x14271421, 0x142a, 0x1433142d, 0x143b1436, 0x1443, 0x1448, 0x144e144b, 0x14530000, 0x1456, 0x145f145c, 0x14671464, 0x1424147a, 0x143e1412, 0x140a1459, 0x18c318c3, 0x18c918c9, 0x18c918c9, 0x18cb18cb, 0x18cb18cb, 0x18cf18cf, 0x18cf18cf, 0x18c718c7, 0x18c718c7, 0x18cd18cd, 0x18cd18cd, 0x18c518c5, 0x18c518c5, 0x18e718e7, 0x18e718e7, 0x18e918e9, 0x18e918e9, 0x18d318d3, 0x18d318d3, 0x18d118d1, 0x18d118d1, 0x18d518d5, 0x18d518d5, 0x18d718d7, 0x18d718d7, 0x18dd18dd, 0x18db18db, 0x18df18df, 0x18d918d9, 0x18e318e3, 0x18e118e1, 0x18eb18eb, 0x18eb18eb, 0x18ef18ef, 0x18ef18ef, 0x18f318f3, 0x18f318f3, 0x18f118f1, 0x18f118f1, 0x18f518f5, 0x18f718f7, 0x18f718f7, 0x19181918, 0x18fb18fb, 0x18fb18fb, 0x18f918f9, 0x18f918f9, 0x163c163c, 0x19151915, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18ed0000, 0x18ed18ed, 0x18ae18ed, 0x18aa18ae, 0x18b218aa, 0x190618b2, 0x190d190d, 0x19001900, 0x190b190b, 0x18b618b6, 0x18b618b6, 0x14c014c0, 0x18781878, 0x18b818b8, 0x189c189c, 0x18ac18ac, 0x18a818a8, 0x18b018b0, 0x18b418b4, 0x18a018b4, 0x18a018a0, 0x190f190f, 0x190f190f, 0x1880187c, 0x18a01890, 0x149f18a4, 0x14a914a2, 0x14bf14b6, 0x14c914c2, 0x14e314d8, 0x151514f8, 0x151d1518, 0x152f1526, 0x15371532, 0x14dc14cd, 0x157c14e0, 0x14e7157f, 0x15b015a5, 0x15c515b7, 0x163e160d, 0x1650164d, 0x1665165b, 0x16731670, 0x168f168a, 0x16b21620, 0x16ea16b5, 0x16f016ed, 0x16fe16f7, 0x17061701, 0x171c170d, 0x1724171f, 0x172a1727, 0x1730172d, 0x173e1733, 0x17551741, 0x17731764, 0x16241637, 0x14fc178b, 0x15041500, 0x150815d1, 0x17d8150c, 0x17fa17eb, 0x18141803, 0x181c1817, 0x182a181f, 0x1847182d, 0x1855184e, 0x186f185e, 0x158f1872, 0x18421599, 0x64005d, 0x72006b, 0x800079, 0x188c1888, 0x18941890, 0x18a418a0, 0x14b31486, 0x14b914b6, 0x14c214bf, 0x14f514f2, 0x150f14f8, 0x15181515, 0x15231520, 0x15291526, 0x1532152f, 0x170116fe, 0x171f171c, 0x17301724, 0x173e1733, 0x16371741, 0x178b1624, 0x15d11790, 0x180017fd, 0x180e1803, 0x18171814, 0x18581842, 0x185e185b, 0x186f1869, 0x187c1872, 0x18841880, 0x18981890, 0x14a2149f, 0x14b614a9, 0x14c914bc, 0x14e314d8, 0x151214f8, 0x15371526, 0x14dc14cd, 0x157c14e0, 0x15a514e7, 0x15b715b0, 0x160d15c5, 0x163e1618, 0x1650164d, 0x1665165b, 0x168a1670, 0x1620168f, 0x16b516b2, 0x16ed16ea, 0x16f716f0, 0x170d1706, 0x172a1727, 0x1730172d, 0x17551733, 0x17731764, 0x148b1637, 0x150014fc, 0x15d11504, 0x17eb17d8, 0x180317fa, 0x181c1811, 0x1830181f, 0x184e1847, 0x185e1855, 0x18901698, 0x14b61898, 0x14f814bc, 0x15261512, 0x15c5152c, 0x15f715d4, 0x17301602, 0x16371733, 0x18111803, 0x1698185e, 0x16d716d0, 0x168216de, 0x16aa1685, 0x16c416ad, 0x15d716c7, 0x160515da, 0x153b1608, 0x14d114a6, 0x14eb14d5, 0x164514ad, 0x16681648, 0x15df166b, 0x15f115e6, 0x15f415f7, 0x161b15c2, 0x16821662, 0x16aa1685, 0x16c416ad, 0x15d716c7, 0x160515da, 0x153b1608, 0x14d114a6, 0x14eb14d5, 0x164514ad, 0x16681648, 0x15df166b, 0x15f115e6, 0x15f415f7, 0x161b15c2, 0x15df1662, 0x15f115e6, 0x15d415f7, 0x16731602, 0x15b015a5, 0x15df15b7, 0x15f115e6, 0x168a1673, 0x148e148e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14db14cc, 0x14df14db, 0x14fb14e6, 0x150314ff, 0x154e154e, 0x156c1570, 0x15a815b3, 0x15cc15ac, 0x15c815cc, 0x15d015d0, 0x16101610, 0x15e91641, 0x15e215e9, 0x15fa15fa, 0x15fe15fe, 0x165e1653, 0x1676165e, 0x167a1676, 0x1692167e, 0x169e169e, 0x16b816a2, 0x16bc16c0, 0x16f316f3, 0x17141710, 0x176f1767, 0x1758176b, 0x17761758, 0x177d1776, 0x17a9177d, 0x17b617ad, 0x179e1796, 0x17c117bd, 0x0, 0x1822179a, 0x17ee1826, 0x17df17f2, 0x17e317df, 0x1806180a, 0x18611861, 0x14d414ac, 0x14ee14d0, 0x150b14ea, 0x15561507, 0x1552153a, 0x161415ba, 0x165715ed, 0x17811760, 0x184a1851, 0x17cc1865, 0x17f61718, 0x17671710, 0x173a16a6, 0x17c517db, 0x1736175c, 0x17db175c, 0x1565153e, 0x16fa17a2, 0x173614a5, 0x16411692, 0x17e715be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1709163a, 0x14841489, 0x161e17b1, 0x16961594, 0x16231635, 0x15421627, 0x159c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1be002f6, 0x5401be2, 0x8d0546, 0x1c260093, 0x2ff1c28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b1a02fc, 0x9961b18, 0xa10996, 0xe3e00a5, 0x1bfa0e42, 0x1bf41bfe, 0x1be81bf6, 0x1be41bea, 0x1bec1be6, 0x1bf01bee, 0x1bf2, 0x98e0000, 0xc0992, 0xc000c, 0x996000c, 0x9960996, 0x1be002f6, 0x2fa, 0x5400546, 0x8d0093, 0xa11b1a, 0xe3e00a5, 0x1bfa0e42, 0x971bfe, 0x2f2009d, 0x2f802f4, 0x5590548, 0x544, 0x990990, 0x566009b, 0x0, 0x0, 0x16ca0057, 0x5a, 0x61, 0x16cd0068, 0x16d4006f, 0x16db0076, 0x16e2007d, 0x16e50084, 0x14911480, 0x14941491, 0x183a1494, 0x1497183a, 0x18751497, 0x18751875, 0x14821875, 0x149d1482, 0x149d149d, 0x14c5149d, 0x14c714c5, 0x14c714c7, 0x151b14c7, 0x151b151b, 0x14a0151b, 0x14a014a0, 0x14a314a0, 0x14a314a3, 0x14aa14a3, 0x14aa14aa, 0x158b14aa, 0x158d158b, 0x1487158d, 0x14b41487, 0x15a314b4, 0x15a315a3, 0x15dd15a3, 0x15dd15dd, 0x160b15dd, 0x160b160b, 0x164b160b, 0x164b164b, 0x166e164b, 0x166e166e, 0x1688166e, 0x16881688, 0x168d1688, 0x168d168d, 0x16b0168d, 0x16b016b0, 0x16e816b0, 0x16e816e8, 0x170416e8, 0x17041704, 0x17221704, 0x17221722, 0x15971722, 0x15971597, 0x14b71597, 0x14b714b7, 0x14ba14b7, 0x14ba14ba, 0x148c14ba, 0x148c148c, 0x1833148c, 0x14c01833, 0x14a714c0, 0x14a714a7, 0x174914a7, 0x174d1749, 0x1751174d, 0x17461751, 0x1746, 0x0, 0x8d0000, 0x970095, 0x9b0099, 0x9f009d, 0xa500a1, 0x2f402f2, 0x2f802f6, 0x30302fa, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x5460540, 0x5440548, 0x930559, 0x5680566, 0x5e305d5, 0x62905e6, 0x687067e, 0x6cf06ac, 0x71a0607, 0x7230734, 0x7a70781, 0x83e06af, 0x861076d, 0x56b0890, 0x77306b2, 0x95d0682, 0x98e060a, 0x9920990, 0x9960994, 0x6920998, 0x9a3093a, 0xa800a31, 0x6020adc, 0xae30b10, 0xb7c073e, 0x5d30a2b, 0x78a0b3e, 0x5d80cd6, 0x8430a14, 0xa270ba6, 0xde4086d, 0x6950b44, 0xe3e0611, 0xe420e40, 0x1bd50e44, 0x1be21bd7, 0x1bee1bec, 0x1f0b1be0, 0x1c851f04, 0x1cac1c9e, 0x1cc71cb7, 0x1ebe1eb1, 0x1d9d1ec6, 0x1c871cc5, 0x1cae1ca0, 0x1cc91cb9, 0x1cf01cd3, 0x1d3f1d22, 0x1d5c1d48, 0x1ccd1d6c, 0x1d891d7c, 0x1caa1d8e, 0x1da41d9f, 0x1d551c8d, 0x1dc01dbe, 0x1dbc1d3d, 0x1de81dca, 0x1e231e04, 0x1ce01e4e, 0x1cd11e8b, 0x1eaf1e9e, 0x1ec01eb3, 0x1eca1ec8, 0x1c9c1ce4, 0x1d0c1ee3, 0x1cb51ef1, 0x8b0088, 0x19ef1a7f, 0x1abb19f4, 0x1abd19f6, 0x19fb1abf, 0x1a021a00, 0x1ac31ac1, 0x1ac71ac5, 0x1acb1ac9, 0x1a071a51, 0x1a111a0c, 0x1a131a5b, 0x1a1a1a18, 0x1a2c1a22, 0x1a391a2e, 0x1a431a3e, 0x1a48, 0x0, 0x1a8319f2, 0x1a871a85, 0x1a8b1a89, 0x0, 0x1a8f1a8d, 0x1a931a37, 0x1a971a95, 0x0, 0x1a201a99, 0x1a9f1a9d, 0x1aa31aa1, 0x0, 0x1a2a1aa5, 0x1aa9, 0x0, 0xe480e46, 0x90e4e, 0xe4a0e4c, 0x1b2f, 0x1b311bcf, 0x1b381b36, 0x1bd11b3d, 0x1bd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf330000, 0xe630f35, 0xe950f0e, 0xf1c0000, 0xf202776, 0xe9b0f1e, 0x1b140e9d, 0xea70e9f, 0xeb30f28, 0xeab0eaf, 0xe740f10, 0xeb90f12, 0xf2a0eef, 0xec30f2c, 0x277027d1, 0x27d30ec7, 0x27d50efd, 0xed70e6d, 0x5d80ed9, 0x27d70edf, 0xee50ee3, 0xf260ee7, 0x27780f22, 0xef10f24, 0x1bdc, 0xf180eff, 0xf0c0f1a, 0xe870e85, 0x27d90e89, 0x27db, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x277a, 0x277d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27862783, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27890000, 0x278c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27920000, 0x278f, 0x2795, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x279b2798, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x279e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27a427a1, 0x27ab27a7, 0x27b327af, 0x27b7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27bb0000, 0x27be27c6, 0x27c227c9, 0x27cd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0x602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x568, 0x5e605e3, 0x0, 0x687, 0x6070000, 0x71a, 0x7810000, 0x6af07a7, 0x83e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0000, 0xb100000, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd60000, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e60000, 0x67e0629, 0x687, 0x6070000, 0x734071a, 0x7810723, 0x6af07a7, 0x83e, 0x8900861, 0x6b2056b, 0x6820773, 0x95d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e60000, 0x67e0629, 0x687, 0x60706cf, 0x734071a, 0x723, 0x7a7, 0x0, 0x8900861, 0x6b2056b, 0x6820773, 0x95d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x93a0692, 0xa3109a3, 0xadc0a80, 0xb100602, 0x73e0ae3, 0xa2b0b7c, 0xb3e05d3, 0xcd6078a, 0xa1405d8, 0xba60843, 0x86d0a27, 0xb440de4, 0x6110695, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0xb440de4, 0x6110695, 0xe8d0e76, 0x0, 0xf950f40, 0xf990f97, 0xfb90f9b, 0x100a0fbb, 0x103b100c, 0x103f103d, 0x10431041, 0x10631045, 0x100a1065, 0x106c106a, 0x108e106e, 0x10921090, 0x1b50077f, 0x114710e3, 0x114b1149, 0x116b114d, 0x11cb116d, 0x120b11cd, 0x120f120d, 0x122b1229, 0x124b122d, 0x1255124d, 0x12591257, 0x1299125b, 0x129d129b, 0x1b4b129f, 0x11cb114d, 0x1299120b, 0x124b124d, 0xf950f40, 0xf990f97, 0xfb90f9b, 0x100a0fbb, 0x103b100c, 0x103f103d, 0x10431041, 0x10631045, 0x100a1065, 0x106c106a, 0x108e106e, 0x10921090, 0x1b50077f, 0x114710e3, 0x114b1149, 0x116b114d, 0x11cb116d, 0x120b11cd, 0x120f120d, 0x122b1229, 0x124b122d, 0x1255124d, 0x12591257, 0x1299125b, 0x129d129b, 0x1b4b129f, 0x11cb114d, 0x1299120b, 0x124b124d, 0xf950f40, 0xf990f97, 0xfb90f9b, 0x100a0fbb, 0x103b100c, 0x103f103d, 0x10431041, 0x10631045, 0x100a1065, 0x106c106a, 0x108e106e, 0x10921090, 0x1b50077f, 0x114710e3, 0x114b1149, 0x116b114d, 0x11cb116d, 0x120b11cd, 0x120f120d, 0x122b1229, 0x124b122d, 0x1255124d, 0x12591257, 0x1299125b, 0x129d129b, 0x1b4b129f, 0x11cb114d, 0x1299120b, 0x124b124d, 0xf950f40, 0xf990f97, 0xfb90f9b, 0x100a0fbb, 0x103b100c, 0x103f103d, 0x10431041, 0x10631045, 0x100a1065, 0x106c106a, 0x108e106e, 0x10921090, 0x1b50077f, 0x114710e3, 0x114b1149, 0x116b114d, 0x11cb116d, 0x120b11cd, 0x120f120d, 0x122b1229, 0x124b122d, 0x1255124d, 0x12591257, 0x1299125b, 0x129d129b, 0x1b4b129f, 0x11cb114d, 0x1299120b, 0x124b124d, 0xf950f40, 0xf990f97, 0xfb90f9b, 0x100a0fbb, 0x103b100c, 0x103f103d, 0x10431041, 0x10631045, 0x100a1065, 0x106c106a, 0x108e106e, 0x10921090, 0x1b50077f, 0x114710e3, 0x114b1149, 0x116b114d, 0x11cb116d, 0x120b11cd, 0x120f120d, 0x122b1229, 0x124b122d, 0x1255124d, 0x12591257, 0x1299125b, 0x129d129b, 0x1b4b129f, 0x11cb114d, 0x1299120b, 0x124b124d, 0x12ff12fd, 0x0, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x134e1346, 0x13521350, 0x13591357, 0x136c1364, 0x137f1371, 0x13861384, 0x138f138a, 0x13931391, 0x13971395, 0x13a713a5, 0x13ab13a9, 0x13b413b0, 0x13c013bb, 0x13e0276a, 0x13c913c4, 0x13d713e8, 0x134613db, 0x1350134e, 0x13571352, 0x13641359, 0x1371136c, 0x1384137f, 0x138f138a, 0x13971393, 0x13a713a5, 0x13ab13a9, 0x13b213b0, 0x13d313b4, 0x13c213c4, 0x13d513cb, 0x13d92768, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x149d1482, 0x158b14a0, 0x18330000, 0x14a314b4, 0x14a7166e, 0x15971722, 0x14ba14b7, 0x168d15a3, 0x160b16e8, 0x14871704, 0x14c715dd, 0x14aa151b, 0x164b158d, 0x16b01688, 0x18f518bf, 0x18c118e5, 0x149d0000, 0x14a0, 0x148c, 0x14a30000, 0x14a70000, 0x15971722, 0x14ba14b7, 0x168d15a3, 0x160b16e8, 0x1704, 0x14c715dd, 0x14aa151b, 0x164b0000, 0x16b00000, 0x0, 0x0, 0x0, 0x14a0, 0x0, 0x14a30000, 0x14a70000, 0x15970000, 0x14ba0000, 0x168d15a3, 0x160b0000, 0x1704, 0x15dd, 0x14aa0000, 0x164b0000, 0x16b00000, 0x18f50000, 0x18c10000, 0x149d0000, 0x14a0, 0x148c, 0x14a30000, 0x14a7166e, 0x1722, 0x14ba14b7, 0x168d15a3, 0x160b16e8, 0x1704, 0x14c715dd, 0x14aa151b, 0x164b0000, 0x16b01688, 0x18bf, 0x18e5, 0x149d1482, 0x158b14a0, 0x1833148c, 0x14a314b4, 0x14a7166e, 0x15970000, 0x14ba14b7, 0x168d15a3, 0x160b16e8, 0x14871704, 0x14c715dd, 0x14aa151b, 0x164b158d, 0x16b01688, 0x0, 0x0, 0x149d0000, 0x158b14a0, 0x18330000, 0x14a314b4, 0x14a7166e, 0x15970000, 0x14ba14b7, 0x168d15a3, 0x160b16e8, 0x14871704, 0x14c715dd, 0x14aa151b, 0x164b158d, 0x16b01688, 0x0, 0x0, 0x307030a, 0x3f10316, 0x4ab0468, 0x4fa04de, 0x520050b, 0x531, 0x0, 0x0, 0x10200fe, 0x10a0106, 0x112010e, 0x11a0116, 0x122011e, 0x12a0126, 0x132012e, 0x13a0136, 0x142013e, 0x14a0146, 0x152014e, 0x15a0156, 0x162015e, 0x5e31bfc, 0x5e5076d, 0x936, 0x5d50568, 0x5e605e3, 0x67e0629, 0x6ac0687, 0x60706cf, 0x734071a, 0x7810723, 0x6af07a7, 0x76d083e, 0x8900861, 0x6b2056b, 0x6820773, 0x60a095d, 0x76f06b1, 0x8690863, 0x933082a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x761075e, 0x76c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x606, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d4d1c72, 0x1d5c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21622249, 0x1da620a5, 0x21331fc6, 0x213e25e4, 0x22b01fcc, 0x229923a4, 0x21f7204f, 0x229d201b, 0x24d82045, 0x2612240e, 0x20c12125, 0x224f237e, 0x1f982265, 0x26521f9e, 0x1fac21ac, 0x225f20b3, 0x224b2626, 0x24a22484, 0x236e20b7, 0x32922cd, 0x20512418, 0x266e20e7, 0x0, 0x0, 0x1c001c18, 0x1c0c1c04, 0x1c101c1c, 0x1c081c20, 0x1c14, 0x0, 0x0, 0x0, 0x20af21f9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3140305, 0x30f0343, 0x3740365, 0x3920383, 0x3b003a1, 0x0, 0x0, 0x0, 0x1fb21fb6, 0x27dd1fba, 0x1fe71fdf, 0x1fed1fe9, 0x1ff31ff1, 0x1ff51ff9, 0x27e51f12, 0x20052003, 0x20152007, 0x1f1427df, 0x201b200b, 0x202327e3, 0x1fd42027, 0x202d202b, 0x203b28a1, 0x1f18203f, 0x204d204b, 0x20532051, 0x205f1f1a, 0x20672061, 0x206f206d, 0x20752071, 0x20872085, 0x2093208b, 0x20992097, 0x20992099, 0x239627eb, 0x20a720a3, 0x20ad27ed, 0x20b520b1, 0x20bf20c9, 0x20c720c5, 0x20cf20cb, 0x20d520d1, 0x20db20d9, 0x20df20db, 0x20e520e3, 0x20fd20eb, 0x20ff20ef, 0x20f520f1, 0x21232041, 0x21092107, 0x2105210b, 0x210d210f, 0x27ef2119, 0x21292127, 0x2133212d, 0x21482137, 0x27f327f1, 0x2150214e, 0x214c2152, 0x1f1c2156, 0x215a1f1e, 0x215e215e, 0x216c27f5, 0x2170216e, 0x27f72174, 0x217a2178, 0x217e21e9, 0x21841f20, 0x2192218c, 0x27fb2190, 0x27fd2196, 0x219a219c, 0x21a6219e, 0x1f2221a8, 0x21b421b0, 0x21b821b6, 0x27ff1f24, 0x21c91f26, 0x21cd21cb, 0x28b521d1, 0x280321dd, 0x25382803, 0x21e521e5, 0x28111f28, 0x21ed2865, 0x1f2a21f1, 0x220321fb, 0x22092205, 0x1f2e2211, 0x22131f2c, 0x22152805, 0x2221221f, 0x22212223, 0x222b2229, 0x222f2233, 0x22352231, 0x22392237, 0x224121bd, 0x2251224d, 0x22632259, 0x2261280b, 0x2267225b, 0x2275226b, 0x2279280d, 0x226f2273, 0x227d1f30, 0x22852281, 0x1f32227f, 0x2291228d, 0x22a7280f, 0x22b522c7, 0x22bb1f38, 0x1f341f36, 0x201f201d, 0x22bd22c9, 0x1f6a2522, 0x22d122cf, 0x22dd22d3, 0x281922d9, 0x22e71f3a, 0x22f422e1, 0x281d22f8, 0x22eb22fa, 0x1f3c22fe, 0x23022300, 0x230a2304, 0x230e281f, 0x23141f3e, 0x23162821, 0x231c1f40, 0x23282322, 0x2823232a, 0x282527f9, 0x2827233a, 0x23442340, 0x234a233c, 0x235a2352, 0x23562354, 0x235e235c, 0x23502829, 0x236c236a, 0x23761f42, 0x282b2374, 0x23842366, 0x282f282d, 0x23902386, 0x238c238e, 0x23921f44, 0x2398239a, 0x27e1239e, 0x283123a6, 0x283523ac, 0x23bc23b6, 0x283723c6, 0x23d223d0, 0x283b2839, 0x23e823e0, 0x23ea1f46, 0x1f481f48, 0x23f823f6, 0x23fe23fc, 0x1f4a2404, 0x283d2410, 0x283f241e, 0x28012424, 0x2841242c, 0x28452843, 0x1f4e1f4c, 0x28492448, 0x284b2847, 0x244c284d, 0x244e244e, 0x1f522452, 0x1f542454, 0x28511f56, 0x2462245e, 0x1f582468, 0x247a2853, 0x28572855, 0x2496248a, 0x249a1f5a, 0x249e249c, 0x285b2859, 0x24aa285b, 0x285d1f5c, 0x24b624b4, 0x285f1f5e, 0x1f6024c4, 0x24c824cc, 0x286324d0, 0x1f6224dc, 0x24e624e2, 0x1f6424ee, 0x28692867, 0x286b1f66, 0x286d24fa, 0x25062500, 0x286f250a, 0x25142871, 0x25182873, 0x1f682813, 0x25262524, 0x25281f6c, 0x28752158, 0x28152877, 0x25382817, 0x2646253a, 0x25501f6e, 0x2552254e, 0x2554205b, 0x25582556, 0x2879255c, 0x255e255a, 0x256a2568, 0x256c2560, 0x25802576, 0x25702566, 0x25742572, 0x287f287b, 0x1f70287d, 0x25862584, 0x2887258a, 0x2881258c, 0x1f741f72, 0x28852883, 0x259c1f76, 0x25a0259e, 0x25a825a2, 0x25ac25a6, 0x25b225aa, 0x25b025ae, 0x1f7825b4, 0x25ba25b8, 0x25c21f7a, 0x288925c4, 0x25cc25ca, 0x25d21f7c, 0x288b1f16, 0x1f7e288d, 0x25e81f80, 0x260225f4, 0x288f260a, 0x26162614, 0x26282622, 0x27e72893, 0x262c262e, 0x27e92632, 0x263e2638, 0x28972895, 0x2664265e, 0x28992668, 0x2680266a, 0x26882686, 0x268e2684, 0x289b2690, 0x1f822696, 0x289d269a, 0x26b61f84, 0x26c221a0, 0x28a3289f, 0x1f881f86, 0x28a526d6, 0x28a71f8a, 0x26e226e2, 0x28a926e6, 0x1f8c26f2, 0x270026fa, 0x27082704, 0x28ab1f8e, 0x27202712, 0x1f902726, 0x27281f92, 0x1f9428ad, 0x28b128af, 0x273a28b3, 0x27441f96, 0x274a2748, 0x2752274e, 0x28b72756, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//12544 bytes -enum canonMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)([ 0x0, 0x40, 0x440], [ 0x100, 0x800, 0x1000], [ 0x2020100, 0x3020202, 0x2020204, 0x2050202, 0x2020202, 0x6020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20001, 0x40003, 0x60005, 0x70000, 0x90008, 0xb000a, 0x0, 0x0, 0x0, 0x0, 0xd000c, 0xf000e, 0x10, 0x120011, 0x140013, 0x0, 0x160015, 0x0, 0x0, 0x0, 0x0, 0x170000, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x190000, 0x1a, 0x0, 0x1b, 0x1c0000, 0x1d, 0x0, 0x0, 0x0, 0x1e, 0x1f, 0x20, 0x0, 0x21, 0x0, 0x22, 0x0, 0x23, 0x0, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x0, 0x290000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b002a, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e002d, 0x30002f, 0x320031, 0x340033, 0x360035, 0x380037, 0x3a0039, 0x3c003b, 0x3d, 0x0, 0x0, 0x0, 0x3e0000, 0x0, 0x40003f, 0x41, 0x430042, 0x450044, 0x470046, 0x480000, 0x490000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c004b, 0x4e004d, 0x50004f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x520051, 0x540053, 0x560055, 0x580057, 0x5a0059, 0x5c005b, 0x5e005d, 0x5f, 0x610060, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x640063, 0x0, 0x650000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x0, 0x0, 0x0, 0x0, 0x670000, 0x0, 0x0, 0x0, 0x680000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x690000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b006a, 0x6c0000, 0x6d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f006e, 0x710070, 0x730072, 0x750074, 0x770076, 0x790078, 0x7b007a, 0x7d007c, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf000c, 0x250012, 0x4f0045, 0x850000, 0xa1009e, 0xcb00a4, 0x121011e, 0x1330124, 0x1880000, 0x1a0019d, 0x1b601a3, 0x1da, 0x26d0000, 0x2730270, 0x2f30287, 0x0, 0x322031f, 0x3380325, 0x3620358, 0x3980000, 0x3b403b1, 0x3de03b7, 0x4370434, 0x446043a, 0x49c0000, 0x4b404b1, 0x4ca04b7, 0x4ee, 0x5840000, 0x58a0587, 0x60d059e, 0x61c0000, 0x33b0028, 0x33e002b, 0x380006d, 0x38c0079, 0x38f007c, 0x392007f, 0x3950082, 0x3a2008f, 0x0, 0x3cd00ba, 0x3d800c5, 0x3db00c8, 0x3fb00e8, 0x3e400d1, 0x40a00f7, 0x41000fd, 0x4130100, 0x4190106, 0x41c0109, 0x0, 0x43d0127, 0x440012a, 0x443012d, 0x45c0149, 0x130, 0x0, 0x462014f, 0x471015d, 0x1630000, 0x1700477, 0x1660484, 0x47a, 0x0, 0x1850000, 0x1940499, 0x18e04a8, 0x4a2, 0x0, 0x4d901c5, 0x4e401d0, 0x4f801e4, 0x0, 0x52f021b, 0x5450231, 0x5350221, 0x54b0237, 0x552023e, 0x5690255, 0x5580244, 0x57b0264, 0x572025b, 0x0, 0x58d0276, 0x594027d, 0x59b0284, 0x5b4029d, 0x5b702a0, 0x5e002c9, 0x5f502de, 0x61002f6, 0x30b0302, 0x3110628, 0x314062e, 0x631, 0x50401f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2ac0000, 0x5c3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x560000, 0x13d0369, 0x1e70450, 0x2a304fb, 0x29205ba, 0x28e05a9, 0x29605a5, 0x28a05ad, 0x5a1, 0x35b0048, 0x3540041, 0x653064a, 0x0, 0x4160103, 0x46b0157, 0x522020e, 0x5250211, 0x65f065c, 0x465, 0x0, 0x40700f4, 0x0, 0x4960182, 0x3650052, 0x6500647, 0x656064d, 0x36c0059, 0x36f005c, 0x3e700d4, 0x3ea00d7, 0x4530140, 0x4560143, 0x4fe01ea, 0x50101ed, 0x5380224, 0x53b0227, 0x5bd02a6, 0x5c002a9, 0x5660252, 0x5780261, 0x0, 0x4250112, 0x0, 0x0, 0x0, 0x351003e, 0x3f400e1, 0x4f101dd, 0x4d101bd, 0x4e701d3, 0x4ea01d6, 0x61602fc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000d, 0x66b0000, 0x137, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x662, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x63d0000, 0x6450670, 0x6df06c3, 0x72c, 0x759, 0x7980778, 0x8d1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7810735, 0x84707e9, 0x8c10867, 0x92f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92808ca, 0x91f08fd, 0x95f, 0x0, 0x9b40000, 0x9b7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9cc09c6, 0x9c30000, 0x0, 0x9ba0000, 0x0, 0x0, 0x9d809e4, 0x9ed, 0x0, 0x0, 0x0, 0x0, 0x9de0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa200000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0e0a08, 0xa050000, 0x0, 0xa410000, 0x0, 0x0, 0xa1a0a26, 0xa2f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa470a44, 0x0, 0x0, 0x0, 0x0, 0x9cf0000, 0xa11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9ff09bd, 0xa0209c0, 0x0, 0xa0b09c9, 0x0, 0xa4d0a4a, 0xa1409d2, 0xa1709d5, 0x0, 0xa1d09db, 0xa2309e1, 0xa2909e7, 0x0, 0xa530a50, 0xa3e09fc, 0xa2c09ea, 0xa3209f0, 0xa3509f3, 0xa3809f6, 0x0, 0xa3b09f9, 0x0, 0x0, 0x0, 0x0, 0xac10abe, 0xac40ac7, 0xaca, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad3, 0xacd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad00000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xae80000, 0x0, 0x0, 0x0, 0xaf10000, 0x0, 0xaf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xad90ad6, 0xadf0adc, 0xae50ae2, 0xaee0aeb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb000000, 0xb03, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xafa0af7, 0xafd0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb120000, 0x0, 0xb15, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb060000, 0xb0c0b09, 0x0, 0xb0f, 0x0, 0x0, 0x0, 0x0, 0xb21, 0xb1e0000, 0xb24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb1b0b18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb300b2a, 0xb2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb36, 0x0, 0x0, 0xb400000, 0xb43, 0xb3c0b39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb4c0b46, 0xb49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb4f, 0xb550b52, 0xb59, 0x0, 0xb5f0000, 0x0, 0x0, 0x0, 0x0, 0xb620000, 0x0, 0x0, 0xb65, 0x0, 0xb680000, 0x0, 0x0, 0xb6b, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb5c0000, 0x0, 0x0, 0x0, 0x0, 0xb6e0000, 0xb710000, 0xb89, 0xb8c, 0x0, 0x0, 0x0, 0xb740000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb7a0000, 0x0, 0x0, 0x0, 0x0, 0xb7d0000, 0x0, 0x0, 0xb80, 0x0, 0xb830000, 0x0, 0x0, 0xb86, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb770000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb8f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb92, 0xb95, 0xb98, 0xb9b, 0xb9e, 0x0, 0xba1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba40000, 0xba70000, 0x0, 0xbad0baa, 0xbb00000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37d006a, 0x3830070, 0x3860073, 0x3890076, 0x39b0088, 0x39f008c, 0x3a50092, 0x3ae009b, 0x3a80095, 0x3ab0098, 0x3d000bd, 0x3d400c1, 0x3fe00eb, 0x40100ee, 0x3f700e4, 0x40400f1, 0x40d00fa, 0x41f010c, 0x4280115, 0x422010f, 0x42b0118, 0x42e011b, 0x45f014c, 0x4490136, 0x4680154, 0x46e015a, 0x4740160, 0x47d0169, 0x480016c, 0x48a0176, 0x4870173, 0x48d0179, 0x490017c, 0x493017f, 0x49f018b, 0x4a50191, 0x4ae019a, 0x4ab0197, 0x4cd01b9, 0x4d501c1, 0x4dc01c8, 0x4e001cc, 0x5290215, 0x52c0218, 0x532021e, 0x53e022a, 0x541022d, 0x5480234, 0x5550241, 0x55f024b, 0x54e023a, 0x55b0247, 0x562024e, 0x56c0258, 0x575025e, 0x581026a, 0x57e0267, 0x5dd02c6, 0x5e602cf, 0x5e302cc, 0x5900279, 0x5970280, 0x5e902d2, 0x5ec02d5, 0x5ef02d8, 0x5f202db, 0x5fb02e4, 0x5f802e1, 0x60102e7, 0x60402ea, 0x60702ed, 0x61902ff, 0x62b030e, 0x6340317, 0x637031a, 0x56f0431, 0x62205fe, 0x6590000, 0x0, 0x0, 0x372005f, 0x35f004c, 0x32c0019, 0x3280015, 0x3340021, 0x330001d, 0x3750062, 0x3450032, 0x341002e, 0x34d003a, 0x3490036, 0x3790066, 0x3ed00da, 0x3e100ce, 0x3ca00b7, 0x3be00ab, 0x3ba00a7, 0x3c600b3, 0x3c200af, 0x3f000dd, 0x44d013a, 0x4590146, 0x51b0207, 0x4f501e1, 0x4be01aa, 0x4ba01a6, 0x4c601b2, 0x4c201ae, 0x51e020a, 0x50b01f7, 0x50701f3, 0x51301ff, 0x50f01fb, 0x5170203, 0x5da02c3, 0x5b1029a, 0x5ca02b3, 0x5c602af, 0x5d202bb, 0x5ce02b7, 0x5d602bf, 0x60a02f0, 0x6250308, 0x61f0305, 0x61302f9, 0x0, 0x0, 0x0, 0x81807f6, 0x81b07f9, 0x8240802, 0x82d080b, 0x69b0679, 0x69e067c, 0x6a70685, 0x6b0068e, 0x855084a, 0x858084d, 0x85c0851, 0x0, 0x6d106c6, 0x6d406c9, 0x6d806cd, 0x0, 0x890086e, 0x8930871, 0x89c087a, 0x8a50883, 0x70406e2, 0x70706e5, 0x71006ee, 0x71906f7, 0x8e808d9, 0x8eb08dc, 0x8ef08e0, 0x8f308e4, 0x7470738, 0x74a073b, 0x74e073f, 0x7520743, 0x90b0900, 0x90e0903, 0x9120907, 0x0, 0x767075c, 0x76a075f, 0x76e0763, 0x0, 0x9460937, 0x949093a, 0x94d093e, 0x9510942, 0x7840000, 0x7870000, 0x78b0000, 0x78f0000, 0x9880966, 0x98b0969, 0x9940972, 0x99d097b, 0x7bd079b, 0x7c0079e, 0x7c907a7, 0x7d207b0, 0x7e907e2, 0x8470844, 0x8670860, 0x8c108be, 0x8fd08fa, 0x91f091c, 0x95f0958, 0x0, 0x8360814, 0x81f07fd, 0x8280806, 0x831080f, 0x6b90697, 0x6a20680, 0x6ab0689, 0x6b40692, 0x8ae088c, 0x8970875, 0x8a0087e, 0x8a90887, 0x7220700, 0x70b06e9, 0x71406f2, 0x71d06fb, 0x9a60984, 0x98f096d, 0x9980976, 0x9a1097f, 0x7db07b9, 0x7c407a2, 0x7cd07ab, 0x7d607b4, 0x7f007f3, 0x84107e5, 0x7ec, 0x83d083a, 0x6730676, 0x670066d, 0x6bd, 0x8bc, 0x6400000, 0x8b90863, 0x86a, 0x8b508b2, 0x6c306c0, 0x6df06dc, 0xbb30726, 0xbb90bb6, 0x8c408c7, 0x8d108cd, 0x0, 0x8d508f7, 0x72f0732, 0x72c0729, 0xbbc0000, 0xbc20bbf, 0x9220925, 0x92f092b, 0x9190916, 0x9330955, 0x77b077e, 0x7780775, 0x63a0772, 0x31d063d, 0x0, 0x9b1095b, 0x962, 0x9ad09aa, 0x7590756, 0x7980795, 0x64307df, 0x0, 0xbc70bc5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x793, 0x0, 0x4f0152, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbcc0bc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbcf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbd20000, 0xbd50bd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbdb, 0x0, 0xbde0000, 0x0, 0xbe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe4, 0xbe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbea0000, 0x0, 0xbed, 0xbf00000, 0xbf30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xbf9, 0x0, 0x0, 0x0, 0x0, 0xbf60000, 0x90003, 0xbff0bfc, 0x0, 0xc050c02, 0x0, 0xc0b0c08, 0x0, 0x0, 0x0, 0xc110c0e, 0x0, 0xc1d0c1a, 0x0, 0xc230c20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc2f0c2c, 0xc350c32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc170c14, 0xc290c26, 0x0, 0x0, 0x0, 0xc3b0c38, 0xc410c3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc470000, 0xc49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4e, 0xc51, 0xc54, 0xc57, 0xc5a, 0xc5d, 0xc60, 0xc63, 0xc66, 0xc69, 0xc6c, 0xc6f, 0xc720000, 0xc750000, 0xc780000, 0x0, 0x0, 0x0, 0xc7e0c7b, 0xc810000, 0xc84, 0xc8a0c87, 0xc8d0000, 0xc90, 0xc960c93, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4b, 0x0, 0x0, 0x0, 0x0, 0xc99, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc9f, 0xca2, 0xca5, 0xca8, 0xcab, 0xcae, 0xcb1, 0xcb4, 0xcb7, 0xcba, 0xcbd, 0xcc0, 0xcc30000, 0xcc60000, 0xcc90000, 0x0, 0x0, 0x0, 0xccf0ccc, 0xcd20000, 0xcd5, 0xcdb0cd8, 0xcde0000, 0xce1, 0xce70ce4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc9c, 0xcea0000, 0xcf00ced, 0xcf3, 0x0, 0xcf6, 0xfb71241, 0x124b125d, 0xd831043, 0x13270e29, 0xe991327, 0xe4f1293, 0xf550e97, 0x116710cd, 0x11fd11e3, 0x12791215, 0x10190feb, 0x109d1069, 0x128911c7, 0xd8d12f3, 0xff50e1d, 0x11e11079, 0xedb1309, 0x11d91051, 0xf65121d, 0x12031189, 0xfbd0eff, 0x108d1025, 0xd9d127d, 0xe050dd9, 0xff10f95, 0x10d31077, 0x11dd1171, 0x125911e7, 0x12fb12cf, 0x10e91307, 0x114d1107, 0x12a111b9, 0x122f130b, 0xf0b0e87, 0x117d112f, 0x10ed1083, 0x12cb1249, 0xecb0e85, 0x102f0fed, 0x11471047, 0x12b11159, 0x117f0e03, 0xddd0ddf, 0x114f1115, 0x12b511c5, 0xf67123d, 0x12350feb, 0xebb0d87, 0x10950f27, 0xe1110c1, 0xda510f1, 0xd7f0f1b, 0xf9d1011, 0xe231145, 0x10d70e7d, 0x122711c9, 0x126d1005, 0xf6f100d, 0xf7b11a5, 0xd9110bf, 0xddb0dc3, 0x113d0fdb, 0x122d1195, 0xe091291, 0xe9f0e37, 0xfa10f07, 0x10f31053, 0x12f712ab, 0x1313130d, 0xfb50df9, 0x12690ffd, 0xf490ef3, 0xf910f57, 0x106d104b, 0x111110af, 0x11791153, 0x11cd1261, 0x12a31271, 0xdfb0de9, 0x10670e41, 0x1227120b, 0xf230efd, 0x10030f77, 0x1091112d, 0xe670d97, 0xee50ebb, 0x109b0f29, 0x116b10a9, 0x12951175, 0x12d112c9, 0xd9f12dd, 0x128d110f, 0xf3512c1, 0xdb10d8f, 0xec70ebd, 0xfeb0f9f, 0x10cb1073, 0x127711d3, 0xfad1323, 0xdf712af, 0xfd10fcb, 0x103b1021, 0x10bd10a1, 0x114310e7, 0xdc512e3, 0x12b70f5d, 0xed70da9, 0x12631031, 0xf390f17, 0x10950fd5, 0xdeb12bb, 0xecf0e31, 0xfc30fa7, 0x10150fe1, 0x10c3109f, 0x120d1163, 0x128f1213, 0xe1312c5, 0xe33103d, 0x10b11075, 0x12bd11db, 0x130f12ff, 0x102d0fcf, 0x1121118b, 0x11331125, 0x1063108b, 0xd93123b, 0xded11ad, 0xef50de7, 0x11390f69, 0x101b0eb5, 0x12670fb3, 0x12b31205, 0xf031221, 0xe590db5, 0x0, 0xe7b, 0xfab, 0xde10000, 0x10cf108f, 0x110310f5, 0x110d1105, 0x113512d3, 0x116d, 0x11df, 0x1233, 0x12730000, 0x1283, 0x0, 0x12e912e7, 0x130512eb, 0x12bf127f, 0xdb30da1, 0xe010db9, 0xe170e07, 0xe5f0e53, 0xe790e63, 0xecd0e7f, 0xf2f0ed1, 0xf470f43, 0xf970f53, 0xfaf0fa3, 0x10270fdd, 0x10491035, 0x107d106f, 0x10eb10a3, 0x10fb10f7, 0x10fd10f9, 0x110110ff, 0x110b1109, 0x111d1117, 0x11531127, 0x115b1157, 0x11731161, 0x1197118d, 0x11cb1197, 0x12231219, 0x12391237, 0x124f124d, 0x1273126f, 0x12d912c7, 0xf2b12e1, 0x119313d6, 0x0, 0xdd70d81, 0xd9b0dc1, 0xdc90db7, 0xe0b0dff, 0xe490e53, 0xe5d0e51, 0xe830e7b, 0xe9b0e95, 0xeb10ea9, 0xf050f01, 0xf1d0f13, 0xf3f0f33, 0xf470f37, 0xf530f41, 0xf7f0f5f, 0xf890f85, 0xfab0f99, 0xfbf0fbd, 0xfff0fc7, 0x10211005, 0x10411045, 0x10571049, 0x10e3106f, 0x1089107f, 0x10ab108f, 0x10b910b5, 0x10c910c7, 0x10d110cf, 0x10df10d5, 0x10ef10dd, 0x1127111f, 0x11491131, 0x115f1153, 0x11af1173, 0x11f911c3, 0x121f121b, 0x12291223, 0x122b1233, 0x12351237, 0x12391231, 0x124f123f, 0x12751265, 0x1299128b, 0x12c712b9, 0x12d512d3, 0x12db12d9, 0x12f912e1, 0x13ac1327, 0x13be13aa, 0xd370d23, 0x13f20d39, 0x14341404, 0x13251321, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa7a0000, 0xabb0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xab50ab2, 0xaae0aaa, 0xa590a56, 0xa5f0a5c, 0xa680a65, 0xa710a6b, 0xa74, 0xa7d0a77, 0xa830a80, 0xa89, 0xa8c, 0xa920a8f, 0xa950000, 0xa98, 0xaa10a9e, 0xaa70aa4, 0xa6e0ab8, 0xa860a62, 0xa9b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1329, 0x132c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x132f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13351332, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13380000, 0x133b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13410000, 0x133e, 0x1344, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x134a1347, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x134d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13531350, 0x135a1356, 0x1362135e, 0x1366, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x136a0000, 0x136d1375, 0x13711378, 0x137c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd850d89, 0x13800d8b, 0xda10d99, 0xda70da3, 0xdad0dab, 0xdaf0db3, 0x13880cf9, 0xdbb0db9, 0xdc70dbd, 0xcfb1382, 0xdcb0dbf, 0xdd11386, 0xd950dd3, 0xdd70dd5, 0xde31444, 0xcff0de5, 0xdf10def, 0xdf50df3, 0xdff0d01, 0xe070e01, 0xe0d0e0b, 0xe110e0f, 0xe170e15, 0xe1b0e19, 0xe210e1f, 0xe210e21, 0x105d138e, 0xe270e25, 0xe2b1390, 0xe2f0e2d, 0xe350e3d, 0xe3b0e39, 0xe430e3f, 0xe470e45, 0xe4d0e4b, 0xe510e4d, 0xe570e55, 0xe690e5b, 0xe6b0e5f, 0xe650e61, 0xe890de7, 0xe710e6f, 0xe6d0e73, 0xe750e77, 0x13920e81, 0xe8d0e8b, 0xe910e8f, 0xe9d0e93, 0x13961394, 0xea50ea3, 0xea10ea7, 0xd030eab, 0xeaf0d05, 0xeb30eb3, 0xeb71398, 0xebb0eb9, 0x139a0ebf, 0xec30ec1, 0xec50f0f, 0xec90d07, 0xed50ed1, 0x139e0ed3, 0x13a00ed9, 0xedd0edf, 0xee70ee1, 0xd090ee9, 0xeed0eeb, 0xef10eef, 0x13a20d0b, 0xef70d0d, 0xefb0ef9, 0x14580eff, 0x13a60f09, 0x118f13a6, 0xf0d0f0d, 0x13b40d0f, 0xf111408, 0xd110f15, 0xf1f0f19, 0xf250f21, 0xd150f2d, 0xf2f0d13, 0xf3113a8, 0xf3d0f3b, 0xf3d0f3f, 0xf470f45, 0xf4b0f4f, 0xf510f4d, 0xf550f53, 0xf5b0f59, 0xf630f61, 0xf730f6b, 0xf7113ae, 0xf750f6d, 0xf830f79, 0xf8713b0, 0xf7d0f81, 0xf8b0d17, 0xf930f8f, 0xd190f8d, 0xf9b0f97, 0xfa513b2, 0xfa90fb9, 0xfaf0d1f, 0xd1b0d1d, 0xdcf0dcd, 0xfb10fbb, 0xd511181, 0xfbf0fbd, 0xfc90fc1, 0x13bc0fc5, 0xfd30d21, 0xfd90fcd, 0x13c00fdd, 0xfd70fdf, 0xd230fe3, 0xfe70fe5, 0xfef0fe9, 0xff313c2, 0xff70d25, 0xff913c4, 0xffb0d27, 0x10051001, 0x13c61007, 0x13c8139c, 0x13ca1009, 0x1013100f, 0x1017100b, 0x1027101f, 0x10231021, 0x102b1029, 0x101d13cc, 0x10391037, 0x10410d29, 0x13ce103f, 0x104d1033, 0x13d213d0, 0x1059104f, 0x10551057, 0x105b0d2b, 0x105f1061, 0x13841065, 0x13d4106b, 0x13d81071, 0x107f107b, 0x13da1081, 0x10871085, 0x13de13dc, 0x10971093, 0x10990d2d, 0xd2f0d2f, 0x10a710a5, 0x10ad10ab, 0xd3110b3, 0x13e010b7, 0x13e210bb, 0x13a410c1, 0x13e410c5, 0x13e813e6, 0xd350d33, 0x13ec10d5, 0x13ee13ea, 0x10d913f0, 0x10db10db, 0xd3910df, 0xd3b10e1, 0x13f40d3d, 0x10e910e5, 0xd3f10ef, 0x10ff13f6, 0x13fa13f8, 0x1113110d, 0x11170d41, 0x111b1119, 0x13fe13fc, 0x112313fe, 0x14000d43, 0x112b1129, 0x14020d45, 0xd471137, 0x113b113f, 0x14061141, 0xd49114b, 0x11551151, 0xd4b115d, 0x140c140a, 0x140e0d4d, 0x14101165, 0x116f1169, 0x14121173, 0x11771414, 0x117b1416, 0xd4f13b6, 0x11851183, 0x11870d53, 0x14180ead, 0x13b8141a, 0x118f13ba, 0x126b1191, 0x119b0d55, 0x119d1199, 0x119f0dfd, 0x11a311a1, 0x141c11a7, 0x11a911a5, 0x11b511b3, 0x11b711ab, 0x11cb11c1, 0x11bb11b1, 0x11bf11bd, 0x1422141e, 0xd571420, 0x11d111cf, 0x142a11d5, 0x142411d7, 0xd5b0d59, 0x14281426, 0x11e50d5d, 0x11e911e7, 0x11ef11eb, 0x11f311ed, 0x11f911f1, 0x11f711f5, 0xd5f11fb, 0x120111ff, 0x12070d61, 0x142c1209, 0x1211120f, 0x12170d63, 0x142e0cfd, 0xd651430, 0x12250d67, 0x123f1231, 0x14321243, 0x12471245, 0x12531251, 0x138a1436, 0x12551257, 0x138c125b, 0x1265125f, 0x143a1438, 0x1281127b, 0x143c1285, 0x12971287, 0x129f129d, 0x12a5129b, 0x143e12a7, 0xd6912a9, 0x144012ad, 0x12c30d6b, 0x12cd0ee3, 0x14461442, 0xd6f0d6d, 0x144812d7, 0x144a0d71, 0x12db12db, 0x144c12df, 0xd7312e5, 0x12ef12ed, 0x12f512f1, 0x144e0d75, 0x12fd12f9, 0xd771301, 0x13030d79, 0xd7b1450, 0x14541452, 0x13111456, 0x13150d7d, 0x13191317, 0x131d131b, 0x145a131f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -@property -{ -private alias _IDCA = immutable(dchar[]); -_IDCA decompCanonTable() @safe pure nothrow { static _IDCA t = [ 0x0, 0x3b, 0x0, 0x3c, 0x338, 0x0, 0x3d, 0x338, 0x0, 0x3e, 0x338, 0x0, 0x41, 0x300, 0x0, 0x41, 0x301, 0x0, 0x41, 0x302, 0x0, 0x41, 0x302, 0x300, 0x0, 0x41, 0x302, 0x301, 0x0, 0x41, 0x302, 0x303, 0x0, 0x41, 0x302, 0x309, 0x0, 0x41, 0x303, 0x0, 0x41, 0x304, 0x0, 0x41, 0x306, 0x0, 0x41, 0x306, 0x300, 0x0, 0x41, 0x306, 0x301, 0x0, 0x41, 0x306, 0x303, 0x0, 0x41, 0x306, 0x309, 0x0, 0x41, 0x307, 0x0, 0x41, 0x307, 0x304, 0x0, 0x41, 0x308, 0x0, 0x41, 0x308, 0x304, 0x0, 0x41, 0x309, 0x0, 0x41, 0x30a, 0x0, 0x41, 0x30a, 0x301, 0x0, 0x41, 0x30c, 0x0, 0x41, 0x30f, 0x0, 0x41, 0x311, 0x0, 0x41, 0x323, 0x0, 0x41, 0x323, 0x302, 0x0, 0x41, 0x323, 0x306, 0x0, 0x41, 0x325, 0x0, 0x41, 0x328, 0x0, 0x42, 0x307, 0x0, 0x42, 0x323, 0x0, 0x42, 0x331, 0x0, 0x43, 0x301, 0x0, 0x43, 0x302, 0x0, 0x43, 0x307, 0x0, 0x43, 0x30c, 0x0, 0x43, 0x327, 0x0, 0x43, 0x327, 0x301, 0x0, 0x44, 0x307, 0x0, 0x44, 0x30c, 0x0, 0x44, 0x323, 0x0, 0x44, 0x327, 0x0, 0x44, 0x32d, 0x0, 0x44, 0x331, 0x0, 0x45, 0x300, 0x0, 0x45, 0x301, 0x0, 0x45, 0x302, 0x0, 0x45, 0x302, 0x300, 0x0, 0x45, 0x302, 0x301, 0x0, 0x45, 0x302, 0x303, 0x0, 0x45, 0x302, 0x309, 0x0, 0x45, 0x303, 0x0, 0x45, 0x304, 0x0, 0x45, 0x304, 0x300, 0x0, 0x45, 0x304, 0x301, 0x0, 0x45, 0x306, 0x0, 0x45, 0x307, 0x0, 0x45, 0x308, 0x0, 0x45, 0x309, 0x0, 0x45, 0x30c, 0x0, 0x45, 0x30f, 0x0, 0x45, 0x311, 0x0, 0x45, 0x323, 0x0, 0x45, 0x323, 0x302, 0x0, 0x45, 0x327, 0x0, 0x45, 0x327, 0x306, 0x0, 0x45, 0x328, 0x0, 0x45, 0x32d, 0x0, 0x45, 0x330, 0x0, 0x46, 0x307, 0x0, 0x47, 0x301, 0x0, 0x47, 0x302, 0x0, 0x47, 0x304, 0x0, 0x47, 0x306, 0x0, 0x47, 0x307, 0x0, 0x47, 0x30c, 0x0, 0x47, 0x327, 0x0, 0x48, 0x302, 0x0, 0x48, 0x307, 0x0, 0x48, 0x308, 0x0, 0x48, 0x30c, 0x0, 0x48, 0x323, 0x0, 0x48, 0x327, 0x0, 0x48, 0x32e, 0x0, 0x49, 0x300, 0x0, 0x49, 0x301, 0x0, 0x49, 0x302, 0x0, 0x49, 0x303, 0x0, 0x49, 0x304, 0x0, 0x49, 0x306, 0x0, 0x49, 0x307, 0x0, 0x49, 0x308, 0x0, 0x49, 0x308, 0x301, 0x0, 0x49, 0x309, 0x0, 0x49, 0x30c, 0x0, 0x49, 0x30f, 0x0, 0x49, 0x311, 0x0, 0x49, 0x323, 0x0, 0x49, 0x328, 0x0, 0x49, 0x330, 0x0, 0x4a, 0x302, 0x0, 0x4b, 0x0, 0x4b, 0x301, 0x0, 0x4b, 0x30c, 0x0, 0x4b, 0x323, 0x0, 0x4b, 0x327, 0x0, 0x4b, 0x331, 0x0, 0x4c, 0x301, 0x0, 0x4c, 0x30c, 0x0, 0x4c, 0x323, 0x0, 0x4c, 0x323, 0x304, 0x0, 0x4c, 0x327, 0x0, 0x4c, 0x32d, 0x0, 0x4c, 0x331, 0x0, 0x4d, 0x301, 0x0, 0x4d, 0x307, 0x0, 0x4d, 0x323, 0x0, 0x4e, 0x300, 0x0, 0x4e, 0x301, 0x0, 0x4e, 0x303, 0x0, 0x4e, 0x307, 0x0, 0x4e, 0x30c, 0x0, 0x4e, 0x323, 0x0, 0x4e, 0x327, 0x0, 0x4e, 0x32d, 0x0, 0x4e, 0x331, 0x0, 0x4f, 0x300, 0x0, 0x4f, 0x301, 0x0, 0x4f, 0x302, 0x0, 0x4f, 0x302, 0x300, 0x0, 0x4f, 0x302, 0x301, 0x0, 0x4f, 0x302, 0x303, 0x0, 0x4f, 0x302, 0x309, 0x0, 0x4f, 0x303, 0x0, 0x4f, 0x303, 0x301, 0x0, 0x4f, 0x303, 0x304, 0x0, 0x4f, 0x303, 0x308, 0x0, 0x4f, 0x304, 0x0, 0x4f, 0x304, 0x300, 0x0, 0x4f, 0x304, 0x301, 0x0, 0x4f, 0x306, 0x0, 0x4f, 0x307, 0x0, 0x4f, 0x307, 0x304, 0x0, 0x4f, 0x308, 0x0, 0x4f, 0x308, 0x304, 0x0, 0x4f, 0x309, 0x0, 0x4f, 0x30b, 0x0, 0x4f, 0x30c, 0x0, 0x4f, 0x30f, 0x0, 0x4f, 0x311, 0x0, 0x4f, 0x31b, 0x0, 0x4f, 0x31b, 0x300, 0x0, 0x4f, 0x31b, 0x301, 0x0, 0x4f, 0x31b, 0x303, 0x0, 0x4f, 0x31b, 0x309, 0x0, 0x4f, 0x31b, 0x323, 0x0, 0x4f, 0x323, 0x0, 0x4f, 0x323, 0x302, 0x0, 0x4f, 0x328, 0x0, 0x4f, 0x328, 0x304, 0x0, 0x50, 0x301, 0x0, 0x50, 0x307, 0x0, 0x52, 0x301, 0x0, 0x52, 0x307, 0x0, 0x52, 0x30c, 0x0, 0x52, 0x30f, 0x0, 0x52, 0x311, 0x0, 0x52, 0x323, 0x0, 0x52, 0x323, 0x304, 0x0, 0x52, 0x327, 0x0, 0x52, 0x331, 0x0, 0x53, 0x301, 0x0, 0x53, 0x301, 0x307, 0x0, 0x53, 0x302, 0x0, 0x53, 0x307, 0x0, 0x53, 0x30c, 0x0, 0x53, 0x30c, 0x307, 0x0, 0x53, 0x323, 0x0, 0x53, 0x323, 0x307, 0x0, 0x53, 0x326, 0x0, 0x53, 0x327, 0x0, 0x54, 0x307, 0x0, 0x54, 0x30c, 0x0, 0x54, 0x323, 0x0, 0x54, 0x326, 0x0, 0x54, 0x327, 0x0, 0x54, 0x32d, 0x0, 0x54, 0x331, 0x0, 0x55, 0x300, 0x0, 0x55, 0x301, 0x0, 0x55, 0x302, 0x0, 0x55, 0x303, 0x0, 0x55, 0x303, 0x301, 0x0, 0x55, 0x304, 0x0, 0x55, 0x304, 0x308, 0x0, 0x55, 0x306, 0x0, 0x55, 0x308, 0x0, 0x55, 0x308, 0x300, 0x0, 0x55, 0x308, 0x301, 0x0, 0x55, 0x308, 0x304, 0x0, 0x55, 0x308, 0x30c, 0x0, 0x55, 0x309, 0x0, 0x55, 0x30a, 0x0, 0x55, 0x30b, 0x0, 0x55, 0x30c, 0x0, 0x55, 0x30f, 0x0, 0x55, 0x311, 0x0, 0x55, 0x31b, 0x0, 0x55, 0x31b, 0x300, 0x0, 0x55, 0x31b, 0x301, 0x0, 0x55, 0x31b, 0x303, 0x0, 0x55, 0x31b, 0x309, 0x0, 0x55, 0x31b, 0x323, 0x0, 0x55, 0x323, 0x0, 0x55, 0x324, 0x0, 0x55, 0x328, 0x0, 0x55, 0x32d, 0x0, 0x55, 0x330, 0x0, 0x56, 0x303, 0x0, 0x56, 0x323, 0x0, 0x57, 0x300, 0x0, 0x57, 0x301, 0x0, 0x57, 0x302, 0x0, 0x57, 0x307, 0x0, 0x57, 0x308, 0x0, 0x57, 0x323, 0x0, 0x58, 0x307, 0x0, 0x58, 0x308, 0x0, 0x59, 0x300, 0x0, 0x59, 0x301, 0x0, 0x59, 0x302, 0x0, 0x59, 0x303, 0x0, 0x59, 0x304, 0x0, 0x59, 0x307, 0x0, 0x59, 0x308, 0x0, 0x59, 0x309, 0x0, 0x59, 0x323, 0x0, 0x5a, 0x301, 0x0, 0x5a, 0x302, 0x0, 0x5a, 0x307, 0x0, 0x5a, 0x30c, 0x0, 0x5a, 0x323, 0x0, 0x5a, 0x331, 0x0, 0x60, 0x0, 0x61, 0x300, 0x0, 0x61, 0x301, 0x0, 0x61, 0x302, 0x0, 0x61, 0x302, 0x300, 0x0, 0x61, 0x302, 0x301, 0x0, 0x61, 0x302, 0x303, 0x0, 0x61, 0x302, 0x309, 0x0, 0x61, 0x303, 0x0, 0x61, 0x304, 0x0, 0x61, 0x306, 0x0, 0x61, 0x306, 0x300, 0x0, 0x61, 0x306, 0x301, 0x0, 0x61, 0x306, 0x303, 0x0, 0x61, 0x306, 0x309, 0x0, 0x61, 0x307, 0x0, 0x61, 0x307, 0x304, 0x0, 0x61, 0x308, 0x0, 0x61, 0x308, 0x304, 0x0, 0x61, 0x309, 0x0, 0x61, 0x30a, 0x0, 0x61, 0x30a, 0x301, 0x0, 0x61, 0x30c, 0x0, 0x61, 0x30f, 0x0, 0x61, 0x311, 0x0, 0x61, 0x323, 0x0, 0x61, 0x323, 0x302, 0x0, 0x61, 0x323, 0x306, 0x0, 0x61, 0x325, 0x0, 0x61, 0x328, 0x0, 0x62, 0x307, 0x0, 0x62, 0x323, 0x0, 0x62, 0x331, 0x0, 0x63, 0x301, 0x0, 0x63, 0x302, 0x0, 0x63, 0x307, 0x0, 0x63, 0x30c, 0x0, 0x63, 0x327, 0x0, 0x63, 0x327, 0x301, 0x0, 0x64, 0x307, 0x0, 0x64, 0x30c, 0x0, 0x64, 0x323, 0x0, 0x64, 0x327, 0x0, 0x64, 0x32d, 0x0, 0x64, 0x331, 0x0, 0x65, 0x300, 0x0, 0x65, 0x301, 0x0, 0x65, 0x302, 0x0, 0x65, 0x302, 0x300, 0x0, 0x65, 0x302, 0x301, 0x0, 0x65, 0x302, 0x303, 0x0, 0x65, 0x302, 0x309, 0x0, 0x65, 0x303, 0x0, 0x65, 0x304, 0x0, 0x65, 0x304, 0x300, 0x0, 0x65, 0x304, 0x301, 0x0, 0x65, 0x306, 0x0, 0x65, 0x307, 0x0, 0x65, 0x308, 0x0, 0x65, 0x309, 0x0, 0x65, 0x30c, 0x0, 0x65, 0x30f, 0x0, 0x65, 0x311, 0x0, 0x65, 0x323, 0x0, 0x65, 0x323, 0x302, 0x0, 0x65, 0x327, 0x0, 0x65, 0x327, 0x306, 0x0, 0x65, 0x328, 0x0, 0x65, 0x32d, 0x0, 0x65, 0x330, 0x0, 0x66, 0x307, 0x0, 0x67, 0x301, 0x0, 0x67, 0x302, 0x0, 0x67, 0x304, 0x0, 0x67, 0x306, 0x0, 0x67, 0x307, 0x0, 0x67, 0x30c, 0x0, 0x67, 0x327, 0x0, 0x68, 0x302, 0x0, 0x68, 0x307, 0x0, 0x68, 0x308, 0x0, 0x68, 0x30c, 0x0, 0x68, 0x323, 0x0, 0x68, 0x327, 0x0, 0x68, 0x32e, 0x0, 0x68, 0x331, 0x0, 0x69, 0x300, 0x0, 0x69, 0x301, 0x0, 0x69, 0x302, 0x0, 0x69, 0x303, 0x0, 0x69, 0x304, 0x0, 0x69, 0x306, 0x0, 0x69, 0x308, 0x0, 0x69, 0x308, 0x301, 0x0, 0x69, 0x309, 0x0, 0x69, 0x30c, 0x0, 0x69, 0x30f, 0x0, 0x69, 0x311, 0x0, 0x69, 0x323, 0x0, 0x69, 0x328, 0x0, 0x69, 0x330, 0x0, 0x6a, 0x302, 0x0, 0x6a, 0x30c, 0x0, 0x6b, 0x301, 0x0, 0x6b, 0x30c, 0x0, 0x6b, 0x323, 0x0, 0x6b, 0x327, 0x0, 0x6b, 0x331, 0x0, 0x6c, 0x301, 0x0, 0x6c, 0x30c, 0x0, 0x6c, 0x323, 0x0, 0x6c, 0x323, 0x304, 0x0, 0x6c, 0x327, 0x0, 0x6c, 0x32d, 0x0, 0x6c, 0x331, 0x0, 0x6d, 0x301, 0x0, 0x6d, 0x307, 0x0, 0x6d, 0x323, 0x0, 0x6e, 0x300, 0x0, 0x6e, 0x301, 0x0, 0x6e, 0x303, 0x0, 0x6e, 0x307, 0x0, 0x6e, 0x30c, 0x0, 0x6e, 0x323, 0x0, 0x6e, 0x327, 0x0, 0x6e, 0x32d, 0x0, 0x6e, 0x331, 0x0, 0x6f, 0x300, 0x0, 0x6f, 0x301, 0x0, 0x6f, 0x302, 0x0, 0x6f, 0x302, 0x300, 0x0, 0x6f, 0x302, 0x301, 0x0, 0x6f, 0x302, 0x303, 0x0, 0x6f, 0x302, 0x309, 0x0, 0x6f, 0x303, 0x0, 0x6f, 0x303, 0x301, 0x0, 0x6f, 0x303, 0x304, 0x0, 0x6f, 0x303, 0x308, 0x0, 0x6f, 0x304, 0x0, 0x6f, 0x304, 0x300, 0x0, 0x6f, 0x304, 0x301, 0x0, 0x6f, 0x306, 0x0, 0x6f, 0x307, 0x0, 0x6f, 0x307, 0x304, 0x0, 0x6f, 0x308, 0x0, 0x6f, 0x308, 0x304, 0x0, 0x6f, 0x309, 0x0, 0x6f, 0x30b, 0x0, 0x6f, 0x30c, 0x0, 0x6f, 0x30f, 0x0, 0x6f, 0x311, 0x0, 0x6f, 0x31b, 0x0, 0x6f, 0x31b, 0x300, 0x0, 0x6f, 0x31b, 0x301, 0x0, 0x6f, 0x31b, 0x303, 0x0, 0x6f, 0x31b, 0x309, 0x0, 0x6f, 0x31b, 0x323, 0x0, 0x6f, 0x323, 0x0, 0x6f, 0x323, 0x302, 0x0, 0x6f, 0x328, 0x0, 0x6f, 0x328, 0x304, 0x0, 0x70, 0x301, 0x0, 0x70, 0x307, 0x0, 0x72, 0x301, 0x0, 0x72, 0x307, 0x0, 0x72, 0x30c, 0x0, 0x72, 0x30f, 0x0, 0x72, 0x311, 0x0, 0x72, 0x323, 0x0, 0x72, 0x323, 0x304, 0x0, 0x72, 0x327, 0x0, 0x72, 0x331, 0x0, 0x73, 0x301, 0x0, 0x73, 0x301, 0x307, 0x0, 0x73, 0x302, 0x0, 0x73, 0x307, 0x0, 0x73, 0x30c, 0x0, 0x73, 0x30c, 0x307, 0x0, 0x73, 0x323, 0x0, 0x73, 0x323, 0x307, 0x0, 0x73, 0x326, 0x0, 0x73, 0x327, 0x0, 0x74, 0x307, 0x0, 0x74, 0x308, 0x0, 0x74, 0x30c, 0x0, 0x74, 0x323, 0x0, 0x74, 0x326, 0x0, 0x74, 0x327, 0x0, 0x74, 0x32d, 0x0, 0x74, 0x331, 0x0, 0x75, 0x300, 0x0, 0x75, 0x301, 0x0, 0x75, 0x302, 0x0, 0x75, 0x303, 0x0, 0x75, 0x303, 0x301, 0x0, 0x75, 0x304, 0x0, 0x75, 0x304, 0x308, 0x0, 0x75, 0x306, 0x0, 0x75, 0x308, 0x0, 0x75, 0x308, 0x300, 0x0, 0x75, 0x308, 0x301, 0x0, 0x75, 0x308, 0x304, 0x0, 0x75, 0x308, 0x30c, 0x0, 0x75, 0x309, 0x0, 0x75, 0x30a, 0x0, 0x75, 0x30b, 0x0, 0x75, 0x30c, 0x0, 0x75, 0x30f, 0x0, 0x75, 0x311, 0x0, 0x75, 0x31b, 0x0, 0x75, 0x31b, 0x300, 0x0, 0x75, 0x31b, 0x301, 0x0, 0x75, 0x31b, 0x303, 0x0, 0x75, 0x31b, 0x309, 0x0, 0x75, 0x31b, 0x323, 0x0, 0x75, 0x323, 0x0, 0x75, 0x324, 0x0, 0x75, 0x328, 0x0, 0x75, 0x32d, 0x0, 0x75, 0x330, 0x0, 0x76, 0x303, 0x0, 0x76, 0x323, 0x0, 0x77, 0x300, 0x0, 0x77, 0x301, 0x0, 0x77, 0x302, 0x0, 0x77, 0x307, 0x0, 0x77, 0x308, 0x0, 0x77, 0x30a, 0x0, 0x77, 0x323, 0x0, 0x78, 0x307, 0x0, 0x78, 0x308, 0x0, 0x79, 0x300, 0x0, 0x79, 0x301, 0x0, 0x79, 0x302, 0x0, 0x79, 0x303, 0x0, 0x79, 0x304, 0x0, 0x79, 0x307, 0x0, 0x79, 0x308, 0x0, 0x79, 0x309, 0x0, 0x79, 0x30a, 0x0, 0x79, 0x323, 0x0, 0x7a, 0x301, 0x0, 0x7a, 0x302, 0x0, 0x7a, 0x307, 0x0, 0x7a, 0x30c, 0x0, 0x7a, 0x323, 0x0, 0x7a, 0x331, 0x0, 0xa8, 0x300, 0x0, 0xa8, 0x301, 0x0, 0xa8, 0x342, 0x0, 0xb4, 0x0, 0xb7, 0x0, 0xc6, 0x301, 0x0, 0xc6, 0x304, 0x0, 0xd8, 0x301, 0x0, 0xe6, 0x301, 0x0, 0xe6, 0x304, 0x0, 0xf8, 0x301, 0x0, 0x17f, 0x307, 0x0, 0x1b7, 0x30c, 0x0, 0x292, 0x30c, 0x0, 0x2b9, 0x0, 0x300, 0x0, 0x301, 0x0, 0x308, 0x301, 0x0, 0x313, 0x0, 0x391, 0x300, 0x0, 0x391, 0x301, 0x0, 0x391, 0x304, 0x0, 0x391, 0x306, 0x0, 0x391, 0x313, 0x0, 0x391, 0x313, 0x300, 0x0, 0x391, 0x313, 0x300, 0x345, 0x0, 0x391, 0x313, 0x301, 0x0, 0x391, 0x313, 0x301, 0x345, 0x0, 0x391, 0x313, 0x342, 0x0, 0x391, 0x313, 0x342, 0x345, 0x0, 0x391, 0x313, 0x345, 0x0, 0x391, 0x314, 0x0, 0x391, 0x314, 0x300, 0x0, 0x391, 0x314, 0x300, 0x345, 0x0, 0x391, 0x314, 0x301, 0x0, 0x391, 0x314, 0x301, 0x345, 0x0, 0x391, 0x314, 0x342, 0x0, 0x391, 0x314, 0x342, 0x345, 0x0, 0x391, 0x314, 0x345, 0x0, 0x391, 0x345, 0x0, 0x395, 0x300, 0x0, 0x395, 0x301, 0x0, 0x395, 0x313, 0x0, 0x395, 0x313, 0x300, 0x0, 0x395, 0x313, 0x301, 0x0, 0x395, 0x314, 0x0, 0x395, 0x314, 0x300, 0x0, 0x395, 0x314, 0x301, 0x0, 0x397, 0x300, 0x0, 0x397, 0x301, 0x0, 0x397, 0x313, 0x0, 0x397, 0x313, 0x300, 0x0, 0x397, 0x313, 0x300, 0x345, 0x0, 0x397, 0x313, 0x301, 0x0, 0x397, 0x313, 0x301, 0x345, 0x0, 0x397, 0x313, 0x342, 0x0, 0x397, 0x313, 0x342, 0x345, 0x0, 0x397, 0x313, 0x345, 0x0, 0x397, 0x314, 0x0, 0x397, 0x314, 0x300, 0x0, 0x397, 0x314, 0x300, 0x345, 0x0, 0x397, 0x314, 0x301, 0x0, 0x397, 0x314, 0x301, 0x345, 0x0, 0x397, 0x314, 0x342, 0x0, 0x397, 0x314, 0x342, 0x345, 0x0, 0x397, 0x314, 0x345, 0x0, 0x397, 0x345, 0x0, 0x399, 0x300, 0x0, 0x399, 0x301, 0x0, 0x399, 0x304, 0x0, 0x399, 0x306, 0x0, 0x399, 0x308, 0x0, 0x399, 0x313, 0x0, 0x399, 0x313, 0x300, 0x0, 0x399, 0x313, 0x301, 0x0, 0x399, 0x313, 0x342, 0x0, 0x399, 0x314, 0x0, 0x399, 0x314, 0x300, 0x0, 0x399, 0x314, 0x301, 0x0, 0x399, 0x314, 0x342, 0x0, 0x39f, 0x300, 0x0, 0x39f, 0x301, 0x0, 0x39f, 0x313, 0x0, 0x39f, 0x313, 0x300, 0x0, 0x39f, 0x313, 0x301, 0x0, 0x39f, 0x314, 0x0, 0x39f, 0x314, 0x300, 0x0, 0x39f, 0x314, 0x301, 0x0, 0x3a1, 0x314, 0x0, 0x3a5, 0x300, 0x0, 0x3a5, 0x301, 0x0, 0x3a5, 0x304, 0x0, 0x3a5, 0x306, 0x0, 0x3a5, 0x308, 0x0, 0x3a5, 0x314, 0x0, 0x3a5, 0x314, 0x300, 0x0, 0x3a5, 0x314, 0x301, 0x0, 0x3a5, 0x314, 0x342, 0x0, 0x3a9, 0x0, 0x3a9, 0x300, 0x0, 0x3a9, 0x301, 0x0, 0x3a9, 0x313, 0x0, 0x3a9, 0x313, 0x300, 0x0, 0x3a9, 0x313, 0x300, 0x345, 0x0, 0x3a9, 0x313, 0x301, 0x0, 0x3a9, 0x313, 0x301, 0x345, 0x0, 0x3a9, 0x313, 0x342, 0x0, 0x3a9, 0x313, 0x342, 0x345, 0x0, 0x3a9, 0x313, 0x345, 0x0, 0x3a9, 0x314, 0x0, 0x3a9, 0x314, 0x300, 0x0, 0x3a9, 0x314, 0x300, 0x345, 0x0, 0x3a9, 0x314, 0x301, 0x0, 0x3a9, 0x314, 0x301, 0x345, 0x0, 0x3a9, 0x314, 0x342, 0x0, 0x3a9, 0x314, 0x342, 0x345, 0x0, 0x3a9, 0x314, 0x345, 0x0, 0x3a9, 0x345, 0x0, 0x3b1, 0x300, 0x0, 0x3b1, 0x300, 0x345, 0x0, 0x3b1, 0x301, 0x0, 0x3b1, 0x301, 0x345, 0x0, 0x3b1, 0x304, 0x0, 0x3b1, 0x306, 0x0, 0x3b1, 0x313, 0x0, 0x3b1, 0x313, 0x300, 0x0, 0x3b1, 0x313, 0x300, 0x345, 0x0, 0x3b1, 0x313, 0x301, 0x0, 0x3b1, 0x313, 0x301, 0x345, 0x0, 0x3b1, 0x313, 0x342, 0x0, 0x3b1, 0x313, 0x342, 0x345, 0x0, 0x3b1, 0x313, 0x345, 0x0, 0x3b1, 0x314, 0x0, 0x3b1, 0x314, 0x300, 0x0, 0x3b1, 0x314, 0x300, 0x345, 0x0, 0x3b1, 0x314, 0x301, 0x0, 0x3b1, 0x314, 0x301, 0x345, 0x0, 0x3b1, 0x314, 0x342, 0x0, 0x3b1, 0x314, 0x342, 0x345, 0x0, 0x3b1, 0x314, 0x345, 0x0, 0x3b1, 0x342, 0x0, 0x3b1, 0x342, 0x345, 0x0, 0x3b1, 0x345, 0x0, 0x3b5, 0x300, 0x0, 0x3b5, 0x301, 0x0, 0x3b5, 0x313, 0x0, 0x3b5, 0x313, 0x300, 0x0, 0x3b5, 0x313, 0x301, 0x0, 0x3b5, 0x314, 0x0, 0x3b5, 0x314, 0x300, 0x0, 0x3b5, 0x314, 0x301, 0x0, 0x3b7, 0x300, 0x0, 0x3b7, 0x300, 0x345, 0x0, 0x3b7, 0x301, 0x0, 0x3b7, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x0, 0x3b7, 0x313, 0x300, 0x0, 0x3b7, 0x313, 0x300, 0x345, 0x0, 0x3b7, 0x313, 0x301, 0x0, 0x3b7, 0x313, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x342, 0x0, 0x3b7, 0x313, 0x342, 0x345, 0x0, 0x3b7, 0x313, 0x345, 0x0, 0x3b7, 0x314, 0x0, 0x3b7, 0x314, 0x300, 0x0, 0x3b7, 0x314, 0x300, 0x345, 0x0, 0x3b7, 0x314, 0x301, 0x0, 0x3b7, 0x314, 0x301, 0x345, 0x0, 0x3b7, 0x314, 0x342, 0x0, 0x3b7, 0x314, 0x342, 0x345, 0x0, 0x3b7, 0x314, 0x345, 0x0, 0x3b7, 0x342, 0x0, 0x3b7, 0x342, 0x345, 0x0, 0x3b7, 0x345, 0x0, 0x3b9, 0x0, 0x3b9, 0x300, 0x0, 0x3b9, 0x301, 0x0, 0x3b9, 0x304, 0x0, 0x3b9, 0x306, 0x0, 0x3b9, 0x308, 0x0, 0x3b9, 0x308, 0x300, 0x0, 0x3b9, 0x308, 0x301, 0x0, 0x3b9, 0x308, 0x342, 0x0, 0x3b9, 0x313, 0x0, 0x3b9, 0x313, 0x300, 0x0, 0x3b9, 0x313, 0x301, 0x0, 0x3b9, 0x313, 0x342, 0x0, 0x3b9, 0x314, 0x0, 0x3b9, 0x314, 0x300, 0x0, 0x3b9, 0x314, 0x301, 0x0, 0x3b9, 0x314, 0x342, 0x0, 0x3b9, 0x342, 0x0, 0x3bf, 0x300, 0x0, 0x3bf, 0x301, 0x0, 0x3bf, 0x313, 0x0, 0x3bf, 0x313, 0x300, 0x0, 0x3bf, 0x313, 0x301, 0x0, 0x3bf, 0x314, 0x0, 0x3bf, 0x314, 0x300, 0x0, 0x3bf, 0x314, 0x301, 0x0, 0x3c1, 0x313, 0x0, 0x3c1, 0x314, 0x0, 0x3c5, 0x300, 0x0, 0x3c5, 0x301, 0x0, 0x3c5, 0x304, 0x0, 0x3c5, 0x306, 0x0, 0x3c5, 0x308, 0x0, 0x3c5, 0x308, 0x300, 0x0, 0x3c5, 0x308, 0x301, 0x0, 0x3c5, 0x308, 0x342, 0x0, 0x3c5, 0x313, 0x0, 0x3c5, 0x313, 0x300, 0x0, 0x3c5, 0x313, 0x301, 0x0, 0x3c5, 0x313, 0x342, 0x0, 0x3c5, 0x314, 0x0, 0x3c5, 0x314, 0x300, 0x0, 0x3c5, 0x314, 0x301, 0x0, 0x3c5, 0x314, 0x342, 0x0, 0x3c5, 0x342, 0x0, 0x3c9, 0x300, 0x0, 0x3c9, 0x300, 0x345, 0x0, 0x3c9, 0x301, 0x0, 0x3c9, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x0, 0x3c9, 0x313, 0x300, 0x0, 0x3c9, 0x313, 0x300, 0x345, 0x0, 0x3c9, 0x313, 0x301, 0x0, 0x3c9, 0x313, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x342, 0x0, 0x3c9, 0x313, 0x342, 0x345, 0x0, 0x3c9, 0x313, 0x345, 0x0, 0x3c9, 0x314, 0x0, 0x3c9, 0x314, 0x300, 0x0, 0x3c9, 0x314, 0x300, 0x345, 0x0, 0x3c9, 0x314, 0x301, 0x0, 0x3c9, 0x314, 0x301, 0x345, 0x0, 0x3c9, 0x314, 0x342, 0x0, 0x3c9, 0x314, 0x342, 0x345, 0x0, 0x3c9, 0x314, 0x345, 0x0, 0x3c9, 0x342, 0x0, 0x3c9, 0x342, 0x345, 0x0, 0x3c9, 0x345, 0x0, 0x3d2, 0x301, 0x0, 0x3d2, 0x308, 0x0, 0x406, 0x308, 0x0, 0x410, 0x306, 0x0, 0x410, 0x308, 0x0, 0x413, 0x301, 0x0, 0x415, 0x300, 0x0, 0x415, 0x306, 0x0, 0x415, 0x308, 0x0, 0x416, 0x306, 0x0, 0x416, 0x308, 0x0, 0x417, 0x308, 0x0, 0x418, 0x300, 0x0, 0x418, 0x304, 0x0, 0x418, 0x306, 0x0, 0x418, 0x308, 0x0, 0x41a, 0x301, 0x0, 0x41e, 0x308, 0x0, 0x423, 0x304, 0x0, 0x423, 0x306, 0x0, 0x423, 0x308, 0x0, 0x423, 0x30b, 0x0, 0x427, 0x308, 0x0, 0x42b, 0x308, 0x0, 0x42d, 0x308, 0x0, 0x430, 0x306, 0x0, 0x430, 0x308, 0x0, 0x433, 0x301, 0x0, 0x435, 0x300, 0x0, 0x435, 0x306, 0x0, 0x435, 0x308, 0x0, 0x436, 0x306, 0x0, 0x436, 0x308, 0x0, 0x437, 0x308, 0x0, 0x438, 0x300, 0x0, 0x438, 0x304, 0x0, 0x438, 0x306, 0x0, 0x438, 0x308, 0x0, 0x43a, 0x301, 0x0, 0x43e, 0x308, 0x0, 0x443, 0x304, 0x0, 0x443, 0x306, 0x0, 0x443, 0x308, 0x0, 0x443, 0x30b, 0x0, 0x447, 0x308, 0x0, 0x44b, 0x308, 0x0, 0x44d, 0x308, 0x0, 0x456, 0x308, 0x0, 0x474, 0x30f, 0x0, 0x475, 0x30f, 0x0, 0x4d8, 0x308, 0x0, 0x4d9, 0x308, 0x0, 0x4e8, 0x308, 0x0, 0x4e9, 0x308, 0x0, 0x5d0, 0x5b7, 0x0, 0x5d0, 0x5b8, 0x0, 0x5d0, 0x5bc, 0x0, 0x5d1, 0x5bc, 0x0, 0x5d1, 0x5bf, 0x0, 0x5d2, 0x5bc, 0x0, 0x5d3, 0x5bc, 0x0, 0x5d4, 0x5bc, 0x0, 0x5d5, 0x5b9, 0x0, 0x5d5, 0x5bc, 0x0, 0x5d6, 0x5bc, 0x0, 0x5d8, 0x5bc, 0x0, 0x5d9, 0x5b4, 0x0, 0x5d9, 0x5bc, 0x0, 0x5da, 0x5bc, 0x0, 0x5db, 0x5bc, 0x0, 0x5db, 0x5bf, 0x0, 0x5dc, 0x5bc, 0x0, 0x5de, 0x5bc, 0x0, 0x5e0, 0x5bc, 0x0, 0x5e1, 0x5bc, 0x0, 0x5e3, 0x5bc, 0x0, 0x5e4, 0x5bc, 0x0, 0x5e4, 0x5bf, 0x0, 0x5e6, 0x5bc, 0x0, 0x5e7, 0x5bc, 0x0, 0x5e8, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x5c1, 0x0, 0x5e9, 0x5bc, 0x5c2, 0x0, 0x5e9, 0x5c1, 0x0, 0x5e9, 0x5c2, 0x0, 0x5ea, 0x5bc, 0x0, 0x5f2, 0x5b7, 0x0, 0x627, 0x653, 0x0, 0x627, 0x654, 0x0, 0x627, 0x655, 0x0, 0x648, 0x654, 0x0, 0x64a, 0x654, 0x0, 0x6c1, 0x654, 0x0, 0x6d2, 0x654, 0x0, 0x6d5, 0x654, 0x0, 0x915, 0x93c, 0x0, 0x916, 0x93c, 0x0, 0x917, 0x93c, 0x0, 0x91c, 0x93c, 0x0, 0x921, 0x93c, 0x0, 0x922, 0x93c, 0x0, 0x928, 0x93c, 0x0, 0x92b, 0x93c, 0x0, 0x92f, 0x93c, 0x0, 0x930, 0x93c, 0x0, 0x933, 0x93c, 0x0, 0x9a1, 0x9bc, 0x0, 0x9a2, 0x9bc, 0x0, 0x9af, 0x9bc, 0x0, 0x9c7, 0x9be, 0x0, 0x9c7, 0x9d7, 0x0, 0xa16, 0xa3c, 0x0, 0xa17, 0xa3c, 0x0, 0xa1c, 0xa3c, 0x0, 0xa2b, 0xa3c, 0x0, 0xa32, 0xa3c, 0x0, 0xa38, 0xa3c, 0x0, 0xb21, 0xb3c, 0x0, 0xb22, 0xb3c, 0x0, 0xb47, 0xb3e, 0x0, 0xb47, 0xb56, 0x0, 0xb47, 0xb57, 0x0, 0xb92, 0xbd7, 0x0, 0xbc6, 0xbbe, 0x0, 0xbc6, 0xbd7, 0x0, 0xbc7, 0xbbe, 0x0, 0xc46, 0xc56, 0x0, 0xcbf, 0xcd5, 0x0, 0xcc6, 0xcc2, 0x0, 0xcc6, 0xcc2, 0xcd5, 0x0, 0xcc6, 0xcd5, 0x0, 0xcc6, 0xcd6, 0x0, 0xd46, 0xd3e, 0x0, 0xd46, 0xd57, 0x0, 0xd47, 0xd3e, 0x0, 0xdd9, 0xdca, 0x0, 0xdd9, 0xdcf, 0x0, 0xdd9, 0xdcf, 0xdca, 0x0, 0xdd9, 0xddf, 0x0, 0xf40, 0xfb5, 0x0, 0xf42, 0xfb7, 0x0, 0xf4c, 0xfb7, 0x0, 0xf51, 0xfb7, 0x0, 0xf56, 0xfb7, 0x0, 0xf5b, 0xfb7, 0x0, 0xf71, 0xf72, 0x0, 0xf71, 0xf74, 0x0, 0xf71, 0xf80, 0x0, 0xf90, 0xfb5, 0x0, 0xf92, 0xfb7, 0x0, 0xf9c, 0xfb7, 0x0, 0xfa1, 0xfb7, 0x0, 0xfa6, 0xfb7, 0x0, 0xfab, 0xfb7, 0x0, 0xfb2, 0xf80, 0x0, 0xfb3, 0xf80, 0x0, 0x1025, 0x102e, 0x0, 0x1b05, 0x1b35, 0x0, 0x1b07, 0x1b35, 0x0, 0x1b09, 0x1b35, 0x0, 0x1b0b, 0x1b35, 0x0, 0x1b0d, 0x1b35, 0x0, 0x1b11, 0x1b35, 0x0, 0x1b3a, 0x1b35, 0x0, 0x1b3c, 0x1b35, 0x0, 0x1b3e, 0x1b35, 0x0, 0x1b3f, 0x1b35, 0x0, 0x1b42, 0x1b35, 0x0, 0x1fbf, 0x300, 0x0, 0x1fbf, 0x301, 0x0, 0x1fbf, 0x342, 0x0, 0x1ffe, 0x300, 0x0, 0x1ffe, 0x301, 0x0, 0x1ffe, 0x342, 0x0, 0x2002, 0x0, 0x2003, 0x0, 0x2190, 0x338, 0x0, 0x2192, 0x338, 0x0, 0x2194, 0x338, 0x0, 0x21d0, 0x338, 0x0, 0x21d2, 0x338, 0x0, 0x21d4, 0x338, 0x0, 0x2203, 0x338, 0x0, 0x2208, 0x338, 0x0, 0x220b, 0x338, 0x0, 0x2223, 0x338, 0x0, 0x2225, 0x338, 0x0, 0x223c, 0x338, 0x0, 0x2243, 0x338, 0x0, 0x2245, 0x338, 0x0, 0x2248, 0x338, 0x0, 0x224d, 0x338, 0x0, 0x2261, 0x338, 0x0, 0x2264, 0x338, 0x0, 0x2265, 0x338, 0x0, 0x2272, 0x338, 0x0, 0x2273, 0x338, 0x0, 0x2276, 0x338, 0x0, 0x2277, 0x338, 0x0, 0x227a, 0x338, 0x0, 0x227b, 0x338, 0x0, 0x227c, 0x338, 0x0, 0x227d, 0x338, 0x0, 0x2282, 0x338, 0x0, 0x2283, 0x338, 0x0, 0x2286, 0x338, 0x0, 0x2287, 0x338, 0x0, 0x2291, 0x338, 0x0, 0x2292, 0x338, 0x0, 0x22a2, 0x338, 0x0, 0x22a8, 0x338, 0x0, 0x22a9, 0x338, 0x0, 0x22ab, 0x338, 0x0, 0x22b2, 0x338, 0x0, 0x22b3, 0x338, 0x0, 0x22b4, 0x338, 0x0, 0x22b5, 0x338, 0x0, 0x2add, 0x338, 0x0, 0x3008, 0x0, 0x3009, 0x0, 0x3046, 0x3099, 0x0, 0x304b, 0x3099, 0x0, 0x304d, 0x3099, 0x0, 0x304f, 0x3099, 0x0, 0x3051, 0x3099, 0x0, 0x3053, 0x3099, 0x0, 0x3055, 0x3099, 0x0, 0x3057, 0x3099, 0x0, 0x3059, 0x3099, 0x0, 0x305b, 0x3099, 0x0, 0x305d, 0x3099, 0x0, 0x305f, 0x3099, 0x0, 0x3061, 0x3099, 0x0, 0x3064, 0x3099, 0x0, 0x3066, 0x3099, 0x0, 0x3068, 0x3099, 0x0, 0x306f, 0x3099, 0x0, 0x306f, 0x309a, 0x0, 0x3072, 0x3099, 0x0, 0x3072, 0x309a, 0x0, 0x3075, 0x3099, 0x0, 0x3075, 0x309a, 0x0, 0x3078, 0x3099, 0x0, 0x3078, 0x309a, 0x0, 0x307b, 0x3099, 0x0, 0x307b, 0x309a, 0x0, 0x309d, 0x3099, 0x0, 0x30a6, 0x3099, 0x0, 0x30ab, 0x3099, 0x0, 0x30ad, 0x3099, 0x0, 0x30af, 0x3099, 0x0, 0x30b1, 0x3099, 0x0, 0x30b3, 0x3099, 0x0, 0x30b5, 0x3099, 0x0, 0x30b7, 0x3099, 0x0, 0x30b9, 0x3099, 0x0, 0x30bb, 0x3099, 0x0, 0x30bd, 0x3099, 0x0, 0x30bf, 0x3099, 0x0, 0x30c1, 0x3099, 0x0, 0x30c4, 0x3099, 0x0, 0x30c6, 0x3099, 0x0, 0x30c8, 0x3099, 0x0, 0x30cf, 0x3099, 0x0, 0x30cf, 0x309a, 0x0, 0x30d2, 0x3099, 0x0, 0x30d2, 0x309a, 0x0, 0x30d5, 0x3099, 0x0, 0x30d5, 0x309a, 0x0, 0x30d8, 0x3099, 0x0, 0x30d8, 0x309a, 0x0, 0x30db, 0x3099, 0x0, 0x30db, 0x309a, 0x0, 0x30ef, 0x3099, 0x0, 0x30f0, 0x3099, 0x0, 0x30f1, 0x3099, 0x0, 0x30f2, 0x3099, 0x0, 0x30fd, 0x3099, 0x0, 0x349e, 0x0, 0x34b9, 0x0, 0x34bb, 0x0, 0x34df, 0x0, 0x3515, 0x0, 0x36ee, 0x0, 0x36fc, 0x0, 0x3781, 0x0, 0x382f, 0x0, 0x3862, 0x0, 0x387c, 0x0, 0x38c7, 0x0, 0x38e3, 0x0, 0x391c, 0x0, 0x393a, 0x0, 0x3a2e, 0x0, 0x3a6c, 0x0, 0x3ae4, 0x0, 0x3b08, 0x0, 0x3b19, 0x0, 0x3b49, 0x0, 0x3b9d, 0x0, 0x3c18, 0x0, 0x3c4e, 0x0, 0x3d33, 0x0, 0x3d96, 0x0, 0x3eac, 0x0, 0x3eb8, 0x0, 0x3f1b, 0x0, 0x3ffc, 0x0, 0x4008, 0x0, 0x4018, 0x0, 0x4039, 0x0, 0x4046, 0x0, 0x4096, 0x0, 0x40e3, 0x0, 0x412f, 0x0, 0x4202, 0x0, 0x4227, 0x0, 0x42a0, 0x0, 0x4301, 0x0, 0x4334, 0x0, 0x4359, 0x0, 0x43d5, 0x0, 0x43d9, 0x0, 0x440b, 0x0, 0x446b, 0x0, 0x452b, 0x0, 0x455d, 0x0, 0x4561, 0x0, 0x456b, 0x0, 0x45d7, 0x0, 0x45f9, 0x0, 0x4635, 0x0, 0x46be, 0x0, 0x46c7, 0x0, 0x4995, 0x0, 0x49e6, 0x0, 0x4a6e, 0x0, 0x4a76, 0x0, 0x4ab2, 0x0, 0x4b33, 0x0, 0x4bce, 0x0, 0x4cce, 0x0, 0x4ced, 0x0, 0x4cf8, 0x0, 0x4d56, 0x0, 0x4e0d, 0x0, 0x4e26, 0x0, 0x4e32, 0x0, 0x4e38, 0x0, 0x4e39, 0x0, 0x4e3d, 0x0, 0x4e41, 0x0, 0x4e82, 0x0, 0x4e86, 0x0, 0x4eae, 0x0, 0x4ec0, 0x0, 0x4ecc, 0x0, 0x4ee4, 0x0, 0x4f60, 0x0, 0x4f80, 0x0, 0x4f86, 0x0, 0x4f8b, 0x0, 0x4fae, 0x0, 0x4fbb, 0x0, 0x4fbf, 0x0, 0x5002, 0x0, 0x502b, 0x0, 0x507a, 0x0, 0x5099, 0x0, 0x50cf, 0x0, 0x50da, 0x0, 0x50e7, 0x0, 0x5140, 0x0, 0x5145, 0x0, 0x514d, 0x0, 0x5154, 0x0, 0x5164, 0x0, 0x5167, 0x0, 0x5168, 0x0, 0x5169, 0x0, 0x516d, 0x0, 0x5177, 0x0, 0x5180, 0x0, 0x518d, 0x0, 0x5192, 0x0, 0x5195, 0x0, 0x5197, 0x0, 0x51a4, 0x0, 0x51ac, 0x0, 0x51b5, 0x0, 0x51b7, 0x0, 0x51c9, 0x0, 0x51cc, 0x0, 0x51dc, 0x0, 0x51de, 0x0, 0x51f5, 0x0, 0x5203, 0x0, 0x5207, 0x0, 0x5217, 0x0, 0x5229, 0x0, 0x523a, 0x0, 0x523b, 0x0, 0x5246, 0x0, 0x5272, 0x0, 0x5277, 0x0, 0x5289, 0x0, 0x529b, 0x0, 0x52a3, 0x0, 0x52b3, 0x0, 0x52c7, 0x0, 0x52c9, 0x0, 0x52d2, 0x0, 0x52de, 0x0, 0x52e4, 0x0, 0x52f5, 0x0, 0x52fa, 0x0, 0x5305, 0x0, 0x5306, 0x0, 0x5317, 0x0, 0x533f, 0x0, 0x5349, 0x0, 0x5351, 0x0, 0x535a, 0x0, 0x5373, 0x0, 0x5375, 0x0, 0x537d, 0x0, 0x537f, 0x0, 0x53c3, 0x0, 0x53ca, 0x0, 0x53df, 0x0, 0x53e5, 0x0, 0x53eb, 0x0, 0x53f1, 0x0, 0x5406, 0x0, 0x540f, 0x0, 0x541d, 0x0, 0x5438, 0x0, 0x5442, 0x0, 0x5448, 0x0, 0x5468, 0x0, 0x549e, 0x0, 0x54a2, 0x0, 0x54bd, 0x0, 0x54f6, 0x0, 0x5510, 0x0, 0x5553, 0x0, 0x5555, 0x0, 0x5563, 0x0, 0x5584, 0x0, 0x5587, 0x0, 0x5599, 0x0, 0x559d, 0x0, 0x55ab, 0x0, 0x55b3, 0x0, 0x55c0, 0x0, 0x55c2, 0x0, 0x55e2, 0x0, 0x5606, 0x0, 0x5651, 0x0, 0x5668, 0x0, 0x5674, 0x0, 0x56f9, 0x0, 0x5716, 0x0, 0x5717, 0x0, 0x578b, 0x0, 0x57ce, 0x0, 0x57f4, 0x0, 0x580d, 0x0, 0x5831, 0x0, 0x5832, 0x0, 0x5840, 0x0, 0x585a, 0x0, 0x585e, 0x0, 0x58a8, 0x0, 0x58ac, 0x0, 0x58b3, 0x0, 0x58d8, 0x0, 0x58df, 0x0, 0x58ee, 0x0, 0x58f2, 0x0, 0x58f7, 0x0, 0x5906, 0x0, 0x591a, 0x0, 0x5922, 0x0, 0x5944, 0x0, 0x5948, 0x0, 0x5951, 0x0, 0x5954, 0x0, 0x5962, 0x0, 0x5973, 0x0, 0x59d8, 0x0, 0x59ec, 0x0, 0x5a1b, 0x0, 0x5a27, 0x0, 0x5a62, 0x0, 0x5a66, 0x0, 0x5ab5, 0x0, 0x5b08, 0x0, 0x5b28, 0x0, 0x5b3e, 0x0, 0x5b85, 0x0, 0x5bc3, 0x0, 0x5bd8, 0x0, 0x5be7, 0x0, 0x5bee, 0x0, 0x5bf3, 0x0, 0x5bff, 0x0, 0x5c06, 0x0, 0x5c22, 0x0, 0x5c3f, 0x0, 0x5c60, 0x0, 0x5c62, 0x0, 0x5c64, 0x0, 0x5c65, 0x0, 0x5c6e, 0x0, 0x5c8d, 0x0, 0x5cc0, 0x0, 0x5d19, 0x0, 0x5d43, 0x0, 0x5d50, 0x0, 0x5d6b, 0x0, 0x5d6e, 0x0, 0x5d7c, 0x0, 0x5db2, 0x0, 0x5dba, 0x0, 0x5de1, 0x0, 0x5de2, 0x0, 0x5dfd, 0x0, 0x5e28, 0x0, 0x5e3d, 0x0, 0x5e69, 0x0, 0x5e74, 0x0, 0x5ea6, 0x0, 0x5eb0, 0x0, 0x5eb3, 0x0, 0x5eb6, 0x0, 0x5ec9, 0x0, 0x5eca, 0x0, 0x5ed2, 0x0, 0x5ed3, 0x0, 0x5ed9, 0x0, 0x5eec, 0x0, 0x5efe, 0x0, 0x5f04, 0x0, 0x5f22, 0x0, 0x5f53, 0x0, 0x5f62, 0x0, 0x5f69, 0x0, 0x5f6b, 0x0, 0x5f8b, 0x0, 0x5f9a, 0x0, 0x5fa9, 0x0, 0x5fad, 0x0, 0x5fcd, 0x0, 0x5fd7, 0x0, 0x5ff5, 0x0, 0x5ff9, 0x0, 0x6012, 0x0, 0x601c, 0x0, 0x6075, 0x0, 0x6081, 0x0, 0x6094, 0x0, 0x60c7, 0x0, 0x60d8, 0x0, 0x60e1, 0x0, 0x6108, 0x0, 0x6144, 0x0, 0x6148, 0x0, 0x614c, 0x0, 0x614e, 0x0, 0x6160, 0x0, 0x6168, 0x0, 0x617a, 0x0, 0x618e, 0x0, 0x6190, 0x0, 0x61a4, 0x0, 0x61af, 0x0, 0x61b2, 0x0, 0x61de, 0x0, 0x61f2, 0x0, 0x61f6, 0x0, 0x6200, 0x0, 0x6210, 0x0, 0x621b, 0x0, 0x622e, 0x0, 0x6234, 0x0, 0x625d, 0x0, 0x62b1, 0x0, 0x62c9, 0x0, 0x62cf, 0x0, 0x62d3, 0x0, 0x62d4, 0x0, 0x62fc, 0x0, 0x62fe, 0x0, 0x633d, 0x0, 0x6350, 0x0, 0x6368, 0x0, 0x637b, 0x0, 0x6383, 0x0, 0x63a0, 0x0, 0x63a9, 0x0, 0x63c4, 0x0, 0x63c5, 0x0, 0x63e4, 0x0, 0x641c, 0x0, 0x6422, 0x0, 0x6452, 0x0, 0x6469, 0x0, 0x6477, 0x0, 0x647e, 0x0, 0x649a, 0x0, 0x649d, 0x0, 0x64c4, 0x0, 0x654f, 0x0, 0x6556, 0x0, 0x656c, 0x0, 0x6578, 0x0, 0x6599, 0x0, 0x65c5, 0x0, 0x65e2, 0x0, 0x65e3, 0x0, 0x6613, 0x0, 0x6649, 0x0, 0x6674, 0x0, 0x6688, 0x0, 0x6691, 0x0, 0x669c, 0x0, 0x66b4, 0x0, 0x66c6, 0x0, 0x66f4, 0x0, 0x66f8, 0x0, 0x6700, 0x0, 0x6717, 0x0, 0x671b, 0x0, 0x6721, 0x0, 0x674e, 0x0, 0x6753, 0x0, 0x6756, 0x0, 0x675e, 0x0, 0x677b, 0x0, 0x6785, 0x0, 0x6797, 0x0, 0x67f3, 0x0, 0x67fa, 0x0, 0x6817, 0x0, 0x681f, 0x0, 0x6852, 0x0, 0x6881, 0x0, 0x6885, 0x0, 0x688e, 0x0, 0x68a8, 0x0, 0x6914, 0x0, 0x6942, 0x0, 0x69a3, 0x0, 0x69ea, 0x0, 0x6a02, 0x0, 0x6a13, 0x0, 0x6aa8, 0x0, 0x6ad3, 0x0, 0x6adb, 0x0, 0x6b04, 0x0, 0x6b21, 0x0, 0x6b54, 0x0, 0x6b72, 0x0, 0x6b77, 0x0, 0x6b79, 0x0, 0x6b9f, 0x0, 0x6bae, 0x0, 0x6bba, 0x0, 0x6bbb, 0x0, 0x6c4e, 0x0, 0x6c67, 0x0, 0x6c88, 0x0, 0x6cbf, 0x0, 0x6ccc, 0x0, 0x6ccd, 0x0, 0x6ce5, 0x0, 0x6d16, 0x0, 0x6d1b, 0x0, 0x6d1e, 0x0, 0x6d34, 0x0, 0x6d3e, 0x0, 0x6d41, 0x0, 0x6d69, 0x0, 0x6d6a, 0x0, 0x6d77, 0x0, 0x6d78, 0x0, 0x6d85, 0x0, 0x6dcb, 0x0, 0x6dda, 0x0, 0x6dea, 0x0, 0x6df9, 0x0, 0x6e1a, 0x0, 0x6e2f, 0x0, 0x6e6e, 0x0, 0x6e9c, 0x0, 0x6eba, 0x0, 0x6ec7, 0x0, 0x6ecb, 0x0, 0x6ed1, 0x0, 0x6edb, 0x0, 0x6f0f, 0x0, 0x6f22, 0x0, 0x6f23, 0x0, 0x6f6e, 0x0, 0x6fc6, 0x0, 0x6feb, 0x0, 0x6ffe, 0x0, 0x701b, 0x0, 0x701e, 0x0, 0x7039, 0x0, 0x704a, 0x0, 0x7070, 0x0, 0x7077, 0x0, 0x707d, 0x0, 0x7099, 0x0, 0x70ad, 0x0, 0x70c8, 0x0, 0x70d9, 0x0, 0x7145, 0x0, 0x7149, 0x0, 0x716e, 0x0, 0x719c, 0x0, 0x71ce, 0x0, 0x71d0, 0x0, 0x7210, 0x0, 0x721b, 0x0, 0x7228, 0x0, 0x722b, 0x0, 0x7235, 0x0, 0x7250, 0x0, 0x7262, 0x0, 0x7280, 0x0, 0x7295, 0x0, 0x72af, 0x0, 0x72c0, 0x0, 0x72fc, 0x0, 0x732a, 0x0, 0x7375, 0x0, 0x737a, 0x0, 0x7387, 0x0, 0x738b, 0x0, 0x73a5, 0x0, 0x73b2, 0x0, 0x73de, 0x0, 0x7406, 0x0, 0x7409, 0x0, 0x7422, 0x0, 0x7447, 0x0, 0x745c, 0x0, 0x7469, 0x0, 0x7471, 0x0, 0x7485, 0x0, 0x7489, 0x0, 0x7498, 0x0, 0x74ca, 0x0, 0x7506, 0x0, 0x7524, 0x0, 0x753b, 0x0, 0x753e, 0x0, 0x7559, 0x0, 0x7565, 0x0, 0x7570, 0x0, 0x75e2, 0x0, 0x7610, 0x0, 0x761d, 0x0, 0x761f, 0x0, 0x7642, 0x0, 0x7669, 0x0, 0x76ca, 0x0, 0x76db, 0x0, 0x76e7, 0x0, 0x76f4, 0x0, 0x7701, 0x0, 0x771e, 0x0, 0x771f, 0x0, 0x7740, 0x0, 0x774a, 0x0, 0x778b, 0x0, 0x77a7, 0x0, 0x784e, 0x0, 0x786b, 0x0, 0x788c, 0x0, 0x7891, 0x0, 0x78ca, 0x0, 0x78cc, 0x0, 0x78fb, 0x0, 0x792a, 0x0, 0x793c, 0x0, 0x793e, 0x0, 0x7948, 0x0, 0x7949, 0x0, 0x7950, 0x0, 0x7956, 0x0, 0x795d, 0x0, 0x795e, 0x0, 0x7965, 0x0, 0x797f, 0x0, 0x798d, 0x0, 0x798e, 0x0, 0x798f, 0x0, 0x79ae, 0x0, 0x79ca, 0x0, 0x79eb, 0x0, 0x7a1c, 0x0, 0x7a40, 0x0, 0x7a4a, 0x0, 0x7a4f, 0x0, 0x7a81, 0x0, 0x7ab1, 0x0, 0x7acb, 0x0, 0x7aee, 0x0, 0x7b20, 0x0, 0x7bc0, 0x0, 0x7bc6, 0x0, 0x7bc9, 0x0, 0x7c3e, 0x0, 0x7c60, 0x0, 0x7c7b, 0x0, 0x7c92, 0x0, 0x7cbe, 0x0, 0x7cd2, 0x0, 0x7cd6, 0x0, 0x7ce3, 0x0, 0x7ce7, 0x0, 0x7ce8, 0x0, 0x7d00, 0x0, 0x7d10, 0x0, 0x7d22, 0x0, 0x7d2f, 0x0, 0x7d5b, 0x0, 0x7d63, 0x0, 0x7da0, 0x0, 0x7dbe, 0x0, 0x7dc7, 0x0, 0x7df4, 0x0, 0x7e02, 0x0, 0x7e09, 0x0, 0x7e37, 0x0, 0x7e41, 0x0, 0x7e45, 0x0, 0x7f3e, 0x0, 0x7f72, 0x0, 0x7f79, 0x0, 0x7f7a, 0x0, 0x7f85, 0x0, 0x7f95, 0x0, 0x7f9a, 0x0, 0x7fbd, 0x0, 0x7ffa, 0x0, 0x8001, 0x0, 0x8005, 0x0, 0x8046, 0x0, 0x8060, 0x0, 0x806f, 0x0, 0x8070, 0x0, 0x807e, 0x0, 0x808b, 0x0, 0x80ad, 0x0, 0x80b2, 0x0, 0x8103, 0x0, 0x813e, 0x0, 0x81d8, 0x0, 0x81e8, 0x0, 0x81ed, 0x0, 0x8201, 0x0, 0x8204, 0x0, 0x8218, 0x0, 0x826f, 0x0, 0x8279, 0x0, 0x828b, 0x0, 0x8291, 0x0, 0x829d, 0x0, 0x82b1, 0x0, 0x82b3, 0x0, 0x82bd, 0x0, 0x82e5, 0x0, 0x82e6, 0x0, 0x831d, 0x0, 0x8323, 0x0, 0x8336, 0x0, 0x8352, 0x0, 0x8353, 0x0, 0x8363, 0x0, 0x83ad, 0x0, 0x83bd, 0x0, 0x83c9, 0x0, 0x83ca, 0x0, 0x83cc, 0x0, 0x83dc, 0x0, 0x83e7, 0x0, 0x83ef, 0x0, 0x83f1, 0x0, 0x843d, 0x0, 0x8449, 0x0, 0x8457, 0x0, 0x84ee, 0x0, 0x84f1, 0x0, 0x84f3, 0x0, 0x84fc, 0x0, 0x8516, 0x0, 0x8564, 0x0, 0x85cd, 0x0, 0x85fa, 0x0, 0x8606, 0x0, 0x8612, 0x0, 0x862d, 0x0, 0x863f, 0x0, 0x8650, 0x0, 0x865c, 0x0, 0x8667, 0x0, 0x8669, 0x0, 0x8688, 0x0, 0x86a9, 0x0, 0x86e2, 0x0, 0x870e, 0x0, 0x8728, 0x0, 0x876b, 0x0, 0x8779, 0x0, 0x8786, 0x0, 0x87ba, 0x0, 0x87e1, 0x0, 0x8801, 0x0, 0x881f, 0x0, 0x884c, 0x0, 0x8860, 0x0, 0x8863, 0x0, 0x88c2, 0x0, 0x88cf, 0x0, 0x88d7, 0x0, 0x88de, 0x0, 0x88e1, 0x0, 0x88f8, 0x0, 0x88fa, 0x0, 0x8910, 0x0, 0x8941, 0x0, 0x8964, 0x0, 0x8986, 0x0, 0x898b, 0x0, 0x8996, 0x0, 0x8aa0, 0x0, 0x8aaa, 0x0, 0x8abf, 0x0, 0x8acb, 0x0, 0x8ad2, 0x0, 0x8ad6, 0x0, 0x8aed, 0x0, 0x8af8, 0x0, 0x8afe, 0x0, 0x8b01, 0x0, 0x8b39, 0x0, 0x8b58, 0x0, 0x8b80, 0x0, 0x8b8a, 0x0, 0x8c48, 0x0, 0x8c55, 0x0, 0x8cab, 0x0, 0x8cc1, 0x0, 0x8cc2, 0x0, 0x8cc8, 0x0, 0x8cd3, 0x0, 0x8d08, 0x0, 0x8d1b, 0x0, 0x8d77, 0x0, 0x8dbc, 0x0, 0x8dcb, 0x0, 0x8def, 0x0, 0x8df0, 0x0, 0x8eca, 0x0, 0x8ed4, 0x0, 0x8f26, 0x0, 0x8f2a, 0x0, 0x8f38, 0x0, 0x8f3b, 0x0, 0x8f62, 0x0, 0x8f9e, 0x0, 0x8fb0, 0x0, 0x8fb6, 0x0, 0x9023, 0x0, 0x9038, 0x0, 0x9072, 0x0, 0x907c, 0x0, 0x908f, 0x0, 0x9094, 0x0, 0x90ce, 0x0, 0x90de, 0x0, 0x90f1, 0x0, 0x90fd, 0x0, 0x9111, 0x0, 0x911b, 0x0, 0x916a, 0x0, 0x9199, 0x0, 0x91b4, 0x0, 0x91cc, 0x0, 0x91cf, 0x0, 0x91d1, 0x0, 0x9234, 0x0, 0x9238, 0x0, 0x9276, 0x0, 0x927c, 0x0, 0x92d7, 0x0, 0x92d8, 0x0, 0x9304, 0x0, 0x934a, 0x0, 0x93f9, 0x0, 0x9415, 0x0, 0x958b, 0x0, 0x95ad, 0x0, 0x95b7, 0x0, 0x962e, 0x0, 0x964b, 0x0, 0x964d, 0x0, 0x9675, 0x0, 0x9678, 0x0, 0x967c, 0x0, 0x9686, 0x0, 0x96a3, 0x0, 0x96b7, 0x0, 0x96b8, 0x0, 0x96c3, 0x0, 0x96e2, 0x0, 0x96e3, 0x0, 0x96f6, 0x0, 0x96f7, 0x0, 0x9723, 0x0, 0x9732, 0x0, 0x9748, 0x0, 0x9756, 0x0, 0x97db, 0x0, 0x97e0, 0x0, 0x97ff, 0x0, 0x980b, 0x0, 0x9818, 0x0, 0x9829, 0x0, 0x983b, 0x0, 0x985e, 0x0, 0x98e2, 0x0, 0x98ef, 0x0, 0x98fc, 0x0, 0x9928, 0x0, 0x9929, 0x0, 0x99a7, 0x0, 0x99c2, 0x0, 0x99f1, 0x0, 0x99fe, 0x0, 0x9a6a, 0x0, 0x9b12, 0x0, 0x9b6f, 0x0, 0x9c40, 0x0, 0x9c57, 0x0, 0x9cfd, 0x0, 0x9d67, 0x0, 0x9db4, 0x0, 0x9dfa, 0x0, 0x9e1e, 0x0, 0x9e7f, 0x0, 0x9e97, 0x0, 0x9e9f, 0x0, 0x9ebb, 0x0, 0x9ece, 0x0, 0x9ef9, 0x0, 0x9efe, 0x0, 0x9f05, 0x0, 0x9f0f, 0x0, 0x9f16, 0x0, 0x9f3b, 0x0, 0x9f43, 0x0, 0x9f8d, 0x0, 0x9f8e, 0x0, 0x9f9c, 0x0, 0x11099, 0x110ba, 0x0, 0x1109b, 0x110ba, 0x0, 0x110a5, 0x110ba, 0x0, 0x11131, 0x11127, 0x0, 0x11132, 0x11127, 0x0, 0x11347, 0x1133e, 0x0, 0x11347, 0x11357, 0x0, 0x114b9, 0x114b0, 0x0, 0x114b9, 0x114ba, 0x0, 0x114b9, 0x114bd, 0x0, 0x115b8, 0x115af, 0x0, 0x115b9, 0x115af, 0x0, 0x11935, 0x11930, 0x0, 0x1d157, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x1d16e, 0x0, 0x1d158, 0x1d165, 0x1d16f, 0x0, 0x1d158, 0x1d165, 0x1d170, 0x0, 0x1d158, 0x1d165, 0x1d171, 0x0, 0x1d158, 0x1d165, 0x1d172, 0x0, 0x1d1b9, 0x1d165, 0x0, 0x1d1b9, 0x1d165, 0x1d16e, 0x0, 0x1d1b9, 0x1d165, 0x1d16f, 0x0, 0x1d1ba, 0x1d165, 0x0, 0x1d1ba, 0x1d165, 0x1d16e, 0x0, 0x1d1ba, 0x1d165, 0x1d16f, 0x0, 0x20122, 0x0, 0x2051c, 0x0, 0x20525, 0x0, 0x2054b, 0x0, 0x2063a, 0x0, 0x20804, 0x0, 0x208de, 0x0, 0x20a2c, 0x0, 0x20b63, 0x0, 0x214e4, 0x0, 0x216a8, 0x0, 0x216ea, 0x0, 0x219c8, 0x0, 0x21b18, 0x0, 0x21d0b, 0x0, 0x21de4, 0x0, 0x21de6, 0x0, 0x22183, 0x0, 0x2219f, 0x0, 0x22331, 0x0, 0x226d4, 0x0, 0x22844, 0x0, 0x2284a, 0x0, 0x22b0c, 0x0, 0x22bf1, 0x0, 0x2300a, 0x0, 0x232b8, 0x0, 0x2335f, 0x0, 0x23393, 0x0, 0x2339c, 0x0, 0x233c3, 0x0, 0x233d5, 0x0, 0x2346d, 0x0, 0x236a3, 0x0, 0x238a7, 0x0, 0x23a8d, 0x0, 0x23afa, 0x0, 0x23cbc, 0x0, 0x23d1e, 0x0, 0x23ed1, 0x0, 0x23f5e, 0x0, 0x23f8e, 0x0, 0x24263, 0x0, 0x242ee, 0x0, 0x243ab, 0x0, 0x24608, 0x0, 0x24735, 0x0, 0x24814, 0x0, 0x24c36, 0x0, 0x24c92, 0x0, 0x24fa1, 0x0, 0x24fb8, 0x0, 0x25044, 0x0, 0x250f2, 0x0, 0x250f3, 0x0, 0x25119, 0x0, 0x25133, 0x0, 0x25249, 0x0, 0x2541d, 0x0, 0x25626, 0x0, 0x2569a, 0x0, 0x256c5, 0x0, 0x2597c, 0x0, 0x25aa7, 0x0, 0x25bab, 0x0, 0x25c80, 0x0, 0x25cd0, 0x0, 0x25f86, 0x0, 0x261da, 0x0, 0x26228, 0x0, 0x26247, 0x0, 0x262d9, 0x0, 0x2633e, 0x0, 0x264da, 0x0, 0x26523, 0x0, 0x265a8, 0x0, 0x267a7, 0x0, 0x267b5, 0x0, 0x26b3c, 0x0, 0x26c36, 0x0, 0x26cd5, 0x0, 0x26d6b, 0x0, 0x26f2c, 0x0, 0x26fb1, 0x0, 0x270d2, 0x0, 0x273ca, 0x0, 0x27667, 0x0, 0x278ae, 0x0, 0x27966, 0x0, 0x27ca8, 0x0, 0x27ed3, 0x0, 0x27f2f, 0x0, 0x285d2, 0x0, 0x285ed, 0x0, 0x2872e, 0x0, 0x28bfa, 0x0, 0x28d77, 0x0, 0x29145, 0x0, 0x291df, 0x0, 0x2921a, 0x0, 0x2940a, 0x0, 0x29496, 0x0, 0x295b6, 0x0, 0x29b30, 0x0, 0x2a0ce, 0x0, 0x2a105, 0x0, 0x2a20e, 0x0, 0x2a291, 0x0, 0x2a392, 0x0, 0x2a600, 0x0]; return t; } -_IDCA decompCompatTable() @safe pure nothrow { static _IDCA t = [ 0x0, 0x20, 0x0, 0x20, 0x301, 0x0, 0x20, 0x303, 0x0, 0x20, 0x304, 0x0, 0x20, 0x305, 0x0, 0x20, 0x306, 0x0, 0x20, 0x307, 0x0, 0x20, 0x308, 0x0, 0x20, 0x308, 0x300, 0x0, 0x20, 0x308, 0x301, 0x0, 0x20, 0x308, 0x342, 0x0, 0x20, 0x30a, 0x0, 0x20, 0x30b, 0x0, 0x20, 0x313, 0x0, 0x20, 0x313, 0x300, 0x0, 0x20, 0x313, 0x301, 0x0, 0x20, 0x313, 0x342, 0x0, 0x20, 0x314, 0x0, 0x20, 0x314, 0x300, 0x0, 0x20, 0x314, 0x301, 0x0, 0x20, 0x314, 0x342, 0x0, 0x20, 0x327, 0x0, 0x20, 0x328, 0x0, 0x20, 0x333, 0x0, 0x20, 0x342, 0x0, 0x20, 0x345, 0x0, 0x20, 0x64b, 0x0, 0x20, 0x64c, 0x0, 0x20, 0x64c, 0x651, 0x0, 0x20, 0x64d, 0x0, 0x20, 0x64d, 0x651, 0x0, 0x20, 0x64e, 0x0, 0x20, 0x64e, 0x651, 0x0, 0x20, 0x64f, 0x0, 0x20, 0x64f, 0x651, 0x0, 0x20, 0x650, 0x0, 0x20, 0x650, 0x651, 0x0, 0x20, 0x651, 0x0, 0x20, 0x651, 0x670, 0x0, 0x20, 0x652, 0x0, 0x20, 0x3099, 0x0, 0x20, 0x309a, 0x0, 0x21, 0x0, 0x21, 0x21, 0x0, 0x21, 0x3f, 0x0, 0x22, 0x0, 0x23, 0x0, 0x24, 0x0, 0x25, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x28, 0x31, 0x29, 0x0, 0x28, 0x31, 0x30, 0x29, 0x0, 0x28, 0x31, 0x31, 0x29, 0x0, 0x28, 0x31, 0x32, 0x29, 0x0, 0x28, 0x31, 0x33, 0x29, 0x0, 0x28, 0x31, 0x34, 0x29, 0x0, 0x28, 0x31, 0x35, 0x29, 0x0, 0x28, 0x31, 0x36, 0x29, 0x0, 0x28, 0x31, 0x37, 0x29, 0x0, 0x28, 0x31, 0x38, 0x29, 0x0, 0x28, 0x31, 0x39, 0x29, 0x0, 0x28, 0x32, 0x29, 0x0, 0x28, 0x32, 0x30, 0x29, 0x0, 0x28, 0x33, 0x29, 0x0, 0x28, 0x34, 0x29, 0x0, 0x28, 0x35, 0x29, 0x0, 0x28, 0x36, 0x29, 0x0, 0x28, 0x37, 0x29, 0x0, 0x28, 0x38, 0x29, 0x0, 0x28, 0x39, 0x29, 0x0, 0x28, 0x41, 0x29, 0x0, 0x28, 0x42, 0x29, 0x0, 0x28, 0x43, 0x29, 0x0, 0x28, 0x44, 0x29, 0x0, 0x28, 0x45, 0x29, 0x0, 0x28, 0x46, 0x29, 0x0, 0x28, 0x47, 0x29, 0x0, 0x28, 0x48, 0x29, 0x0, 0x28, 0x49, 0x29, 0x0, 0x28, 0x4a, 0x29, 0x0, 0x28, 0x4b, 0x29, 0x0, 0x28, 0x4c, 0x29, 0x0, 0x28, 0x4d, 0x29, 0x0, 0x28, 0x4e, 0x29, 0x0, 0x28, 0x4f, 0x29, 0x0, 0x28, 0x50, 0x29, 0x0, 0x28, 0x51, 0x29, 0x0, 0x28, 0x52, 0x29, 0x0, 0x28, 0x53, 0x29, 0x0, 0x28, 0x54, 0x29, 0x0, 0x28, 0x55, 0x29, 0x0, 0x28, 0x56, 0x29, 0x0, 0x28, 0x57, 0x29, 0x0, 0x28, 0x58, 0x29, 0x0, 0x28, 0x59, 0x29, 0x0, 0x28, 0x5a, 0x29, 0x0, 0x28, 0x61, 0x29, 0x0, 0x28, 0x62, 0x29, 0x0, 0x28, 0x63, 0x29, 0x0, 0x28, 0x64, 0x29, 0x0, 0x28, 0x65, 0x29, 0x0, 0x28, 0x66, 0x29, 0x0, 0x28, 0x67, 0x29, 0x0, 0x28, 0x68, 0x29, 0x0, 0x28, 0x69, 0x29, 0x0, 0x28, 0x6a, 0x29, 0x0, 0x28, 0x6b, 0x29, 0x0, 0x28, 0x6c, 0x29, 0x0, 0x28, 0x6d, 0x29, 0x0, 0x28, 0x6e, 0x29, 0x0, 0x28, 0x6f, 0x29, 0x0, 0x28, 0x70, 0x29, 0x0, 0x28, 0x71, 0x29, 0x0, 0x28, 0x72, 0x29, 0x0, 0x28, 0x73, 0x29, 0x0, 0x28, 0x74, 0x29, 0x0, 0x28, 0x75, 0x29, 0x0, 0x28, 0x76, 0x29, 0x0, 0x28, 0x77, 0x29, 0x0, 0x28, 0x78, 0x29, 0x0, 0x28, 0x79, 0x29, 0x0, 0x28, 0x7a, 0x29, 0x0, 0x28, 0x1100, 0x29, 0x0, 0x28, 0x1100, 0x1161, 0x29, 0x0, 0x28, 0x1102, 0x29, 0x0, 0x28, 0x1102, 0x1161, 0x29, 0x0, 0x28, 0x1103, 0x29, 0x0, 0x28, 0x1103, 0x1161, 0x29, 0x0, 0x28, 0x1105, 0x29, 0x0, 0x28, 0x1105, 0x1161, 0x29, 0x0, 0x28, 0x1106, 0x29, 0x0, 0x28, 0x1106, 0x1161, 0x29, 0x0, 0x28, 0x1107, 0x29, 0x0, 0x28, 0x1107, 0x1161, 0x29, 0x0, 0x28, 0x1109, 0x29, 0x0, 0x28, 0x1109, 0x1161, 0x29, 0x0, 0x28, 0x110b, 0x29, 0x0, 0x28, 0x110b, 0x1161, 0x29, 0x0, 0x28, 0x110b, 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x0, 0x28, 0x110b, 0x1169, 0x1112, 0x116e, 0x29, 0x0, 0x28, 0x110c, 0x29, 0x0, 0x28, 0x110c, 0x1161, 0x29, 0x0, 0x28, 0x110c, 0x116e, 0x29, 0x0, 0x28, 0x110e, 0x29, 0x0, 0x28, 0x110e, 0x1161, 0x29, 0x0, 0x28, 0x110f, 0x29, 0x0, 0x28, 0x110f, 0x1161, 0x29, 0x0, 0x28, 0x1110, 0x29, 0x0, 0x28, 0x1110, 0x1161, 0x29, 0x0, 0x28, 0x1111, 0x29, 0x0, 0x28, 0x1111, 0x1161, 0x29, 0x0, 0x28, 0x1112, 0x29, 0x0, 0x28, 0x1112, 0x1161, 0x29, 0x0, 0x28, 0x4e00, 0x29, 0x0, 0x28, 0x4e03, 0x29, 0x0, 0x28, 0x4e09, 0x29, 0x0, 0x28, 0x4e5d, 0x29, 0x0, 0x28, 0x4e8c, 0x29, 0x0, 0x28, 0x4e94, 0x29, 0x0, 0x28, 0x4ee3, 0x29, 0x0, 0x28, 0x4f01, 0x29, 0x0, 0x28, 0x4f11, 0x29, 0x0, 0x28, 0x516b, 0x29, 0x0, 0x28, 0x516d, 0x29, 0x0, 0x28, 0x52b4, 0x29, 0x0, 0x28, 0x5341, 0x29, 0x0, 0x28, 0x5354, 0x29, 0x0, 0x28, 0x540d, 0x29, 0x0, 0x28, 0x547c, 0x29, 0x0, 0x28, 0x56db, 0x29, 0x0, 0x28, 0x571f, 0x29, 0x0, 0x28, 0x5b66, 0x29, 0x0, 0x28, 0x65e5, 0x29, 0x0, 0x28, 0x6708, 0x29, 0x0, 0x28, 0x6709, 0x29, 0x0, 0x28, 0x6728, 0x29, 0x0, 0x28, 0x682a, 0x29, 0x0, 0x28, 0x6c34, 0x29, 0x0, 0x28, 0x706b, 0x29, 0x0, 0x28, 0x7279, 0x29, 0x0, 0x28, 0x76e3, 0x29, 0x0, 0x28, 0x793e, 0x29, 0x0, 0x28, 0x795d, 0x29, 0x0, 0x28, 0x796d, 0x29, 0x0, 0x28, 0x81ea, 0x29, 0x0, 0x28, 0x81f3, 0x29, 0x0, 0x28, 0x8ca1, 0x29, 0x0, 0x28, 0x8cc7, 0x29, 0x0, 0x28, 0x91d1, 0x29, 0x0, 0x29, 0x0, 0x2a, 0x0, 0x2b, 0x0, 0x2c, 0x0, 0x2d, 0x0, 0x2e, 0x0, 0x2e, 0x2e, 0x0, 0x2e, 0x2e, 0x2e, 0x0, 0x2f, 0x0, 0x30, 0x0, 0x30, 0x2c, 0x0, 0x30, 0x2e, 0x0, 0x30, 0x2044, 0x33, 0x0, 0x30, 0x70b9, 0x0, 0x31, 0x0, 0x31, 0x2c, 0x0, 0x31, 0x2e, 0x0, 0x31, 0x30, 0x0, 0x31, 0x30, 0x2e, 0x0, 0x31, 0x30, 0x65e5, 0x0, 0x31, 0x30, 0x6708, 0x0, 0x31, 0x30, 0x70b9, 0x0, 0x31, 0x31, 0x0, 0x31, 0x31, 0x2e, 0x0, 0x31, 0x31, 0x65e5, 0x0, 0x31, 0x31, 0x6708, 0x0, 0x31, 0x31, 0x70b9, 0x0, 0x31, 0x32, 0x0, 0x31, 0x32, 0x2e, 0x0, 0x31, 0x32, 0x65e5, 0x0, 0x31, 0x32, 0x6708, 0x0, 0x31, 0x32, 0x70b9, 0x0, 0x31, 0x33, 0x0, 0x31, 0x33, 0x2e, 0x0, 0x31, 0x33, 0x65e5, 0x0, 0x31, 0x33, 0x70b9, 0x0, 0x31, 0x34, 0x0, 0x31, 0x34, 0x2e, 0x0, 0x31, 0x34, 0x65e5, 0x0, 0x31, 0x34, 0x70b9, 0x0, 0x31, 0x35, 0x0, 0x31, 0x35, 0x2e, 0x0, 0x31, 0x35, 0x65e5, 0x0, 0x31, 0x35, 0x70b9, 0x0, 0x31, 0x36, 0x0, 0x31, 0x36, 0x2e, 0x0, 0x31, 0x36, 0x65e5, 0x0, 0x31, 0x36, 0x70b9, 0x0, 0x31, 0x37, 0x0, 0x31, 0x37, 0x2e, 0x0, 0x31, 0x37, 0x65e5, 0x0, 0x31, 0x37, 0x70b9, 0x0, 0x31, 0x38, 0x0, 0x31, 0x38, 0x2e, 0x0, 0x31, 0x38, 0x65e5, 0x0, 0x31, 0x38, 0x70b9, 0x0, 0x31, 0x39, 0x0, 0x31, 0x39, 0x2e, 0x0, 0x31, 0x39, 0x65e5, 0x0, 0x31, 0x39, 0x70b9, 0x0, 0x31, 0x2044, 0x0, 0x31, 0x2044, 0x31, 0x30, 0x0, 0x31, 0x2044, 0x32, 0x0, 0x31, 0x2044, 0x33, 0x0, 0x31, 0x2044, 0x34, 0x0, 0x31, 0x2044, 0x35, 0x0, 0x31, 0x2044, 0x36, 0x0, 0x31, 0x2044, 0x37, 0x0, 0x31, 0x2044, 0x38, 0x0, 0x31, 0x2044, 0x39, 0x0, 0x31, 0x65e5, 0x0, 0x31, 0x6708, 0x0, 0x31, 0x70b9, 0x0, 0x32, 0x0, 0x32, 0x2c, 0x0, 0x32, 0x2e, 0x0, 0x32, 0x30, 0x0, 0x32, 0x30, 0x2e, 0x0, 0x32, 0x30, 0x65e5, 0x0, 0x32, 0x30, 0x70b9, 0x0, 0x32, 0x31, 0x0, 0x32, 0x31, 0x65e5, 0x0, 0x32, 0x31, 0x70b9, 0x0, 0x32, 0x32, 0x0, 0x32, 0x32, 0x65e5, 0x0, 0x32, 0x32, 0x70b9, 0x0, 0x32, 0x33, 0x0, 0x32, 0x33, 0x65e5, 0x0, 0x32, 0x33, 0x70b9, 0x0, 0x32, 0x34, 0x0, 0x32, 0x34, 0x65e5, 0x0, 0x32, 0x34, 0x70b9, 0x0, 0x32, 0x35, 0x0, 0x32, 0x35, 0x65e5, 0x0, 0x32, 0x36, 0x0, 0x32, 0x36, 0x65e5, 0x0, 0x32, 0x37, 0x0, 0x32, 0x37, 0x65e5, 0x0, 0x32, 0x38, 0x0, 0x32, 0x38, 0x65e5, 0x0, 0x32, 0x39, 0x0, 0x32, 0x39, 0x65e5, 0x0, 0x32, 0x2044, 0x33, 0x0, 0x32, 0x2044, 0x35, 0x0, 0x32, 0x65e5, 0x0, 0x32, 0x6708, 0x0, 0x32, 0x70b9, 0x0, 0x33, 0x0, 0x33, 0x2c, 0x0, 0x33, 0x2e, 0x0, 0x33, 0x30, 0x0, 0x33, 0x30, 0x65e5, 0x0, 0x33, 0x31, 0x0, 0x33, 0x31, 0x65e5, 0x0, 0x33, 0x32, 0x0, 0x33, 0x33, 0x0, 0x33, 0x34, 0x0, 0x33, 0x35, 0x0, 0x33, 0x36, 0x0, 0x33, 0x37, 0x0, 0x33, 0x38, 0x0, 0x33, 0x39, 0x0, 0x33, 0x2044, 0x34, 0x0, 0x33, 0x2044, 0x35, 0x0, 0x33, 0x2044, 0x38, 0x0, 0x33, 0x65e5, 0x0, 0x33, 0x6708, 0x0, 0x33, 0x70b9, 0x0, 0x34, 0x0, 0x34, 0x2c, 0x0, 0x34, 0x2e, 0x0, 0x34, 0x30, 0x0, 0x34, 0x31, 0x0, 0x34, 0x32, 0x0, 0x34, 0x33, 0x0, 0x34, 0x34, 0x0, 0x34, 0x35, 0x0, 0x34, 0x36, 0x0, 0x34, 0x37, 0x0, 0x34, 0x38, 0x0, 0x34, 0x39, 0x0, 0x34, 0x2044, 0x35, 0x0, 0x34, 0x65e5, 0x0, 0x34, 0x6708, 0x0, 0x34, 0x70b9, 0x0, 0x35, 0x0, 0x35, 0x2c, 0x0, 0x35, 0x2e, 0x0, 0x35, 0x30, 0x0, 0x35, 0x2044, 0x36, 0x0, 0x35, 0x2044, 0x38, 0x0, 0x35, 0x65e5, 0x0, 0x35, 0x6708, 0x0, 0x35, 0x70b9, 0x0, 0x36, 0x0, 0x36, 0x2c, 0x0, 0x36, 0x2e, 0x0, 0x36, 0x65e5, 0x0, 0x36, 0x6708, 0x0, 0x36, 0x70b9, 0x0, 0x37, 0x0, 0x37, 0x2c, 0x0, 0x37, 0x2e, 0x0, 0x37, 0x2044, 0x38, 0x0, 0x37, 0x65e5, 0x0, 0x37, 0x6708, 0x0, 0x37, 0x70b9, 0x0, 0x38, 0x0, 0x38, 0x2c, 0x0, 0x38, 0x2e, 0x0, 0x38, 0x65e5, 0x0, 0x38, 0x6708, 0x0, 0x38, 0x70b9, 0x0, 0x39, 0x0, 0x39, 0x2c, 0x0, 0x39, 0x2e, 0x0, 0x39, 0x65e5, 0x0, 0x39, 0x6708, 0x0, 0x39, 0x70b9, 0x0, 0x3a, 0x0, 0x3a, 0x3a, 0x3d, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3c, 0x338, 0x0, 0x3d, 0x0, 0x3d, 0x3d, 0x0, 0x3d, 0x3d, 0x3d, 0x0, 0x3d, 0x338, 0x0, 0x3e, 0x0, 0x3e, 0x338, 0x0, 0x3f, 0x0, 0x3f, 0x21, 0x0, 0x3f, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x41, 0x55, 0x0, 0x41, 0x300, 0x0, 0x41, 0x301, 0x0, 0x41, 0x302, 0x0, 0x41, 0x302, 0x300, 0x0, 0x41, 0x302, 0x301, 0x0, 0x41, 0x302, 0x303, 0x0, 0x41, 0x302, 0x309, 0x0, 0x41, 0x303, 0x0, 0x41, 0x304, 0x0, 0x41, 0x306, 0x0, 0x41, 0x306, 0x300, 0x0, 0x41, 0x306, 0x301, 0x0, 0x41, 0x306, 0x303, 0x0, 0x41, 0x306, 0x309, 0x0, 0x41, 0x307, 0x0, 0x41, 0x307, 0x304, 0x0, 0x41, 0x308, 0x0, 0x41, 0x308, 0x304, 0x0, 0x41, 0x309, 0x0, 0x41, 0x30a, 0x0, 0x41, 0x30a, 0x301, 0x0, 0x41, 0x30c, 0x0, 0x41, 0x30f, 0x0, 0x41, 0x311, 0x0, 0x41, 0x323, 0x0, 0x41, 0x323, 0x302, 0x0, 0x41, 0x323, 0x306, 0x0, 0x41, 0x325, 0x0, 0x41, 0x328, 0x0, 0x41, 0x2215, 0x6d, 0x0, 0x42, 0x0, 0x42, 0x71, 0x0, 0x42, 0x307, 0x0, 0x42, 0x323, 0x0, 0x42, 0x331, 0x0, 0x43, 0x0, 0x43, 0x44, 0x0, 0x43, 0x6f, 0x2e, 0x0, 0x43, 0x301, 0x0, 0x43, 0x302, 0x0, 0x43, 0x307, 0x0, 0x43, 0x30c, 0x0, 0x43, 0x327, 0x0, 0x43, 0x327, 0x301, 0x0, 0x43, 0x2215, 0x6b, 0x67, 0x0, 0x44, 0x0, 0x44, 0x4a, 0x0, 0x44, 0x5a, 0x0, 0x44, 0x5a, 0x30c, 0x0, 0x44, 0x7a, 0x0, 0x44, 0x7a, 0x30c, 0x0, 0x44, 0x307, 0x0, 0x44, 0x30c, 0x0, 0x44, 0x323, 0x0, 0x44, 0x327, 0x0, 0x44, 0x32d, 0x0, 0x44, 0x331, 0x0, 0x45, 0x0, 0x45, 0x300, 0x0, 0x45, 0x301, 0x0, 0x45, 0x302, 0x0, 0x45, 0x302, 0x300, 0x0, 0x45, 0x302, 0x301, 0x0, 0x45, 0x302, 0x303, 0x0, 0x45, 0x302, 0x309, 0x0, 0x45, 0x303, 0x0, 0x45, 0x304, 0x0, 0x45, 0x304, 0x300, 0x0, 0x45, 0x304, 0x301, 0x0, 0x45, 0x306, 0x0, 0x45, 0x307, 0x0, 0x45, 0x308, 0x0, 0x45, 0x309, 0x0, 0x45, 0x30c, 0x0, 0x45, 0x30f, 0x0, 0x45, 0x311, 0x0, 0x45, 0x323, 0x0, 0x45, 0x323, 0x302, 0x0, 0x45, 0x327, 0x0, 0x45, 0x327, 0x306, 0x0, 0x45, 0x328, 0x0, 0x45, 0x32d, 0x0, 0x45, 0x330, 0x0, 0x46, 0x0, 0x46, 0x41, 0x58, 0x0, 0x46, 0x307, 0x0, 0x47, 0x0, 0x47, 0x42, 0x0, 0x47, 0x48, 0x7a, 0x0, 0x47, 0x50, 0x61, 0x0, 0x47, 0x79, 0x0, 0x47, 0x301, 0x0, 0x47, 0x302, 0x0, 0x47, 0x304, 0x0, 0x47, 0x306, 0x0, 0x47, 0x307, 0x0, 0x47, 0x30c, 0x0, 0x47, 0x327, 0x0, 0x48, 0x0, 0x48, 0x50, 0x0, 0x48, 0x56, 0x0, 0x48, 0x67, 0x0, 0x48, 0x7a, 0x0, 0x48, 0x302, 0x0, 0x48, 0x307, 0x0, 0x48, 0x308, 0x0, 0x48, 0x30c, 0x0, 0x48, 0x323, 0x0, 0x48, 0x327, 0x0, 0x48, 0x32e, 0x0, 0x49, 0x0, 0x49, 0x49, 0x0, 0x49, 0x49, 0x49, 0x0, 0x49, 0x4a, 0x0, 0x49, 0x55, 0x0, 0x49, 0x56, 0x0, 0x49, 0x58, 0x0, 0x49, 0x300, 0x0, 0x49, 0x301, 0x0, 0x49, 0x302, 0x0, 0x49, 0x303, 0x0, 0x49, 0x304, 0x0, 0x49, 0x306, 0x0, 0x49, 0x307, 0x0, 0x49, 0x308, 0x0, 0x49, 0x308, 0x301, 0x0, 0x49, 0x309, 0x0, 0x49, 0x30c, 0x0, 0x49, 0x30f, 0x0, 0x49, 0x311, 0x0, 0x49, 0x323, 0x0, 0x49, 0x328, 0x0, 0x49, 0x330, 0x0, 0x4a, 0x0, 0x4a, 0x302, 0x0, 0x4b, 0x0, 0x4b, 0x42, 0x0, 0x4b, 0x4b, 0x0, 0x4b, 0x4d, 0x0, 0x4b, 0x301, 0x0, 0x4b, 0x30c, 0x0, 0x4b, 0x323, 0x0, 0x4b, 0x327, 0x0, 0x4b, 0x331, 0x0, 0x4c, 0x0, 0x4c, 0x4a, 0x0, 0x4c, 0x54, 0x44, 0x0, 0x4c, 0x6a, 0x0, 0x4c, 0xb7, 0x0, 0x4c, 0x301, 0x0, 0x4c, 0x30c, 0x0, 0x4c, 0x323, 0x0, 0x4c, 0x323, 0x304, 0x0, 0x4c, 0x327, 0x0, 0x4c, 0x32d, 0x0, 0x4c, 0x331, 0x0, 0x4d, 0x0, 0x4d, 0x42, 0x0, 0x4d, 0x43, 0x0, 0x4d, 0x44, 0x0, 0x4d, 0x48, 0x7a, 0x0, 0x4d, 0x50, 0x61, 0x0, 0x4d, 0x52, 0x0, 0x4d, 0x56, 0x0, 0x4d, 0x57, 0x0, 0x4d, 0x301, 0x0, 0x4d, 0x307, 0x0, 0x4d, 0x323, 0x0, 0x4d, 0x3a9, 0x0, 0x4e, 0x0, 0x4e, 0x4a, 0x0, 0x4e, 0x6a, 0x0, 0x4e, 0x6f, 0x0, 0x4e, 0x300, 0x0, 0x4e, 0x301, 0x0, 0x4e, 0x303, 0x0, 0x4e, 0x307, 0x0, 0x4e, 0x30c, 0x0, 0x4e, 0x323, 0x0, 0x4e, 0x327, 0x0, 0x4e, 0x32d, 0x0, 0x4e, 0x331, 0x0, 0x4f, 0x0, 0x4f, 0x300, 0x0, 0x4f, 0x301, 0x0, 0x4f, 0x302, 0x0, 0x4f, 0x302, 0x300, 0x0, 0x4f, 0x302, 0x301, 0x0, 0x4f, 0x302, 0x303, 0x0, 0x4f, 0x302, 0x309, 0x0, 0x4f, 0x303, 0x0, 0x4f, 0x303, 0x301, 0x0, 0x4f, 0x303, 0x304, 0x0, 0x4f, 0x303, 0x308, 0x0, 0x4f, 0x304, 0x0, 0x4f, 0x304, 0x300, 0x0, 0x4f, 0x304, 0x301, 0x0, 0x4f, 0x306, 0x0, 0x4f, 0x307, 0x0, 0x4f, 0x307, 0x304, 0x0, 0x4f, 0x308, 0x0, 0x4f, 0x308, 0x304, 0x0, 0x4f, 0x309, 0x0, 0x4f, 0x30b, 0x0, 0x4f, 0x30c, 0x0, 0x4f, 0x30f, 0x0, 0x4f, 0x311, 0x0, 0x4f, 0x31b, 0x0, 0x4f, 0x31b, 0x300, 0x0, 0x4f, 0x31b, 0x301, 0x0, 0x4f, 0x31b, 0x303, 0x0, 0x4f, 0x31b, 0x309, 0x0, 0x4f, 0x31b, 0x323, 0x0, 0x4f, 0x323, 0x0, 0x4f, 0x323, 0x302, 0x0, 0x4f, 0x328, 0x0, 0x4f, 0x328, 0x304, 0x0, 0x50, 0x0, 0x50, 0x48, 0x0, 0x50, 0x50, 0x4d, 0x0, 0x50, 0x50, 0x56, 0x0, 0x50, 0x52, 0x0, 0x50, 0x54, 0x45, 0x0, 0x50, 0x61, 0x0, 0x50, 0x301, 0x0, 0x50, 0x307, 0x0, 0x51, 0x0, 0x52, 0x0, 0x52, 0x73, 0x0, 0x52, 0x301, 0x0, 0x52, 0x307, 0x0, 0x52, 0x30c, 0x0, 0x52, 0x30f, 0x0, 0x52, 0x311, 0x0, 0x52, 0x323, 0x0, 0x52, 0x323, 0x304, 0x0, 0x52, 0x327, 0x0, 0x52, 0x331, 0x0, 0x53, 0x0, 0x53, 0x44, 0x0, 0x53, 0x4d, 0x0, 0x53, 0x53, 0x0, 0x53, 0x76, 0x0, 0x53, 0x301, 0x0, 0x53, 0x301, 0x307, 0x0, 0x53, 0x302, 0x0, 0x53, 0x307, 0x0, 0x53, 0x30c, 0x0, 0x53, 0x30c, 0x307, 0x0, 0x53, 0x323, 0x0, 0x53, 0x323, 0x307, 0x0, 0x53, 0x326, 0x0, 0x53, 0x327, 0x0, 0x54, 0x0, 0x54, 0x45, 0x4c, 0x0, 0x54, 0x48, 0x7a, 0x0, 0x54, 0x4d, 0x0, 0x54, 0x307, 0x0, 0x54, 0x30c, 0x0, 0x54, 0x323, 0x0, 0x54, 0x326, 0x0, 0x54, 0x327, 0x0, 0x54, 0x32d, 0x0, 0x54, 0x331, 0x0, 0x55, 0x0, 0x55, 0x300, 0x0, 0x55, 0x301, 0x0, 0x55, 0x302, 0x0, 0x55, 0x303, 0x0, 0x55, 0x303, 0x301, 0x0, 0x55, 0x304, 0x0, 0x55, 0x304, 0x308, 0x0, 0x55, 0x306, 0x0, 0x55, 0x308, 0x0, 0x55, 0x308, 0x300, 0x0, 0x55, 0x308, 0x301, 0x0, 0x55, 0x308, 0x304, 0x0, 0x55, 0x308, 0x30c, 0x0, 0x55, 0x309, 0x0, 0x55, 0x30a, 0x0, 0x55, 0x30b, 0x0, 0x55, 0x30c, 0x0, 0x55, 0x30f, 0x0, 0x55, 0x311, 0x0, 0x55, 0x31b, 0x0, 0x55, 0x31b, 0x300, 0x0, 0x55, 0x31b, 0x301, 0x0, 0x55, 0x31b, 0x303, 0x0, 0x55, 0x31b, 0x309, 0x0, 0x55, 0x31b, 0x323, 0x0, 0x55, 0x323, 0x0, 0x55, 0x324, 0x0, 0x55, 0x328, 0x0, 0x55, 0x32d, 0x0, 0x55, 0x330, 0x0, 0x56, 0x0, 0x56, 0x49, 0x0, 0x56, 0x49, 0x49, 0x0, 0x56, 0x49, 0x49, 0x49, 0x0, 0x56, 0x303, 0x0, 0x56, 0x323, 0x0, 0x56, 0x2215, 0x6d, 0x0, 0x57, 0x0, 0x57, 0x43, 0x0, 0x57, 0x5a, 0x0, 0x57, 0x62, 0x0, 0x57, 0x300, 0x0, 0x57, 0x301, 0x0, 0x57, 0x302, 0x0, 0x57, 0x307, 0x0, 0x57, 0x308, 0x0, 0x57, 0x323, 0x0, 0x58, 0x0, 0x58, 0x49, 0x0, 0x58, 0x49, 0x49, 0x0, 0x58, 0x307, 0x0, 0x58, 0x308, 0x0, 0x59, 0x0, 0x59, 0x300, 0x0, 0x59, 0x301, 0x0, 0x59, 0x302, 0x0, 0x59, 0x303, 0x0, 0x59, 0x304, 0x0, 0x59, 0x307, 0x0, 0x59, 0x308, 0x0, 0x59, 0x309, 0x0, 0x59, 0x323, 0x0, 0x5a, 0x0, 0x5a, 0x301, 0x0, 0x5a, 0x302, 0x0, 0x5a, 0x307, 0x0, 0x5a, 0x30c, 0x0, 0x5a, 0x323, 0x0, 0x5a, 0x331, 0x0, 0x5b, 0x0, 0x5c, 0x0, 0x5d, 0x0, 0x5e, 0x0, 0x5f, 0x0, 0x60, 0x0, 0x61, 0x0, 0x61, 0x2e, 0x6d, 0x2e, 0x0, 0x61, 0x2f, 0x63, 0x0, 0x61, 0x2f, 0x73, 0x0, 0x61, 0x2be, 0x0, 0x61, 0x300, 0x0, 0x61, 0x301, 0x0, 0x61, 0x302, 0x0, 0x61, 0x302, 0x300, 0x0, 0x61, 0x302, 0x301, 0x0, 0x61, 0x302, 0x303, 0x0, 0x61, 0x302, 0x309, 0x0, 0x61, 0x303, 0x0, 0x61, 0x304, 0x0, 0x61, 0x306, 0x0, 0x61, 0x306, 0x300, 0x0, 0x61, 0x306, 0x301, 0x0, 0x61, 0x306, 0x303, 0x0, 0x61, 0x306, 0x309, 0x0, 0x61, 0x307, 0x0, 0x61, 0x307, 0x304, 0x0, 0x61, 0x308, 0x0, 0x61, 0x308, 0x304, 0x0, 0x61, 0x309, 0x0, 0x61, 0x30a, 0x0, 0x61, 0x30a, 0x301, 0x0, 0x61, 0x30c, 0x0, 0x61, 0x30f, 0x0, 0x61, 0x311, 0x0, 0x61, 0x323, 0x0, 0x61, 0x323, 0x302, 0x0, 0x61, 0x323, 0x306, 0x0, 0x61, 0x325, 0x0, 0x61, 0x328, 0x0, 0x62, 0x0, 0x62, 0x61, 0x72, 0x0, 0x62, 0x307, 0x0, 0x62, 0x323, 0x0, 0x62, 0x331, 0x0, 0x63, 0x0, 0x63, 0x2f, 0x6f, 0x0, 0x63, 0x2f, 0x75, 0x0, 0x63, 0x61, 0x6c, 0x0, 0x63, 0x63, 0x0, 0x63, 0x64, 0x0, 0x63, 0x6d, 0x0, 0x63, 0x6d, 0x32, 0x0, 0x63, 0x6d, 0x33, 0x0, 0x63, 0x301, 0x0, 0x63, 0x302, 0x0, 0x63, 0x307, 0x0, 0x63, 0x30c, 0x0, 0x63, 0x327, 0x0, 0x63, 0x327, 0x301, 0x0, 0x64, 0x0, 0x64, 0x42, 0x0, 0x64, 0x61, 0x0, 0x64, 0x6c, 0x0, 0x64, 0x6d, 0x0, 0x64, 0x6d, 0x32, 0x0, 0x64, 0x6d, 0x33, 0x0, 0x64, 0x7a, 0x0, 0x64, 0x7a, 0x30c, 0x0, 0x64, 0x307, 0x0, 0x64, 0x30c, 0x0, 0x64, 0x323, 0x0, 0x64, 0x327, 0x0, 0x64, 0x32d, 0x0, 0x64, 0x331, 0x0, 0x65, 0x0, 0x65, 0x56, 0x0, 0x65, 0x72, 0x67, 0x0, 0x65, 0x300, 0x0, 0x65, 0x301, 0x0, 0x65, 0x302, 0x0, 0x65, 0x302, 0x300, 0x0, 0x65, 0x302, 0x301, 0x0, 0x65, 0x302, 0x303, 0x0, 0x65, 0x302, 0x309, 0x0, 0x65, 0x303, 0x0, 0x65, 0x304, 0x0, 0x65, 0x304, 0x300, 0x0, 0x65, 0x304, 0x301, 0x0, 0x65, 0x306, 0x0, 0x65, 0x307, 0x0, 0x65, 0x308, 0x0, 0x65, 0x309, 0x0, 0x65, 0x30c, 0x0, 0x65, 0x30f, 0x0, 0x65, 0x311, 0x0, 0x65, 0x323, 0x0, 0x65, 0x323, 0x302, 0x0, 0x65, 0x327, 0x0, 0x65, 0x327, 0x306, 0x0, 0x65, 0x328, 0x0, 0x65, 0x32d, 0x0, 0x65, 0x330, 0x0, 0x66, 0x0, 0x66, 0x66, 0x0, 0x66, 0x66, 0x69, 0x0, 0x66, 0x66, 0x6c, 0x0, 0x66, 0x69, 0x0, 0x66, 0x6c, 0x0, 0x66, 0x6d, 0x0, 0x66, 0x307, 0x0, 0x67, 0x0, 0x67, 0x61, 0x6c, 0x0, 0x67, 0x301, 0x0, 0x67, 0x302, 0x0, 0x67, 0x304, 0x0, 0x67, 0x306, 0x0, 0x67, 0x307, 0x0, 0x67, 0x30c, 0x0, 0x67, 0x327, 0x0, 0x68, 0x0, 0x68, 0x50, 0x61, 0x0, 0x68, 0x61, 0x0, 0x68, 0x302, 0x0, 0x68, 0x307, 0x0, 0x68, 0x308, 0x0, 0x68, 0x30c, 0x0, 0x68, 0x323, 0x0, 0x68, 0x327, 0x0, 0x68, 0x32e, 0x0, 0x68, 0x331, 0x0, 0x69, 0x0, 0x69, 0x69, 0x0, 0x69, 0x69, 0x69, 0x0, 0x69, 0x6a, 0x0, 0x69, 0x6e, 0x0, 0x69, 0x76, 0x0, 0x69, 0x78, 0x0, 0x69, 0x300, 0x0, 0x69, 0x301, 0x0, 0x69, 0x302, 0x0, 0x69, 0x303, 0x0, 0x69, 0x304, 0x0, 0x69, 0x306, 0x0, 0x69, 0x308, 0x0, 0x69, 0x308, 0x301, 0x0, 0x69, 0x309, 0x0, 0x69, 0x30c, 0x0, 0x69, 0x30f, 0x0, 0x69, 0x311, 0x0, 0x69, 0x323, 0x0, 0x69, 0x328, 0x0, 0x69, 0x330, 0x0, 0x6a, 0x0, 0x6a, 0x302, 0x0, 0x6a, 0x30c, 0x0, 0x6b, 0x0, 0x6b, 0x41, 0x0, 0x6b, 0x48, 0x7a, 0x0, 0x6b, 0x50, 0x61, 0x0, 0x6b, 0x56, 0x0, 0x6b, 0x57, 0x0, 0x6b, 0x63, 0x61, 0x6c, 0x0, 0x6b, 0x67, 0x0, 0x6b, 0x6c, 0x0, 0x6b, 0x6d, 0x0, 0x6b, 0x6d, 0x32, 0x0, 0x6b, 0x6d, 0x33, 0x0, 0x6b, 0x74, 0x0, 0x6b, 0x301, 0x0, 0x6b, 0x30c, 0x0, 0x6b, 0x323, 0x0, 0x6b, 0x327, 0x0, 0x6b, 0x331, 0x0, 0x6b, 0x3a9, 0x0, 0x6c, 0x0, 0x6c, 0x6a, 0x0, 0x6c, 0x6d, 0x0, 0x6c, 0x6e, 0x0, 0x6c, 0x6f, 0x67, 0x0, 0x6c, 0x78, 0x0, 0x6c, 0xb7, 0x0, 0x6c, 0x301, 0x0, 0x6c, 0x30c, 0x0, 0x6c, 0x323, 0x0, 0x6c, 0x323, 0x304, 0x0, 0x6c, 0x327, 0x0, 0x6c, 0x32d, 0x0, 0x6c, 0x331, 0x0, 0x6d, 0x0, 0x6d, 0x32, 0x0, 0x6d, 0x33, 0x0, 0x6d, 0x41, 0x0, 0x6d, 0x56, 0x0, 0x6d, 0x57, 0x0, 0x6d, 0x62, 0x0, 0x6d, 0x67, 0x0, 0x6d, 0x69, 0x6c, 0x0, 0x6d, 0x6c, 0x0, 0x6d, 0x6d, 0x0, 0x6d, 0x6d, 0x32, 0x0, 0x6d, 0x6d, 0x33, 0x0, 0x6d, 0x6f, 0x6c, 0x0, 0x6d, 0x73, 0x0, 0x6d, 0x301, 0x0, 0x6d, 0x307, 0x0, 0x6d, 0x323, 0x0, 0x6d, 0x2215, 0x73, 0x0, 0x6d, 0x2215, 0x73, 0x32, 0x0, 0x6e, 0x0, 0x6e, 0x41, 0x0, 0x6e, 0x46, 0x0, 0x6e, 0x56, 0x0, 0x6e, 0x57, 0x0, 0x6e, 0x6a, 0x0, 0x6e, 0x6d, 0x0, 0x6e, 0x73, 0x0, 0x6e, 0x300, 0x0, 0x6e, 0x301, 0x0, 0x6e, 0x303, 0x0, 0x6e, 0x307, 0x0, 0x6e, 0x30c, 0x0, 0x6e, 0x323, 0x0, 0x6e, 0x327, 0x0, 0x6e, 0x32d, 0x0, 0x6e, 0x331, 0x0, 0x6f, 0x0, 0x6f, 0x56, 0x0, 0x6f, 0x300, 0x0, 0x6f, 0x301, 0x0, 0x6f, 0x302, 0x0, 0x6f, 0x302, 0x300, 0x0, 0x6f, 0x302, 0x301, 0x0, 0x6f, 0x302, 0x303, 0x0, 0x6f, 0x302, 0x309, 0x0, 0x6f, 0x303, 0x0, 0x6f, 0x303, 0x301, 0x0, 0x6f, 0x303, 0x304, 0x0, 0x6f, 0x303, 0x308, 0x0, 0x6f, 0x304, 0x0, 0x6f, 0x304, 0x300, 0x0, 0x6f, 0x304, 0x301, 0x0, 0x6f, 0x306, 0x0, 0x6f, 0x307, 0x0, 0x6f, 0x307, 0x304, 0x0, 0x6f, 0x308, 0x0, 0x6f, 0x308, 0x304, 0x0, 0x6f, 0x309, 0x0, 0x6f, 0x30b, 0x0, 0x6f, 0x30c, 0x0, 0x6f, 0x30f, 0x0, 0x6f, 0x311, 0x0, 0x6f, 0x31b, 0x0, 0x6f, 0x31b, 0x300, 0x0, 0x6f, 0x31b, 0x301, 0x0, 0x6f, 0x31b, 0x303, 0x0, 0x6f, 0x31b, 0x309, 0x0, 0x6f, 0x31b, 0x323, 0x0, 0x6f, 0x323, 0x0, 0x6f, 0x323, 0x302, 0x0, 0x6f, 0x328, 0x0, 0x6f, 0x328, 0x304, 0x0, 0x70, 0x0, 0x70, 0x2e, 0x6d, 0x2e, 0x0, 0x70, 0x41, 0x0, 0x70, 0x46, 0x0, 0x70, 0x56, 0x0, 0x70, 0x57, 0x0, 0x70, 0x63, 0x0, 0x70, 0x73, 0x0, 0x70, 0x301, 0x0, 0x70, 0x307, 0x0, 0x71, 0x0, 0x72, 0x0, 0x72, 0x61, 0x64, 0x0, 0x72, 0x61, 0x64, 0x2215, 0x73, 0x0, 0x72, 0x61, 0x64, 0x2215, 0x73, 0x32, 0x0, 0x72, 0x301, 0x0, 0x72, 0x307, 0x0, 0x72, 0x30c, 0x0, 0x72, 0x30f, 0x0, 0x72, 0x311, 0x0, 0x72, 0x323, 0x0, 0x72, 0x323, 0x304, 0x0, 0x72, 0x327, 0x0, 0x72, 0x331, 0x0, 0x73, 0x0, 0x73, 0x72, 0x0, 0x73, 0x74, 0x0, 0x73, 0x301, 0x0, 0x73, 0x301, 0x307, 0x0, 0x73, 0x302, 0x0, 0x73, 0x307, 0x0, 0x73, 0x30c, 0x0, 0x73, 0x30c, 0x307, 0x0, 0x73, 0x323, 0x0, 0x73, 0x323, 0x307, 0x0, 0x73, 0x326, 0x0, 0x73, 0x327, 0x0, 0x74, 0x0, 0x74, 0x307, 0x0, 0x74, 0x308, 0x0, 0x74, 0x30c, 0x0, 0x74, 0x323, 0x0, 0x74, 0x326, 0x0, 0x74, 0x327, 0x0, 0x74, 0x32d, 0x0, 0x74, 0x331, 0x0, 0x75, 0x0, 0x75, 0x300, 0x0, 0x75, 0x301, 0x0, 0x75, 0x302, 0x0, 0x75, 0x303, 0x0, 0x75, 0x303, 0x301, 0x0, 0x75, 0x304, 0x0, 0x75, 0x304, 0x308, 0x0, 0x75, 0x306, 0x0, 0x75, 0x308, 0x0, 0x75, 0x308, 0x300, 0x0, 0x75, 0x308, 0x301, 0x0, 0x75, 0x308, 0x304, 0x0, 0x75, 0x308, 0x30c, 0x0, 0x75, 0x309, 0x0, 0x75, 0x30a, 0x0, 0x75, 0x30b, 0x0, 0x75, 0x30c, 0x0, 0x75, 0x30f, 0x0, 0x75, 0x311, 0x0, 0x75, 0x31b, 0x0, 0x75, 0x31b, 0x300, 0x0, 0x75, 0x31b, 0x301, 0x0, 0x75, 0x31b, 0x303, 0x0, 0x75, 0x31b, 0x309, 0x0, 0x75, 0x31b, 0x323, 0x0, 0x75, 0x323, 0x0, 0x75, 0x324, 0x0, 0x75, 0x328, 0x0, 0x75, 0x32d, 0x0, 0x75, 0x330, 0x0, 0x76, 0x0, 0x76, 0x69, 0x0, 0x76, 0x69, 0x69, 0x0, 0x76, 0x69, 0x69, 0x69, 0x0, 0x76, 0x303, 0x0, 0x76, 0x323, 0x0, 0x77, 0x0, 0x77, 0x300, 0x0, 0x77, 0x301, 0x0, 0x77, 0x302, 0x0, 0x77, 0x307, 0x0, 0x77, 0x308, 0x0, 0x77, 0x30a, 0x0, 0x77, 0x323, 0x0, 0x78, 0x0, 0x78, 0x69, 0x0, 0x78, 0x69, 0x69, 0x0, 0x78, 0x307, 0x0, 0x78, 0x308, 0x0, 0x79, 0x0, 0x79, 0x300, 0x0, 0x79, 0x301, 0x0, 0x79, 0x302, 0x0, 0x79, 0x303, 0x0, 0x79, 0x304, 0x0, 0x79, 0x307, 0x0, 0x79, 0x308, 0x0, 0x79, 0x309, 0x0, 0x79, 0x30a, 0x0, 0x79, 0x323, 0x0, 0x7a, 0x0, 0x7a, 0x301, 0x0, 0x7a, 0x302, 0x0, 0x7a, 0x307, 0x0, 0x7a, 0x30c, 0x0, 0x7a, 0x323, 0x0, 0x7a, 0x331, 0x0, 0x7b, 0x0, 0x7c, 0x0, 0x7d, 0x0, 0x7e, 0x0, 0xa2, 0x0, 0xa3, 0x0, 0xa5, 0x0, 0xa6, 0x0, 0xac, 0x0, 0xb0, 0x43, 0x0, 0xb0, 0x46, 0x0, 0xb7, 0x0, 0xc6, 0x0, 0xc6, 0x301, 0x0, 0xc6, 0x304, 0x0, 0xd8, 0x301, 0x0, 0xe6, 0x0, 0xe6, 0x301, 0x0, 0xe6, 0x304, 0x0, 0xf0, 0x0, 0xf8, 0x0, 0xf8, 0x301, 0x0, 0x126, 0x0, 0x127, 0x0, 0x131, 0x0, 0x14b, 0x0, 0x153, 0x0, 0x18e, 0x0, 0x190, 0x0, 0x1ab, 0x0, 0x1b7, 0x30c, 0x0, 0x1c0, 0x0, 0x1c1, 0x0, 0x1c2, 0x0, 0x222, 0x0, 0x237, 0x0, 0x250, 0x0, 0x251, 0x0, 0x252, 0x0, 0x253, 0x0, 0x254, 0x0, 0x255, 0x0, 0x256, 0x0, 0x257, 0x0, 0x258, 0x0, 0x259, 0x0, 0x25b, 0x0, 0x25c, 0x0, 0x25e, 0x0, 0x25f, 0x0, 0x260, 0x0, 0x261, 0x0, 0x262, 0x0, 0x263, 0x0, 0x264, 0x0, 0x265, 0x0, 0x266, 0x0, 0x267, 0x0, 0x268, 0x0, 0x269, 0x0, 0x26a, 0x0, 0x26b, 0x0, 0x26c, 0x0, 0x26d, 0x0, 0x26e, 0x0, 0x26f, 0x0, 0x270, 0x0, 0x271, 0x0, 0x272, 0x0, 0x273, 0x0, 0x274, 0x0, 0x275, 0x0, 0x276, 0x0, 0x277, 0x0, 0x278, 0x0, 0x279, 0x0, 0x27a, 0x0, 0x27b, 0x0, 0x27d, 0x0, 0x27e, 0x0, 0x280, 0x0, 0x281, 0x0, 0x282, 0x0, 0x283, 0x0, 0x284, 0x0, 0x288, 0x0, 0x289, 0x0, 0x28a, 0x0, 0x28b, 0x0, 0x28c, 0x0, 0x28d, 0x0, 0x28e, 0x0, 0x28f, 0x0, 0x290, 0x0, 0x291, 0x0, 0x292, 0x0, 0x292, 0x30c, 0x0, 0x295, 0x0, 0x298, 0x0, 0x299, 0x0, 0x29b, 0x0, 0x29c, 0x0, 0x29d, 0x0, 0x29f, 0x0, 0x2a1, 0x0, 0x2a2, 0x0, 0x2a3, 0x0, 0x2a4, 0x0, 0x2a5, 0x0, 0x2a6, 0x0, 0x2a7, 0x0, 0x2a8, 0x0, 0x2a9, 0x0, 0x2aa, 0x0, 0x2ab, 0x0, 0x2b9, 0x0, 0x2bc, 0x6e, 0x0, 0x2d0, 0x0, 0x2d1, 0x0, 0x300, 0x0, 0x301, 0x0, 0x308, 0x301, 0x0, 0x313, 0x0, 0x391, 0x0, 0x391, 0x300, 0x0, 0x391, 0x301, 0x0, 0x391, 0x304, 0x0, 0x391, 0x306, 0x0, 0x391, 0x313, 0x0, 0x391, 0x313, 0x300, 0x0, 0x391, 0x313, 0x300, 0x345, 0x0, 0x391, 0x313, 0x301, 0x0, 0x391, 0x313, 0x301, 0x345, 0x0, 0x391, 0x313, 0x342, 0x0, 0x391, 0x313, 0x342, 0x345, 0x0, 0x391, 0x313, 0x345, 0x0, 0x391, 0x314, 0x0, 0x391, 0x314, 0x300, 0x0, 0x391, 0x314, 0x300, 0x345, 0x0, 0x391, 0x314, 0x301, 0x0, 0x391, 0x314, 0x301, 0x345, 0x0, 0x391, 0x314, 0x342, 0x0, 0x391, 0x314, 0x342, 0x345, 0x0, 0x391, 0x314, 0x345, 0x0, 0x391, 0x345, 0x0, 0x392, 0x0, 0x393, 0x0, 0x394, 0x0, 0x395, 0x0, 0x395, 0x300, 0x0, 0x395, 0x301, 0x0, 0x395, 0x313, 0x0, 0x395, 0x313, 0x300, 0x0, 0x395, 0x313, 0x301, 0x0, 0x395, 0x314, 0x0, 0x395, 0x314, 0x300, 0x0, 0x395, 0x314, 0x301, 0x0, 0x396, 0x0, 0x397, 0x0, 0x397, 0x300, 0x0, 0x397, 0x301, 0x0, 0x397, 0x313, 0x0, 0x397, 0x313, 0x300, 0x0, 0x397, 0x313, 0x300, 0x345, 0x0, 0x397, 0x313, 0x301, 0x0, 0x397, 0x313, 0x301, 0x345, 0x0, 0x397, 0x313, 0x342, 0x0, 0x397, 0x313, 0x342, 0x345, 0x0, 0x397, 0x313, 0x345, 0x0, 0x397, 0x314, 0x0, 0x397, 0x314, 0x300, 0x0, 0x397, 0x314, 0x300, 0x345, 0x0, 0x397, 0x314, 0x301, 0x0, 0x397, 0x314, 0x301, 0x345, 0x0, 0x397, 0x314, 0x342, 0x0, 0x397, 0x314, 0x342, 0x345, 0x0, 0x397, 0x314, 0x345, 0x0, 0x397, 0x345, 0x0, 0x398, 0x0, 0x399, 0x0, 0x399, 0x300, 0x0, 0x399, 0x301, 0x0, 0x399, 0x304, 0x0, 0x399, 0x306, 0x0, 0x399, 0x308, 0x0, 0x399, 0x313, 0x0, 0x399, 0x313, 0x300, 0x0, 0x399, 0x313, 0x301, 0x0, 0x399, 0x313, 0x342, 0x0, 0x399, 0x314, 0x0, 0x399, 0x314, 0x300, 0x0, 0x399, 0x314, 0x301, 0x0, 0x399, 0x314, 0x342, 0x0, 0x39a, 0x0, 0x39b, 0x0, 0x39c, 0x0, 0x39d, 0x0, 0x39e, 0x0, 0x39f, 0x0, 0x39f, 0x300, 0x0, 0x39f, 0x301, 0x0, 0x39f, 0x313, 0x0, 0x39f, 0x313, 0x300, 0x0, 0x39f, 0x313, 0x301, 0x0, 0x39f, 0x314, 0x0, 0x39f, 0x314, 0x300, 0x0, 0x39f, 0x314, 0x301, 0x0, 0x3a0, 0x0, 0x3a1, 0x0, 0x3a1, 0x314, 0x0, 0x3a3, 0x0, 0x3a4, 0x0, 0x3a5, 0x0, 0x3a5, 0x300, 0x0, 0x3a5, 0x301, 0x0, 0x3a5, 0x304, 0x0, 0x3a5, 0x306, 0x0, 0x3a5, 0x308, 0x0, 0x3a5, 0x314, 0x0, 0x3a5, 0x314, 0x300, 0x0, 0x3a5, 0x314, 0x301, 0x0, 0x3a5, 0x314, 0x342, 0x0, 0x3a6, 0x0, 0x3a7, 0x0, 0x3a8, 0x0, 0x3a9, 0x0, 0x3a9, 0x300, 0x0, 0x3a9, 0x301, 0x0, 0x3a9, 0x313, 0x0, 0x3a9, 0x313, 0x300, 0x0, 0x3a9, 0x313, 0x300, 0x345, 0x0, 0x3a9, 0x313, 0x301, 0x0, 0x3a9, 0x313, 0x301, 0x345, 0x0, 0x3a9, 0x313, 0x342, 0x0, 0x3a9, 0x313, 0x342, 0x345, 0x0, 0x3a9, 0x313, 0x345, 0x0, 0x3a9, 0x314, 0x0, 0x3a9, 0x314, 0x300, 0x0, 0x3a9, 0x314, 0x300, 0x345, 0x0, 0x3a9, 0x314, 0x301, 0x0, 0x3a9, 0x314, 0x301, 0x345, 0x0, 0x3a9, 0x314, 0x342, 0x0, 0x3a9, 0x314, 0x342, 0x345, 0x0, 0x3a9, 0x314, 0x345, 0x0, 0x3a9, 0x345, 0x0, 0x3b1, 0x0, 0x3b1, 0x300, 0x0, 0x3b1, 0x300, 0x345, 0x0, 0x3b1, 0x301, 0x0, 0x3b1, 0x301, 0x345, 0x0, 0x3b1, 0x304, 0x0, 0x3b1, 0x306, 0x0, 0x3b1, 0x313, 0x0, 0x3b1, 0x313, 0x300, 0x0, 0x3b1, 0x313, 0x300, 0x345, 0x0, 0x3b1, 0x313, 0x301, 0x0, 0x3b1, 0x313, 0x301, 0x345, 0x0, 0x3b1, 0x313, 0x342, 0x0, 0x3b1, 0x313, 0x342, 0x345, 0x0, 0x3b1, 0x313, 0x345, 0x0, 0x3b1, 0x314, 0x0, 0x3b1, 0x314, 0x300, 0x0, 0x3b1, 0x314, 0x300, 0x345, 0x0, 0x3b1, 0x314, 0x301, 0x0, 0x3b1, 0x314, 0x301, 0x345, 0x0, 0x3b1, 0x314, 0x342, 0x0, 0x3b1, 0x314, 0x342, 0x345, 0x0, 0x3b1, 0x314, 0x345, 0x0, 0x3b1, 0x342, 0x0, 0x3b1, 0x342, 0x345, 0x0, 0x3b1, 0x345, 0x0, 0x3b2, 0x0, 0x3b3, 0x0, 0x3b4, 0x0, 0x3b5, 0x0, 0x3b5, 0x300, 0x0, 0x3b5, 0x301, 0x0, 0x3b5, 0x313, 0x0, 0x3b5, 0x313, 0x300, 0x0, 0x3b5, 0x313, 0x301, 0x0, 0x3b5, 0x314, 0x0, 0x3b5, 0x314, 0x300, 0x0, 0x3b5, 0x314, 0x301, 0x0, 0x3b6, 0x0, 0x3b7, 0x0, 0x3b7, 0x300, 0x0, 0x3b7, 0x300, 0x345, 0x0, 0x3b7, 0x301, 0x0, 0x3b7, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x0, 0x3b7, 0x313, 0x300, 0x0, 0x3b7, 0x313, 0x300, 0x345, 0x0, 0x3b7, 0x313, 0x301, 0x0, 0x3b7, 0x313, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x342, 0x0, 0x3b7, 0x313, 0x342, 0x345, 0x0, 0x3b7, 0x313, 0x345, 0x0, 0x3b7, 0x314, 0x0, 0x3b7, 0x314, 0x300, 0x0, 0x3b7, 0x314, 0x300, 0x345, 0x0, 0x3b7, 0x314, 0x301, 0x0, 0x3b7, 0x314, 0x301, 0x345, 0x0, 0x3b7, 0x314, 0x342, 0x0, 0x3b7, 0x314, 0x342, 0x345, 0x0, 0x3b7, 0x314, 0x345, 0x0, 0x3b7, 0x342, 0x0, 0x3b7, 0x342, 0x345, 0x0, 0x3b7, 0x345, 0x0, 0x3b8, 0x0, 0x3b9, 0x0, 0x3b9, 0x300, 0x0, 0x3b9, 0x301, 0x0, 0x3b9, 0x304, 0x0, 0x3b9, 0x306, 0x0, 0x3b9, 0x308, 0x0, 0x3b9, 0x308, 0x300, 0x0, 0x3b9, 0x308, 0x301, 0x0, 0x3b9, 0x308, 0x342, 0x0, 0x3b9, 0x313, 0x0, 0x3b9, 0x313, 0x300, 0x0, 0x3b9, 0x313, 0x301, 0x0, 0x3b9, 0x313, 0x342, 0x0, 0x3b9, 0x314, 0x0, 0x3b9, 0x314, 0x300, 0x0, 0x3b9, 0x314, 0x301, 0x0, 0x3b9, 0x314, 0x342, 0x0, 0x3b9, 0x342, 0x0, 0x3ba, 0x0, 0x3bb, 0x0, 0x3bc, 0x0, 0x3bc, 0x41, 0x0, 0x3bc, 0x46, 0x0, 0x3bc, 0x56, 0x0, 0x3bc, 0x57, 0x0, 0x3bc, 0x67, 0x0, 0x3bc, 0x6c, 0x0, 0x3bc, 0x6d, 0x0, 0x3bc, 0x73, 0x0, 0x3bd, 0x0, 0x3be, 0x0, 0x3bf, 0x0, 0x3bf, 0x300, 0x0, 0x3bf, 0x301, 0x0, 0x3bf, 0x313, 0x0, 0x3bf, 0x313, 0x300, 0x0, 0x3bf, 0x313, 0x301, 0x0, 0x3bf, 0x314, 0x0, 0x3bf, 0x314, 0x300, 0x0, 0x3bf, 0x314, 0x301, 0x0, 0x3c0, 0x0, 0x3c1, 0x0, 0x3c1, 0x313, 0x0, 0x3c1, 0x314, 0x0, 0x3c2, 0x0, 0x3c3, 0x0, 0x3c4, 0x0, 0x3c5, 0x0, 0x3c5, 0x300, 0x0, 0x3c5, 0x301, 0x0, 0x3c5, 0x304, 0x0, 0x3c5, 0x306, 0x0, 0x3c5, 0x308, 0x0, 0x3c5, 0x308, 0x300, 0x0, 0x3c5, 0x308, 0x301, 0x0, 0x3c5, 0x308, 0x342, 0x0, 0x3c5, 0x313, 0x0, 0x3c5, 0x313, 0x300, 0x0, 0x3c5, 0x313, 0x301, 0x0, 0x3c5, 0x313, 0x342, 0x0, 0x3c5, 0x314, 0x0, 0x3c5, 0x314, 0x300, 0x0, 0x3c5, 0x314, 0x301, 0x0, 0x3c5, 0x314, 0x342, 0x0, 0x3c5, 0x342, 0x0, 0x3c6, 0x0, 0x3c7, 0x0, 0x3c8, 0x0, 0x3c9, 0x0, 0x3c9, 0x300, 0x0, 0x3c9, 0x300, 0x345, 0x0, 0x3c9, 0x301, 0x0, 0x3c9, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x0, 0x3c9, 0x313, 0x300, 0x0, 0x3c9, 0x313, 0x300, 0x345, 0x0, 0x3c9, 0x313, 0x301, 0x0, 0x3c9, 0x313, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x342, 0x0, 0x3c9, 0x313, 0x342, 0x345, 0x0, 0x3c9, 0x313, 0x345, 0x0, 0x3c9, 0x314, 0x0, 0x3c9, 0x314, 0x300, 0x0, 0x3c9, 0x314, 0x300, 0x345, 0x0, 0x3c9, 0x314, 0x301, 0x0, 0x3c9, 0x314, 0x301, 0x345, 0x0, 0x3c9, 0x314, 0x342, 0x0, 0x3c9, 0x314, 0x342, 0x345, 0x0, 0x3c9, 0x314, 0x345, 0x0, 0x3c9, 0x342, 0x0, 0x3c9, 0x342, 0x345, 0x0, 0x3c9, 0x345, 0x0, 0x3dc, 0x0, 0x3dd, 0x0, 0x406, 0x308, 0x0, 0x410, 0x306, 0x0, 0x410, 0x308, 0x0, 0x413, 0x301, 0x0, 0x415, 0x300, 0x0, 0x415, 0x306, 0x0, 0x415, 0x308, 0x0, 0x416, 0x306, 0x0, 0x416, 0x308, 0x0, 0x417, 0x308, 0x0, 0x418, 0x300, 0x0, 0x418, 0x304, 0x0, 0x418, 0x306, 0x0, 0x418, 0x308, 0x0, 0x41a, 0x301, 0x0, 0x41e, 0x308, 0x0, 0x423, 0x304, 0x0, 0x423, 0x306, 0x0, 0x423, 0x308, 0x0, 0x423, 0x30b, 0x0, 0x427, 0x308, 0x0, 0x42b, 0x308, 0x0, 0x42d, 0x308, 0x0, 0x430, 0x0, 0x430, 0x306, 0x0, 0x430, 0x308, 0x0, 0x431, 0x0, 0x432, 0x0, 0x433, 0x0, 0x433, 0x301, 0x0, 0x434, 0x0, 0x435, 0x0, 0x435, 0x300, 0x0, 0x435, 0x306, 0x0, 0x435, 0x308, 0x0, 0x436, 0x0, 0x436, 0x306, 0x0, 0x436, 0x308, 0x0, 0x437, 0x0, 0x437, 0x308, 0x0, 0x438, 0x0, 0x438, 0x300, 0x0, 0x438, 0x304, 0x0, 0x438, 0x306, 0x0, 0x438, 0x308, 0x0, 0x43a, 0x0, 0x43a, 0x301, 0x0, 0x43b, 0x0, 0x43c, 0x0, 0x43d, 0x0, 0x43e, 0x0, 0x43e, 0x308, 0x0, 0x43f, 0x0, 0x440, 0x0, 0x441, 0x0, 0x442, 0x0, 0x443, 0x0, 0x443, 0x304, 0x0, 0x443, 0x306, 0x0, 0x443, 0x308, 0x0, 0x443, 0x30b, 0x0, 0x444, 0x0, 0x445, 0x0, 0x446, 0x0, 0x447, 0x0, 0x447, 0x308, 0x0, 0x448, 0x0, 0x44a, 0x0, 0x44b, 0x0, 0x44b, 0x308, 0x0, 0x44c, 0x0, 0x44d, 0x0, 0x44d, 0x308, 0x0, 0x44e, 0x0, 0x455, 0x0, 0x456, 0x0, 0x456, 0x308, 0x0, 0x458, 0x0, 0x45f, 0x0, 0x474, 0x30f, 0x0, 0x475, 0x30f, 0x0, 0x491, 0x0, 0x4ab, 0x0, 0x4af, 0x0, 0x4b1, 0x0, 0x4cf, 0x0, 0x4d8, 0x308, 0x0, 0x4d9, 0x0, 0x4d9, 0x308, 0x0, 0x4e8, 0x308, 0x0, 0x4e9, 0x0, 0x4e9, 0x308, 0x0, 0x565, 0x582, 0x0, 0x574, 0x565, 0x0, 0x574, 0x56b, 0x0, 0x574, 0x56d, 0x0, 0x574, 0x576, 0x0, 0x57e, 0x576, 0x0, 0x5d0, 0x0, 0x5d0, 0x5b7, 0x0, 0x5d0, 0x5b8, 0x0, 0x5d0, 0x5bc, 0x0, 0x5d0, 0x5dc, 0x0, 0x5d1, 0x0, 0x5d1, 0x5bc, 0x0, 0x5d1, 0x5bf, 0x0, 0x5d2, 0x0, 0x5d2, 0x5bc, 0x0, 0x5d3, 0x0, 0x5d3, 0x5bc, 0x0, 0x5d4, 0x0, 0x5d4, 0x5bc, 0x0, 0x5d5, 0x5b9, 0x0, 0x5d5, 0x5bc, 0x0, 0x5d6, 0x5bc, 0x0, 0x5d8, 0x5bc, 0x0, 0x5d9, 0x5b4, 0x0, 0x5d9, 0x5bc, 0x0, 0x5da, 0x5bc, 0x0, 0x5db, 0x0, 0x5db, 0x5bc, 0x0, 0x5db, 0x5bf, 0x0, 0x5dc, 0x0, 0x5dc, 0x5bc, 0x0, 0x5dd, 0x0, 0x5de, 0x5bc, 0x0, 0x5e0, 0x5bc, 0x0, 0x5e1, 0x5bc, 0x0, 0x5e2, 0x0, 0x5e3, 0x5bc, 0x0, 0x5e4, 0x5bc, 0x0, 0x5e4, 0x5bf, 0x0, 0x5e6, 0x5bc, 0x0, 0x5e7, 0x5bc, 0x0, 0x5e8, 0x0, 0x5e8, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x5c1, 0x0, 0x5e9, 0x5bc, 0x5c2, 0x0, 0x5e9, 0x5c1, 0x0, 0x5e9, 0x5c2, 0x0, 0x5ea, 0x0, 0x5ea, 0x5bc, 0x0, 0x5f2, 0x5b7, 0x0, 0x621, 0x0, 0x627, 0x0, 0x627, 0x643, 0x628, 0x631, 0x0, 0x627, 0x644, 0x644, 0x647, 0x0, 0x627, 0x64b, 0x0, 0x627, 0x653, 0x0, 0x627, 0x654, 0x0, 0x627, 0x655, 0x0, 0x627, 0x674, 0x0, 0x628, 0x0, 0x628, 0x62c, 0x0, 0x628, 0x62d, 0x0, 0x628, 0x62d, 0x64a, 0x0, 0x628, 0x62e, 0x0, 0x628, 0x62e, 0x64a, 0x0, 0x628, 0x631, 0x0, 0x628, 0x632, 0x0, 0x628, 0x645, 0x0, 0x628, 0x646, 0x0, 0x628, 0x647, 0x0, 0x628, 0x649, 0x0, 0x628, 0x64a, 0x0, 0x629, 0x0, 0x62a, 0x0, 0x62a, 0x62c, 0x0, 0x62a, 0x62c, 0x645, 0x0, 0x62a, 0x62c, 0x649, 0x0, 0x62a, 0x62c, 0x64a, 0x0, 0x62a, 0x62d, 0x0, 0x62a, 0x62d, 0x62c, 0x0, 0x62a, 0x62d, 0x645, 0x0, 0x62a, 0x62e, 0x0, 0x62a, 0x62e, 0x645, 0x0, 0x62a, 0x62e, 0x649, 0x0, 0x62a, 0x62e, 0x64a, 0x0, 0x62a, 0x631, 0x0, 0x62a, 0x632, 0x0, 0x62a, 0x645, 0x0, 0x62a, 0x645, 0x62c, 0x0, 0x62a, 0x645, 0x62d, 0x0, 0x62a, 0x645, 0x62e, 0x0, 0x62a, 0x645, 0x649, 0x0, 0x62a, 0x645, 0x64a, 0x0, 0x62a, 0x646, 0x0, 0x62a, 0x647, 0x0, 0x62a, 0x649, 0x0, 0x62a, 0x64a, 0x0, 0x62b, 0x0, 0x62b, 0x62c, 0x0, 0x62b, 0x631, 0x0, 0x62b, 0x632, 0x0, 0x62b, 0x645, 0x0, 0x62b, 0x646, 0x0, 0x62b, 0x647, 0x0, 0x62b, 0x649, 0x0, 0x62b, 0x64a, 0x0, 0x62c, 0x0, 0x62c, 0x62d, 0x0, 0x62c, 0x62d, 0x649, 0x0, 0x62c, 0x62d, 0x64a, 0x0, 0x62c, 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647, 0x0, 0x62c, 0x645, 0x0, 0x62c, 0x645, 0x62d, 0x0, 0x62c, 0x645, 0x649, 0x0, 0x62c, 0x645, 0x64a, 0x0, 0x62c, 0x649, 0x0, 0x62c, 0x64a, 0x0, 0x62d, 0x0, 0x62d, 0x62c, 0x0, 0x62d, 0x62c, 0x64a, 0x0, 0x62d, 0x645, 0x0, 0x62d, 0x645, 0x649, 0x0, 0x62d, 0x645, 0x64a, 0x0, 0x62d, 0x649, 0x0, 0x62d, 0x64a, 0x0, 0x62e, 0x0, 0x62e, 0x62c, 0x0, 0x62e, 0x62d, 0x0, 0x62e, 0x645, 0x0, 0x62e, 0x649, 0x0, 0x62e, 0x64a, 0x0, 0x62f, 0x0, 0x630, 0x0, 0x630, 0x670, 0x0, 0x631, 0x0, 0x631, 0x633, 0x648, 0x644, 0x0, 0x631, 0x670, 0x0, 0x631, 0x6cc, 0x627, 0x644, 0x0, 0x632, 0x0, 0x633, 0x0, 0x633, 0x62c, 0x0, 0x633, 0x62c, 0x62d, 0x0, 0x633, 0x62c, 0x649, 0x0, 0x633, 0x62d, 0x0, 0x633, 0x62d, 0x62c, 0x0, 0x633, 0x62e, 0x0, 0x633, 0x62e, 0x649, 0x0, 0x633, 0x62e, 0x64a, 0x0, 0x633, 0x631, 0x0, 0x633, 0x645, 0x0, 0x633, 0x645, 0x62c, 0x0, 0x633, 0x645, 0x62d, 0x0, 0x633, 0x645, 0x645, 0x0, 0x633, 0x647, 0x0, 0x633, 0x649, 0x0, 0x633, 0x64a, 0x0, 0x634, 0x0, 0x634, 0x62c, 0x0, 0x634, 0x62c, 0x64a, 0x0, 0x634, 0x62d, 0x0, 0x634, 0x62d, 0x645, 0x0, 0x634, 0x62d, 0x64a, 0x0, 0x634, 0x62e, 0x0, 0x634, 0x631, 0x0, 0x634, 0x645, 0x0, 0x634, 0x645, 0x62e, 0x0, 0x634, 0x645, 0x645, 0x0, 0x634, 0x647, 0x0, 0x634, 0x649, 0x0, 0x634, 0x64a, 0x0, 0x635, 0x0, 0x635, 0x62d, 0x0, 0x635, 0x62d, 0x62d, 0x0, 0x635, 0x62d, 0x64a, 0x0, 0x635, 0x62e, 0x0, 0x635, 0x631, 0x0, 0x635, 0x644, 0x639, 0x645, 0x0, 0x635, 0x644, 0x649, 0x0, 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, 0x644, 0x645, 0x0, 0x635, 0x644, 0x6d2, 0x0, 0x635, 0x645, 0x0, 0x635, 0x645, 0x645, 0x0, 0x635, 0x649, 0x0, 0x635, 0x64a, 0x0, 0x636, 0x0, 0x636, 0x62c, 0x0, 0x636, 0x62d, 0x0, 0x636, 0x62d, 0x649, 0x0, 0x636, 0x62d, 0x64a, 0x0, 0x636, 0x62e, 0x0, 0x636, 0x62e, 0x645, 0x0, 0x636, 0x631, 0x0, 0x636, 0x645, 0x0, 0x636, 0x649, 0x0, 0x636, 0x64a, 0x0, 0x637, 0x0, 0x637, 0x62d, 0x0, 0x637, 0x645, 0x0, 0x637, 0x645, 0x62d, 0x0, 0x637, 0x645, 0x645, 0x0, 0x637, 0x645, 0x64a, 0x0, 0x637, 0x649, 0x0, 0x637, 0x64a, 0x0, 0x638, 0x0, 0x638, 0x645, 0x0, 0x639, 0x0, 0x639, 0x62c, 0x0, 0x639, 0x62c, 0x645, 0x0, 0x639, 0x644, 0x64a, 0x647, 0x0, 0x639, 0x645, 0x0, 0x639, 0x645, 0x645, 0x0, 0x639, 0x645, 0x649, 0x0, 0x639, 0x645, 0x64a, 0x0, 0x639, 0x649, 0x0, 0x639, 0x64a, 0x0, 0x63a, 0x0, 0x63a, 0x62c, 0x0, 0x63a, 0x645, 0x0, 0x63a, 0x645, 0x645, 0x0, 0x63a, 0x645, 0x649, 0x0, 0x63a, 0x645, 0x64a, 0x0, 0x63a, 0x649, 0x0, 0x63a, 0x64a, 0x0, 0x640, 0x64b, 0x0, 0x640, 0x64e, 0x0, 0x640, 0x64e, 0x651, 0x0, 0x640, 0x64f, 0x0, 0x640, 0x64f, 0x651, 0x0, 0x640, 0x650, 0x0, 0x640, 0x650, 0x651, 0x0, 0x640, 0x651, 0x0, 0x640, 0x652, 0x0, 0x641, 0x0, 0x641, 0x62c, 0x0, 0x641, 0x62d, 0x0, 0x641, 0x62e, 0x0, 0x641, 0x62e, 0x645, 0x0, 0x641, 0x645, 0x0, 0x641, 0x645, 0x64a, 0x0, 0x641, 0x649, 0x0, 0x641, 0x64a, 0x0, 0x642, 0x0, 0x642, 0x62d, 0x0, 0x642, 0x644, 0x6d2, 0x0, 0x642, 0x645, 0x0, 0x642, 0x645, 0x62d, 0x0, 0x642, 0x645, 0x645, 0x0, 0x642, 0x645, 0x64a, 0x0, 0x642, 0x649, 0x0, 0x642, 0x64a, 0x0, 0x643, 0x0, 0x643, 0x627, 0x0, 0x643, 0x62c, 0x0, 0x643, 0x62d, 0x0, 0x643, 0x62e, 0x0, 0x643, 0x644, 0x0, 0x643, 0x645, 0x0, 0x643, 0x645, 0x645, 0x0, 0x643, 0x645, 0x64a, 0x0, 0x643, 0x649, 0x0, 0x643, 0x64a, 0x0, 0x644, 0x0, 0x644, 0x627, 0x0, 0x644, 0x627, 0x653, 0x0, 0x644, 0x627, 0x654, 0x0, 0x644, 0x627, 0x655, 0x0, 0x644, 0x62c, 0x0, 0x644, 0x62c, 0x62c, 0x0, 0x644, 0x62c, 0x645, 0x0, 0x644, 0x62c, 0x64a, 0x0, 0x644, 0x62d, 0x0, 0x644, 0x62d, 0x645, 0x0, 0x644, 0x62d, 0x649, 0x0, 0x644, 0x62d, 0x64a, 0x0, 0x644, 0x62e, 0x0, 0x644, 0x62e, 0x645, 0x0, 0x644, 0x645, 0x0, 0x644, 0x645, 0x62d, 0x0, 0x644, 0x645, 0x64a, 0x0, 0x644, 0x647, 0x0, 0x644, 0x649, 0x0, 0x644, 0x64a, 0x0, 0x645, 0x0, 0x645, 0x627, 0x0, 0x645, 0x62c, 0x0, 0x645, 0x62c, 0x62d, 0x0, 0x645, 0x62c, 0x62e, 0x0, 0x645, 0x62c, 0x645, 0x0, 0x645, 0x62c, 0x64a, 0x0, 0x645, 0x62d, 0x0, 0x645, 0x62d, 0x62c, 0x0, 0x645, 0x62d, 0x645, 0x0, 0x645, 0x62d, 0x645, 0x62f, 0x0, 0x645, 0x62d, 0x64a, 0x0, 0x645, 0x62e, 0x0, 0x645, 0x62e, 0x62c, 0x0, 0x645, 0x62e, 0x645, 0x0, 0x645, 0x62e, 0x64a, 0x0, 0x645, 0x645, 0x0, 0x645, 0x645, 0x64a, 0x0, 0x645, 0x649, 0x0, 0x645, 0x64a, 0x0, 0x646, 0x0, 0x646, 0x62c, 0x0, 0x646, 0x62c, 0x62d, 0x0, 0x646, 0x62c, 0x645, 0x0, 0x646, 0x62c, 0x649, 0x0, 0x646, 0x62c, 0x64a, 0x0, 0x646, 0x62d, 0x0, 0x646, 0x62d, 0x645, 0x0, 0x646, 0x62d, 0x649, 0x0, 0x646, 0x62d, 0x64a, 0x0, 0x646, 0x62e, 0x0, 0x646, 0x631, 0x0, 0x646, 0x632, 0x0, 0x646, 0x645, 0x0, 0x646, 0x645, 0x649, 0x0, 0x646, 0x645, 0x64a, 0x0, 0x646, 0x646, 0x0, 0x646, 0x647, 0x0, 0x646, 0x649, 0x0, 0x646, 0x64a, 0x0, 0x647, 0x0, 0x647, 0x62c, 0x0, 0x647, 0x645, 0x0, 0x647, 0x645, 0x62c, 0x0, 0x647, 0x645, 0x645, 0x0, 0x647, 0x649, 0x0, 0x647, 0x64a, 0x0, 0x647, 0x670, 0x0, 0x648, 0x0, 0x648, 0x633, 0x644, 0x645, 0x0, 0x648, 0x654, 0x0, 0x648, 0x674, 0x0, 0x649, 0x0, 0x649, 0x670, 0x0, 0x64a, 0x0, 0x64a, 0x62c, 0x0, 0x64a, 0x62c, 0x64a, 0x0, 0x64a, 0x62d, 0x0, 0x64a, 0x62d, 0x64a, 0x0, 0x64a, 0x62e, 0x0, 0x64a, 0x631, 0x0, 0x64a, 0x632, 0x0, 0x64a, 0x645, 0x0, 0x64a, 0x645, 0x645, 0x0, 0x64a, 0x645, 0x64a, 0x0, 0x64a, 0x646, 0x0, 0x64a, 0x647, 0x0, 0x64a, 0x649, 0x0, 0x64a, 0x64a, 0x0, 0x64a, 0x654, 0x0, 0x64a, 0x654, 0x627, 0x0, 0x64a, 0x654, 0x62c, 0x0, 0x64a, 0x654, 0x62d, 0x0, 0x64a, 0x654, 0x62e, 0x0, 0x64a, 0x654, 0x631, 0x0, 0x64a, 0x654, 0x632, 0x0, 0x64a, 0x654, 0x645, 0x0, 0x64a, 0x654, 0x646, 0x0, 0x64a, 0x654, 0x647, 0x0, 0x64a, 0x654, 0x648, 0x0, 0x64a, 0x654, 0x649, 0x0, 0x64a, 0x654, 0x64a, 0x0, 0x64a, 0x654, 0x6c6, 0x0, 0x64a, 0x654, 0x6c7, 0x0, 0x64a, 0x654, 0x6c8, 0x0, 0x64a, 0x654, 0x6d0, 0x0, 0x64a, 0x654, 0x6d5, 0x0, 0x64a, 0x674, 0x0, 0x66e, 0x0, 0x66f, 0x0, 0x671, 0x0, 0x679, 0x0, 0x67a, 0x0, 0x67b, 0x0, 0x67e, 0x0, 0x67f, 0x0, 0x680, 0x0, 0x683, 0x0, 0x684, 0x0, 0x686, 0x0, 0x687, 0x0, 0x688, 0x0, 0x68c, 0x0, 0x68d, 0x0, 0x68e, 0x0, 0x691, 0x0, 0x698, 0x0, 0x6a1, 0x0, 0x6a4, 0x0, 0x6a6, 0x0, 0x6a9, 0x0, 0x6ad, 0x0, 0x6af, 0x0, 0x6b1, 0x0, 0x6b3, 0x0, 0x6ba, 0x0, 0x6bb, 0x0, 0x6be, 0x0, 0x6c1, 0x0, 0x6c1, 0x654, 0x0, 0x6c5, 0x0, 0x6c6, 0x0, 0x6c7, 0x0, 0x6c7, 0x674, 0x0, 0x6c8, 0x0, 0x6c9, 0x0, 0x6cb, 0x0, 0x6cc, 0x0, 0x6d0, 0x0, 0x6d2, 0x0, 0x6d2, 0x654, 0x0, 0x6d5, 0x654, 0x0, 0x915, 0x93c, 0x0, 0x916, 0x93c, 0x0, 0x917, 0x93c, 0x0, 0x91c, 0x93c, 0x0, 0x921, 0x93c, 0x0, 0x922, 0x93c, 0x0, 0x928, 0x93c, 0x0, 0x92b, 0x93c, 0x0, 0x92f, 0x93c, 0x0, 0x930, 0x93c, 0x0, 0x933, 0x93c, 0x0, 0x9a1, 0x9bc, 0x0, 0x9a2, 0x9bc, 0x0, 0x9af, 0x9bc, 0x0, 0x9c7, 0x9be, 0x0, 0x9c7, 0x9d7, 0x0, 0xa16, 0xa3c, 0x0, 0xa17, 0xa3c, 0x0, 0xa1c, 0xa3c, 0x0, 0xa2b, 0xa3c, 0x0, 0xa32, 0xa3c, 0x0, 0xa38, 0xa3c, 0x0, 0xb21, 0xb3c, 0x0, 0xb22, 0xb3c, 0x0, 0xb47, 0xb3e, 0x0, 0xb47, 0xb56, 0x0, 0xb47, 0xb57, 0x0, 0xb92, 0xbd7, 0x0, 0xbc6, 0xbbe, 0x0, 0xbc6, 0xbd7, 0x0, 0xbc7, 0xbbe, 0x0, 0xc46, 0xc56, 0x0, 0xcbf, 0xcd5, 0x0, 0xcc6, 0xcc2, 0x0, 0xcc6, 0xcc2, 0xcd5, 0x0, 0xcc6, 0xcd5, 0x0, 0xcc6, 0xcd6, 0x0, 0xd46, 0xd3e, 0x0, 0xd46, 0xd57, 0x0, 0xd47, 0xd3e, 0x0, 0xdd9, 0xdca, 0x0, 0xdd9, 0xdcf, 0x0, 0xdd9, 0xdcf, 0xdca, 0x0, 0xdd9, 0xddf, 0x0, 0xe4d, 0xe32, 0x0, 0xeab, 0xe99, 0x0, 0xeab, 0xea1, 0x0, 0xecd, 0xeb2, 0x0, 0xf0b, 0x0, 0xf40, 0xfb5, 0x0, 0xf42, 0xfb7, 0x0, 0xf4c, 0xfb7, 0x0, 0xf51, 0xfb7, 0x0, 0xf56, 0xfb7, 0x0, 0xf5b, 0xfb7, 0x0, 0xf71, 0xf72, 0x0, 0xf71, 0xf74, 0x0, 0xf71, 0xf80, 0x0, 0xf90, 0xfb5, 0x0, 0xf92, 0xfb7, 0x0, 0xf9c, 0xfb7, 0x0, 0xfa1, 0xfb7, 0x0, 0xfa6, 0xfb7, 0x0, 0xfab, 0xfb7, 0x0, 0xfb2, 0xf71, 0xf80, 0x0, 0xfb2, 0xf80, 0x0, 0xfb3, 0xf71, 0xf80, 0x0, 0xfb3, 0xf80, 0x0, 0x1025, 0x102e, 0x0, 0x10dc, 0x0, 0x1100, 0x0, 0x1100, 0x1161, 0x0, 0x1101, 0x0, 0x1102, 0x0, 0x1102, 0x1161, 0x0, 0x1103, 0x0, 0x1103, 0x1161, 0x0, 0x1104, 0x0, 0x1105, 0x0, 0x1105, 0x1161, 0x0, 0x1106, 0x0, 0x1106, 0x1161, 0x0, 0x1107, 0x0, 0x1107, 0x1161, 0x0, 0x1108, 0x0, 0x1109, 0x0, 0x1109, 0x1161, 0x0, 0x110a, 0x0, 0x110b, 0x0, 0x110b, 0x1161, 0x0, 0x110b, 0x116e, 0x0, 0x110c, 0x0, 0x110c, 0x1161, 0x0, 0x110c, 0x116e, 0x110b, 0x1174, 0x0, 0x110d, 0x0, 0x110e, 0x0, 0x110e, 0x1161, 0x0, 0x110e, 0x1161, 0x11b7, 0x1100, 0x1169, 0x0, 0x110f, 0x0, 0x110f, 0x1161, 0x0, 0x1110, 0x0, 0x1110, 0x1161, 0x0, 0x1111, 0x0, 0x1111, 0x1161, 0x0, 0x1112, 0x0, 0x1112, 0x1161, 0x0, 0x1114, 0x0, 0x1115, 0x0, 0x111a, 0x0, 0x111c, 0x0, 0x111d, 0x0, 0x111e, 0x0, 0x1120, 0x0, 0x1121, 0x0, 0x1122, 0x0, 0x1123, 0x0, 0x1127, 0x0, 0x1129, 0x0, 0x112b, 0x0, 0x112c, 0x0, 0x112d, 0x0, 0x112e, 0x0, 0x112f, 0x0, 0x1132, 0x0, 0x1136, 0x0, 0x1140, 0x0, 0x1147, 0x0, 0x114c, 0x0, 0x1157, 0x0, 0x1158, 0x0, 0x1159, 0x0, 0x1160, 0x0, 0x1161, 0x0, 0x1162, 0x0, 0x1163, 0x0, 0x1164, 0x0, 0x1165, 0x0, 0x1166, 0x0, 0x1167, 0x0, 0x1168, 0x0, 0x1169, 0x0, 0x116a, 0x0, 0x116b, 0x0, 0x116c, 0x0, 0x116d, 0x0, 0x116e, 0x0, 0x116f, 0x0, 0x1170, 0x0, 0x1171, 0x0, 0x1172, 0x0, 0x1173, 0x0, 0x1174, 0x0, 0x1175, 0x0, 0x1184, 0x0, 0x1185, 0x0, 0x1188, 0x0, 0x1191, 0x0, 0x1192, 0x0, 0x1194, 0x0, 0x119e, 0x0, 0x11a1, 0x0, 0x11aa, 0x0, 0x11ac, 0x0, 0x11ad, 0x0, 0x11b0, 0x0, 0x11b1, 0x0, 0x11b2, 0x0, 0x11b3, 0x0, 0x11b4, 0x0, 0x11b5, 0x0, 0x11c7, 0x0, 0x11c8, 0x0, 0x11cc, 0x0, 0x11ce, 0x0, 0x11d3, 0x0, 0x11d7, 0x0, 0x11d9, 0x0, 0x11dd, 0x0, 0x11df, 0x0, 0x11f1, 0x0, 0x11f2, 0x0, 0x1b05, 0x1b35, 0x0, 0x1b07, 0x1b35, 0x0, 0x1b09, 0x1b35, 0x0, 0x1b0b, 0x1b35, 0x0, 0x1b0d, 0x1b35, 0x0, 0x1b11, 0x1b35, 0x0, 0x1b3a, 0x1b35, 0x0, 0x1b3c, 0x1b35, 0x0, 0x1b3e, 0x1b35, 0x0, 0x1b3f, 0x1b35, 0x0, 0x1b42, 0x1b35, 0x0, 0x1d02, 0x0, 0x1d16, 0x0, 0x1d17, 0x0, 0x1d1c, 0x0, 0x1d1d, 0x0, 0x1d25, 0x0, 0x1d7b, 0x0, 0x1d85, 0x0, 0x1d91, 0x0, 0x2010, 0x0, 0x2013, 0x0, 0x2014, 0x0, 0x2032, 0x2032, 0x0, 0x2032, 0x2032, 0x2032, 0x0, 0x2032, 0x2032, 0x2032, 0x2032, 0x0, 0x2035, 0x2035, 0x0, 0x2035, 0x2035, 0x2035, 0x0, 0x20a9, 0x0, 0x2190, 0x0, 0x2190, 0x338, 0x0, 0x2191, 0x0, 0x2192, 0x0, 0x2192, 0x338, 0x0, 0x2193, 0x0, 0x2194, 0x338, 0x0, 0x21d0, 0x338, 0x0, 0x21d2, 0x338, 0x0, 0x21d4, 0x338, 0x0, 0x2202, 0x0, 0x2203, 0x338, 0x0, 0x2207, 0x0, 0x2208, 0x338, 0x0, 0x220b, 0x338, 0x0, 0x2211, 0x0, 0x2212, 0x0, 0x2223, 0x338, 0x0, 0x2225, 0x338, 0x0, 0x222b, 0x222b, 0x0, 0x222b, 0x222b, 0x222b, 0x0, 0x222b, 0x222b, 0x222b, 0x222b, 0x0, 0x222e, 0x222e, 0x0, 0x222e, 0x222e, 0x222e, 0x0, 0x223c, 0x338, 0x0, 0x2243, 0x338, 0x0, 0x2245, 0x338, 0x0, 0x2248, 0x338, 0x0, 0x224d, 0x338, 0x0, 0x2261, 0x338, 0x0, 0x2264, 0x338, 0x0, 0x2265, 0x338, 0x0, 0x2272, 0x338, 0x0, 0x2273, 0x338, 0x0, 0x2276, 0x338, 0x0, 0x2277, 0x338, 0x0, 0x227a, 0x338, 0x0, 0x227b, 0x338, 0x0, 0x227c, 0x338, 0x0, 0x227d, 0x338, 0x0, 0x2282, 0x338, 0x0, 0x2283, 0x338, 0x0, 0x2286, 0x338, 0x0, 0x2287, 0x338, 0x0, 0x2291, 0x338, 0x0, 0x2292, 0x338, 0x0, 0x22a2, 0x338, 0x0, 0x22a8, 0x338, 0x0, 0x22a9, 0x338, 0x0, 0x22ab, 0x338, 0x0, 0x22b2, 0x338, 0x0, 0x22b3, 0x338, 0x0, 0x22b4, 0x338, 0x0, 0x22b5, 0x338, 0x0, 0x2502, 0x0, 0x25a0, 0x0, 0x25cb, 0x0, 0x2985, 0x0, 0x2986, 0x0, 0x2add, 0x338, 0x0, 0x2c71, 0x0, 0x2d61, 0x0, 0x3001, 0x0, 0x3002, 0x0, 0x3008, 0x0, 0x3009, 0x0, 0x300a, 0x0, 0x300b, 0x0, 0x300c, 0x0, 0x300d, 0x0, 0x300e, 0x0, 0x300f, 0x0, 0x3010, 0x0, 0x3011, 0x0, 0x3012, 0x0, 0x3014, 0x0, 0x3014, 0x53, 0x3015, 0x0, 0x3014, 0x4e09, 0x3015, 0x0, 0x3014, 0x4e8c, 0x3015, 0x0, 0x3014, 0x52dd, 0x3015, 0x0, 0x3014, 0x5b89, 0x3015, 0x0, 0x3014, 0x6253, 0x3015, 0x0, 0x3014, 0x6557, 0x3015, 0x0, 0x3014, 0x672c, 0x3015, 0x0, 0x3014, 0x70b9, 0x3015, 0x0, 0x3014, 0x76d7, 0x3015, 0x0, 0x3015, 0x0, 0x3016, 0x0, 0x3017, 0x0, 0x3046, 0x3099, 0x0, 0x304b, 0x3099, 0x0, 0x304d, 0x3099, 0x0, 0x304f, 0x3099, 0x0, 0x3051, 0x3099, 0x0, 0x3053, 0x3099, 0x0, 0x3055, 0x3099, 0x0, 0x3057, 0x3099, 0x0, 0x3059, 0x3099, 0x0, 0x305b, 0x3099, 0x0, 0x305d, 0x3099, 0x0, 0x305f, 0x3099, 0x0, 0x3061, 0x3099, 0x0, 0x3064, 0x3099, 0x0, 0x3066, 0x3099, 0x0, 0x3068, 0x3099, 0x0, 0x306f, 0x3099, 0x0, 0x306f, 0x309a, 0x0, 0x3072, 0x3099, 0x0, 0x3072, 0x309a, 0x0, 0x3075, 0x3099, 0x0, 0x3075, 0x309a, 0x0, 0x3078, 0x3099, 0x0, 0x3078, 0x309a, 0x0, 0x307b, 0x304b, 0x0, 0x307b, 0x3099, 0x0, 0x307b, 0x309a, 0x0, 0x3088, 0x308a, 0x0, 0x3099, 0x0, 0x309a, 0x0, 0x309d, 0x3099, 0x0, 0x30a1, 0x0, 0x30a2, 0x0, 0x30a2, 0x30cf, 0x309a, 0x30fc, 0x30c8, 0x0, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x0, 0x30a2, 0x30f3, 0x30d8, 0x309a, 0x30a2, 0x0, 0x30a2, 0x30fc, 0x30eb, 0x0, 0x30a3, 0x0, 0x30a4, 0x0, 0x30a4, 0x30cb, 0x30f3, 0x30af, 0x3099, 0x0, 0x30a4, 0x30f3, 0x30c1, 0x0, 0x30a5, 0x0, 0x30a6, 0x0, 0x30a6, 0x3099, 0x0, 0x30a6, 0x30a9, 0x30f3, 0x0, 0x30a7, 0x0, 0x30a8, 0x0, 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c8, 0x3099, 0x0, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x0, 0x30a9, 0x0, 0x30aa, 0x0, 0x30aa, 0x30f3, 0x30b9, 0x0, 0x30aa, 0x30fc, 0x30e0, 0x0, 0x30ab, 0x0, 0x30ab, 0x3099, 0x0, 0x30ab, 0x3099, 0x30ed, 0x30f3, 0x0, 0x30ab, 0x3099, 0x30f3, 0x30de, 0x0, 0x30ab, 0x30a4, 0x30ea, 0x0, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x0, 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x0, 0x30ad, 0x0, 0x30ad, 0x3099, 0x0, 0x30ad, 0x3099, 0x30ab, 0x3099, 0x0, 0x30ad, 0x3099, 0x30cb, 0x30fc, 0x0, 0x30ad, 0x3099, 0x30eb, 0x30bf, 0x3099, 0x30fc, 0x0, 0x30ad, 0x30e5, 0x30ea, 0x30fc, 0x0, 0x30ad, 0x30ed, 0x0, 0x30ad, 0x30ed, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x0, 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x0, 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x0, 0x30af, 0x0, 0x30af, 0x3099, 0x0, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x0, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x0, 0x30af, 0x30eb, 0x30bb, 0x3099, 0x30a4, 0x30ed, 0x0, 0x30af, 0x30ed, 0x30fc, 0x30cd, 0x0, 0x30b1, 0x0, 0x30b1, 0x3099, 0x0, 0x30b1, 0x30fc, 0x30b9, 0x0, 0x30b3, 0x0, 0x30b3, 0x3099, 0x0, 0x30b3, 0x30b3, 0x0, 0x30b3, 0x30c8, 0x0, 0x30b3, 0x30eb, 0x30ca, 0x0, 0x30b3, 0x30fc, 0x30db, 0x309a, 0x0, 0x30b5, 0x0, 0x30b5, 0x3099, 0x0, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x0, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x0, 0x30b7, 0x0, 0x30b7, 0x3099, 0x0, 0x30b7, 0x30ea, 0x30f3, 0x30af, 0x3099, 0x0, 0x30b9, 0x0, 0x30b9, 0x3099, 0x0, 0x30bb, 0x0, 0x30bb, 0x3099, 0x0, 0x30bb, 0x30f3, 0x30c1, 0x0, 0x30bb, 0x30f3, 0x30c8, 0x0, 0x30bd, 0x0, 0x30bd, 0x3099, 0x0, 0x30bf, 0x0, 0x30bf, 0x3099, 0x0, 0x30bf, 0x3099, 0x30fc, 0x30b9, 0x0, 0x30c1, 0x0, 0x30c1, 0x3099, 0x0, 0x30c3, 0x0, 0x30c4, 0x0, 0x30c4, 0x3099, 0x0, 0x30c6, 0x0, 0x30c6, 0x3099, 0x0, 0x30c6, 0x3099, 0x30b7, 0x0, 0x30c8, 0x0, 0x30c8, 0x3099, 0x0, 0x30c8, 0x3099, 0x30eb, 0x0, 0x30c8, 0x30f3, 0x0, 0x30ca, 0x0, 0x30ca, 0x30ce, 0x0, 0x30cb, 0x0, 0x30cc, 0x0, 0x30cd, 0x0, 0x30ce, 0x0, 0x30ce, 0x30c3, 0x30c8, 0x0, 0x30cf, 0x0, 0x30cf, 0x3099, 0x0, 0x30cf, 0x3099, 0x30fc, 0x30ec, 0x30eb, 0x0, 0x30cf, 0x309a, 0x0, 0x30cf, 0x309a, 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x0, 0x30cf, 0x309a, 0x30fc, 0x30c4, 0x0, 0x30cf, 0x30a4, 0x30c4, 0x0, 0x30d2, 0x0, 0x30d2, 0x3099, 0x0, 0x30d2, 0x3099, 0x30eb, 0x0, 0x30d2, 0x309a, 0x0, 0x30d2, 0x309a, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0x0, 0x30d2, 0x309a, 0x30af, 0x30eb, 0x0, 0x30d2, 0x309a, 0x30b3, 0x0, 0x30d5, 0x0, 0x30d5, 0x3099, 0x0, 0x30d5, 0x3099, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x0, 0x30d5, 0x309a, 0x0, 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c8, 0x3099, 0x0, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x0, 0x30d5, 0x30e9, 0x30f3, 0x0, 0x30d8, 0x0, 0x30d8, 0x3099, 0x0, 0x30d8, 0x3099, 0x30fc, 0x30bf, 0x0, 0x30d8, 0x309a, 0x0, 0x30d8, 0x309a, 0x30bd, 0x0, 0x30d8, 0x309a, 0x30cb, 0x30d2, 0x0, 0x30d8, 0x309a, 0x30f3, 0x30b9, 0x0, 0x30d8, 0x309a, 0x30fc, 0x30b7, 0x3099, 0x0, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x0, 0x30d8, 0x30eb, 0x30c4, 0x0, 0x30db, 0x0, 0x30db, 0x3099, 0x0, 0x30db, 0x3099, 0x30eb, 0x30c8, 0x0, 0x30db, 0x309a, 0x0, 0x30db, 0x309a, 0x30a4, 0x30f3, 0x30c8, 0x0, 0x30db, 0x309a, 0x30f3, 0x30c8, 0x3099, 0x0, 0x30db, 0x30f3, 0x0, 0x30db, 0x30fc, 0x30eb, 0x0, 0x30db, 0x30fc, 0x30f3, 0x0, 0x30de, 0x0, 0x30de, 0x30a4, 0x30af, 0x30ed, 0x0, 0x30de, 0x30a4, 0x30eb, 0x0, 0x30de, 0x30c3, 0x30cf, 0x0, 0x30de, 0x30eb, 0x30af, 0x0, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x0, 0x30df, 0x0, 0x30df, 0x30af, 0x30ed, 0x30f3, 0x0, 0x30df, 0x30ea, 0x0, 0x30df, 0x30ea, 0x30cf, 0x3099, 0x30fc, 0x30eb, 0x0, 0x30e0, 0x0, 0x30e1, 0x0, 0x30e1, 0x30ab, 0x3099, 0x0, 0x30e1, 0x30ab, 0x3099, 0x30c8, 0x30f3, 0x0, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x0, 0x30e2, 0x0, 0x30e3, 0x0, 0x30e4, 0x0, 0x30e4, 0x30fc, 0x30c8, 0x3099, 0x0, 0x30e4, 0x30fc, 0x30eb, 0x0, 0x30e5, 0x0, 0x30e6, 0x0, 0x30e6, 0x30a2, 0x30f3, 0x0, 0x30e7, 0x0, 0x30e8, 0x0, 0x30e9, 0x0, 0x30ea, 0x0, 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0x0, 0x30ea, 0x30e9, 0x0, 0x30eb, 0x0, 0x30eb, 0x30d2, 0x309a, 0x30fc, 0x0, 0x30eb, 0x30fc, 0x30d5, 0x3099, 0x30eb, 0x0, 0x30ec, 0x0, 0x30ec, 0x30e0, 0x0, 0x30ec, 0x30f3, 0x30c8, 0x30b1, 0x3099, 0x30f3, 0x0, 0x30ed, 0x0, 0x30ef, 0x0, 0x30ef, 0x3099, 0x0, 0x30ef, 0x30c3, 0x30c8, 0x0, 0x30f0, 0x0, 0x30f0, 0x3099, 0x0, 0x30f1, 0x0, 0x30f1, 0x3099, 0x0, 0x30f2, 0x0, 0x30f2, 0x3099, 0x0, 0x30f3, 0x0, 0x30fb, 0x0, 0x30fc, 0x0, 0x30fd, 0x3099, 0x0, 0x349e, 0x0, 0x34b9, 0x0, 0x34bb, 0x0, 0x34df, 0x0, 0x3515, 0x0, 0x36ee, 0x0, 0x36fc, 0x0, 0x3781, 0x0, 0x382f, 0x0, 0x3862, 0x0, 0x387c, 0x0, 0x38c7, 0x0, 0x38e3, 0x0, 0x391c, 0x0, 0x393a, 0x0, 0x3a2e, 0x0, 0x3a6c, 0x0, 0x3ae4, 0x0, 0x3b08, 0x0, 0x3b19, 0x0, 0x3b49, 0x0, 0x3b9d, 0x0, 0x3c18, 0x0, 0x3c4e, 0x0, 0x3d33, 0x0, 0x3d96, 0x0, 0x3eac, 0x0, 0x3eb8, 0x0, 0x3f1b, 0x0, 0x3ffc, 0x0, 0x4008, 0x0, 0x4018, 0x0, 0x4039, 0x0, 0x4046, 0x0, 0x4096, 0x0, 0x40e3, 0x0, 0x412f, 0x0, 0x4202, 0x0, 0x4227, 0x0, 0x42a0, 0x0, 0x4301, 0x0, 0x4334, 0x0, 0x4359, 0x0, 0x43d5, 0x0, 0x43d9, 0x0, 0x440b, 0x0, 0x446b, 0x0, 0x452b, 0x0, 0x455d, 0x0, 0x4561, 0x0, 0x456b, 0x0, 0x45d7, 0x0, 0x45f9, 0x0, 0x4635, 0x0, 0x46be, 0x0, 0x46c7, 0x0, 0x4995, 0x0, 0x49e6, 0x0, 0x4a6e, 0x0, 0x4a76, 0x0, 0x4ab2, 0x0, 0x4b33, 0x0, 0x4bce, 0x0, 0x4cce, 0x0, 0x4ced, 0x0, 0x4cf8, 0x0, 0x4d56, 0x0, 0x4e00, 0x0, 0x4e01, 0x0, 0x4e03, 0x0, 0x4e09, 0x0, 0x4e0a, 0x0, 0x4e0b, 0x0, 0x4e0d, 0x0, 0x4e19, 0x0, 0x4e26, 0x0, 0x4e28, 0x0, 0x4e2d, 0x0, 0x4e32, 0x0, 0x4e36, 0x0, 0x4e38, 0x0, 0x4e39, 0x0, 0x4e3d, 0x0, 0x4e3f, 0x0, 0x4e41, 0x0, 0x4e59, 0x0, 0x4e5d, 0x0, 0x4e82, 0x0, 0x4e85, 0x0, 0x4e86, 0x0, 0x4e8c, 0x0, 0x4e94, 0x0, 0x4ea0, 0x0, 0x4ea4, 0x0, 0x4eae, 0x0, 0x4eba, 0x0, 0x4ec0, 0x0, 0x4ecc, 0x0, 0x4ee4, 0x0, 0x4ee4, 0x548c, 0x0, 0x4f01, 0x0, 0x4f11, 0x0, 0x4f60, 0x0, 0x4f80, 0x0, 0x4f86, 0x0, 0x4f8b, 0x0, 0x4fae, 0x0, 0x4fbb, 0x0, 0x4fbf, 0x0, 0x5002, 0x0, 0x502b, 0x0, 0x507a, 0x0, 0x5099, 0x0, 0x50cf, 0x0, 0x50da, 0x0, 0x50e7, 0x0, 0x512a, 0x0, 0x513f, 0x0, 0x5140, 0x0, 0x5145, 0x0, 0x514d, 0x0, 0x5154, 0x0, 0x5164, 0x0, 0x5165, 0x0, 0x5167, 0x0, 0x5168, 0x0, 0x5169, 0x0, 0x516b, 0x0, 0x516d, 0x0, 0x5177, 0x0, 0x5180, 0x0, 0x5182, 0x0, 0x518d, 0x0, 0x5192, 0x0, 0x5195, 0x0, 0x5196, 0x0, 0x5197, 0x0, 0x5199, 0x0, 0x51a4, 0x0, 0x51ab, 0x0, 0x51ac, 0x0, 0x51b5, 0x0, 0x51b7, 0x0, 0x51c9, 0x0, 0x51cc, 0x0, 0x51dc, 0x0, 0x51de, 0x0, 0x51e0, 0x0, 0x51f5, 0x0, 0x5200, 0x0, 0x5203, 0x0, 0x5207, 0x0, 0x5217, 0x0, 0x521d, 0x0, 0x5229, 0x0, 0x523a, 0x0, 0x523b, 0x0, 0x5246, 0x0, 0x524d, 0x0, 0x5272, 0x0, 0x5277, 0x0, 0x5289, 0x0, 0x529b, 0x0, 0x52a3, 0x0, 0x52b3, 0x0, 0x52b4, 0x0, 0x52c7, 0x0, 0x52c9, 0x0, 0x52d2, 0x0, 0x52de, 0x0, 0x52e4, 0x0, 0x52f5, 0x0, 0x52f9, 0x0, 0x52fa, 0x0, 0x5305, 0x0, 0x5306, 0x0, 0x5315, 0x0, 0x5317, 0x0, 0x531a, 0x0, 0x5338, 0x0, 0x533b, 0x0, 0x533f, 0x0, 0x5341, 0x0, 0x5344, 0x0, 0x5345, 0x0, 0x5349, 0x0, 0x5351, 0x0, 0x5354, 0x0, 0x535a, 0x0, 0x535c, 0x0, 0x5369, 0x0, 0x5370, 0x0, 0x5373, 0x0, 0x5375, 0x0, 0x537d, 0x0, 0x537f, 0x0, 0x5382, 0x0, 0x53b6, 0x0, 0x53c3, 0x0, 0x53c8, 0x0, 0x53ca, 0x0, 0x53cc, 0x0, 0x53df, 0x0, 0x53e3, 0x0, 0x53e5, 0x0, 0x53eb, 0x0, 0x53ef, 0x0, 0x53f1, 0x0, 0x53f3, 0x0, 0x5406, 0x0, 0x5408, 0x0, 0x540d, 0x0, 0x540f, 0x0, 0x541d, 0x0, 0x5438, 0x0, 0x5439, 0x0, 0x5442, 0x0, 0x5448, 0x0, 0x5468, 0x0, 0x549e, 0x0, 0x54a2, 0x0, 0x54bd, 0x0, 0x54f6, 0x0, 0x5510, 0x0, 0x554f, 0x0, 0x5553, 0x0, 0x5555, 0x0, 0x5563, 0x0, 0x5584, 0x0, 0x5587, 0x0, 0x5599, 0x0, 0x559d, 0x0, 0x55ab, 0x0, 0x55b3, 0x0, 0x55b6, 0x0, 0x55c0, 0x0, 0x55c2, 0x0, 0x55e2, 0x0, 0x5606, 0x0, 0x5651, 0x0, 0x5668, 0x0, 0x5674, 0x0, 0x56d7, 0x0, 0x56db, 0x0, 0x56f9, 0x0, 0x5716, 0x0, 0x5717, 0x0, 0x571f, 0x0, 0x5730, 0x0, 0x578b, 0x0, 0x57ce, 0x0, 0x57f4, 0x0, 0x580d, 0x0, 0x5831, 0x0, 0x5832, 0x0, 0x5840, 0x0, 0x585a, 0x0, 0x585e, 0x0, 0x58a8, 0x0, 0x58ac, 0x0, 0x58b3, 0x0, 0x58d8, 0x0, 0x58df, 0x0, 0x58eb, 0x0, 0x58ee, 0x0, 0x58f0, 0x0, 0x58f2, 0x0, 0x58f7, 0x0, 0x5902, 0x0, 0x5906, 0x0, 0x590a, 0x0, 0x5915, 0x0, 0x591a, 0x0, 0x591c, 0x0, 0x5922, 0x0, 0x5927, 0x0, 0x5927, 0x6b63, 0x0, 0x5929, 0x0, 0x5944, 0x0, 0x5948, 0x0, 0x5951, 0x0, 0x5954, 0x0, 0x5962, 0x0, 0x5973, 0x0, 0x59d8, 0x0, 0x59ec, 0x0, 0x5a1b, 0x0, 0x5a27, 0x0, 0x5a62, 0x0, 0x5a66, 0x0, 0x5ab5, 0x0, 0x5b08, 0x0, 0x5b28, 0x0, 0x5b3e, 0x0, 0x5b50, 0x0, 0x5b57, 0x0, 0x5b66, 0x0, 0x5b80, 0x0, 0x5b85, 0x0, 0x5b97, 0x0, 0x5bc3, 0x0, 0x5bd8, 0x0, 0x5be7, 0x0, 0x5bee, 0x0, 0x5bf3, 0x0, 0x5bf8, 0x0, 0x5bff, 0x0, 0x5c06, 0x0, 0x5c0f, 0x0, 0x5c22, 0x0, 0x5c38, 0x0, 0x5c3f, 0x0, 0x5c60, 0x0, 0x5c62, 0x0, 0x5c64, 0x0, 0x5c65, 0x0, 0x5c6e, 0x0, 0x5c71, 0x0, 0x5c8d, 0x0, 0x5cc0, 0x0, 0x5d19, 0x0, 0x5d43, 0x0, 0x5d50, 0x0, 0x5d6b, 0x0, 0x5d6e, 0x0, 0x5d7c, 0x0, 0x5db2, 0x0, 0x5dba, 0x0, 0x5ddb, 0x0, 0x5de1, 0x0, 0x5de2, 0x0, 0x5de5, 0x0, 0x5de6, 0x0, 0x5df1, 0x0, 0x5dfd, 0x0, 0x5dfe, 0x0, 0x5e28, 0x0, 0x5e3d, 0x0, 0x5e69, 0x0, 0x5e72, 0x0, 0x5e73, 0x6210, 0x0, 0x5e74, 0x0, 0x5e7a, 0x0, 0x5e7c, 0x0, 0x5e7f, 0x0, 0x5ea6, 0x0, 0x5eb0, 0x0, 0x5eb3, 0x0, 0x5eb6, 0x0, 0x5ec9, 0x0, 0x5eca, 0x0, 0x5ed2, 0x0, 0x5ed3, 0x0, 0x5ed9, 0x0, 0x5eec, 0x0, 0x5ef4, 0x0, 0x5efe, 0x0, 0x5f04, 0x0, 0x5f0b, 0x0, 0x5f13, 0x0, 0x5f22, 0x0, 0x5f50, 0x0, 0x5f53, 0x0, 0x5f61, 0x0, 0x5f62, 0x0, 0x5f69, 0x0, 0x5f6b, 0x0, 0x5f73, 0x0, 0x5f8b, 0x0, 0x5f8c, 0x0, 0x5f97, 0x0, 0x5f9a, 0x0, 0x5fa9, 0x0, 0x5fad, 0x0, 0x5fc3, 0x0, 0x5fcd, 0x0, 0x5fd7, 0x0, 0x5ff5, 0x0, 0x5ff9, 0x0, 0x6012, 0x0, 0x601c, 0x0, 0x6075, 0x0, 0x6081, 0x0, 0x6094, 0x0, 0x60c7, 0x0, 0x60d8, 0x0, 0x60e1, 0x0, 0x6108, 0x0, 0x6144, 0x0, 0x6148, 0x0, 0x614c, 0x0, 0x614e, 0x0, 0x6160, 0x0, 0x6168, 0x0, 0x617a, 0x0, 0x618e, 0x0, 0x6190, 0x0, 0x61a4, 0x0, 0x61af, 0x0, 0x61b2, 0x0, 0x61de, 0x0, 0x61f2, 0x0, 0x61f6, 0x0, 0x6200, 0x0, 0x6208, 0x0, 0x6210, 0x0, 0x621b, 0x0, 0x622e, 0x0, 0x6234, 0x0, 0x6236, 0x0, 0x624b, 0x0, 0x6253, 0x0, 0x625d, 0x0, 0x6295, 0x0, 0x62b1, 0x0, 0x62c9, 0x0, 0x62cf, 0x0, 0x62d3, 0x0, 0x62d4, 0x0, 0x62fc, 0x0, 0x62fe, 0x0, 0x6307, 0x0, 0x633d, 0x0, 0x6350, 0x0, 0x6355, 0x0, 0x6368, 0x0, 0x637b, 0x0, 0x6383, 0x0, 0x63a0, 0x0, 0x63a9, 0x0, 0x63c4, 0x0, 0x63c5, 0x0, 0x63e4, 0x0, 0x641c, 0x0, 0x6422, 0x0, 0x6452, 0x0, 0x6469, 0x0, 0x6477, 0x0, 0x647e, 0x0, 0x649a, 0x0, 0x649d, 0x0, 0x64c4, 0x0, 0x652f, 0x0, 0x6534, 0x0, 0x654f, 0x0, 0x6556, 0x0, 0x656c, 0x0, 0x6578, 0x0, 0x6587, 0x0, 0x6597, 0x0, 0x6599, 0x0, 0x65a4, 0x0, 0x65b0, 0x0, 0x65b9, 0x0, 0x65c5, 0x0, 0x65e0, 0x0, 0x65e2, 0x0, 0x65e3, 0x0, 0x65e5, 0x0, 0x660e, 0x6cbb, 0x0, 0x6613, 0x0, 0x6620, 0x0, 0x662d, 0x548c, 0x0, 0x6649, 0x0, 0x6674, 0x0, 0x6688, 0x0, 0x6691, 0x0, 0x669c, 0x0, 0x66b4, 0x0, 0x66c6, 0x0, 0x66f0, 0x0, 0x66f4, 0x0, 0x66f8, 0x0, 0x6700, 0x0, 0x6708, 0x0, 0x6709, 0x0, 0x6717, 0x0, 0x671b, 0x0, 0x6721, 0x0, 0x6728, 0x0, 0x674e, 0x0, 0x6753, 0x0, 0x6756, 0x0, 0x675e, 0x0, 0x677b, 0x0, 0x6785, 0x0, 0x6797, 0x0, 0x67f3, 0x0, 0x67fa, 0x0, 0x6817, 0x0, 0x681f, 0x0, 0x682a, 0x0, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x0, 0x6852, 0x0, 0x6881, 0x0, 0x6885, 0x0, 0x688e, 0x0, 0x68a8, 0x0, 0x6914, 0x0, 0x6942, 0x0, 0x69a3, 0x0, 0x69ea, 0x0, 0x6a02, 0x0, 0x6a13, 0x0, 0x6aa8, 0x0, 0x6ad3, 0x0, 0x6adb, 0x0, 0x6b04, 0x0, 0x6b20, 0x0, 0x6b21, 0x0, 0x6b54, 0x0, 0x6b62, 0x0, 0x6b63, 0x0, 0x6b72, 0x0, 0x6b77, 0x0, 0x6b79, 0x0, 0x6b9f, 0x0, 0x6bae, 0x0, 0x6bb3, 0x0, 0x6bba, 0x0, 0x6bbb, 0x0, 0x6bcb, 0x0, 0x6bcd, 0x0, 0x6bd4, 0x0, 0x6bdb, 0x0, 0x6c0f, 0x0, 0x6c14, 0x0, 0x6c34, 0x0, 0x6c4e, 0x0, 0x6c67, 0x0, 0x6c88, 0x0, 0x6cbf, 0x0, 0x6ccc, 0x0, 0x6ccd, 0x0, 0x6ce5, 0x0, 0x6ce8, 0x0, 0x6d16, 0x0, 0x6d1b, 0x0, 0x6d1e, 0x0, 0x6d34, 0x0, 0x6d3e, 0x0, 0x6d41, 0x0, 0x6d69, 0x0, 0x6d6a, 0x0, 0x6d77, 0x0, 0x6d78, 0x0, 0x6d85, 0x0, 0x6dcb, 0x0, 0x6dda, 0x0, 0x6dea, 0x0, 0x6df9, 0x0, 0x6e1a, 0x0, 0x6e2f, 0x0, 0x6e6e, 0x0, 0x6e80, 0x0, 0x6e9c, 0x0, 0x6eba, 0x0, 0x6ec7, 0x0, 0x6ecb, 0x0, 0x6ed1, 0x0, 0x6edb, 0x0, 0x6f0f, 0x0, 0x6f14, 0x0, 0x6f22, 0x0, 0x6f23, 0x0, 0x6f6e, 0x0, 0x6fc6, 0x0, 0x6feb, 0x0, 0x6ffe, 0x0, 0x701b, 0x0, 0x701e, 0x0, 0x7039, 0x0, 0x704a, 0x0, 0x706b, 0x0, 0x7070, 0x0, 0x7077, 0x0, 0x707d, 0x0, 0x7099, 0x0, 0x70ad, 0x0, 0x70c8, 0x0, 0x70d9, 0x0, 0x7121, 0x0, 0x7145, 0x0, 0x7149, 0x0, 0x716e, 0x0, 0x719c, 0x0, 0x71ce, 0x0, 0x71d0, 0x0, 0x7210, 0x0, 0x721b, 0x0, 0x7228, 0x0, 0x722a, 0x0, 0x722b, 0x0, 0x7235, 0x0, 0x7236, 0x0, 0x723b, 0x0, 0x723f, 0x0, 0x7247, 0x0, 0x7250, 0x0, 0x7259, 0x0, 0x725b, 0x0, 0x7262, 0x0, 0x7279, 0x0, 0x7280, 0x0, 0x7295, 0x0, 0x72ac, 0x0, 0x72af, 0x0, 0x72c0, 0x0, 0x72fc, 0x0, 0x732a, 0x0, 0x7375, 0x0, 0x737a, 0x0, 0x7384, 0x0, 0x7387, 0x0, 0x7389, 0x0, 0x738b, 0x0, 0x73a5, 0x0, 0x73b2, 0x0, 0x73de, 0x0, 0x7406, 0x0, 0x7409, 0x0, 0x7422, 0x0, 0x7447, 0x0, 0x745c, 0x0, 0x7469, 0x0, 0x7471, 0x0, 0x7485, 0x0, 0x7489, 0x0, 0x7498, 0x0, 0x74ca, 0x0, 0x74dc, 0x0, 0x74e6, 0x0, 0x7506, 0x0, 0x7518, 0x0, 0x751f, 0x0, 0x7524, 0x0, 0x7528, 0x0, 0x7530, 0x0, 0x7532, 0x0, 0x7533, 0x0, 0x7537, 0x0, 0x753b, 0x0, 0x753e, 0x0, 0x7559, 0x0, 0x7565, 0x0, 0x7570, 0x0, 0x758b, 0x0, 0x7592, 0x0, 0x75e2, 0x0, 0x7610, 0x0, 0x761d, 0x0, 0x761f, 0x0, 0x7642, 0x0, 0x7669, 0x0, 0x7676, 0x0, 0x767d, 0x0, 0x76ae, 0x0, 0x76bf, 0x0, 0x76ca, 0x0, 0x76db, 0x0, 0x76e3, 0x0, 0x76e7, 0x0, 0x76ee, 0x0, 0x76f4, 0x0, 0x7701, 0x0, 0x771e, 0x0, 0x771f, 0x0, 0x7740, 0x0, 0x774a, 0x0, 0x778b, 0x0, 0x77a7, 0x0, 0x77db, 0x0, 0x77e2, 0x0, 0x77f3, 0x0, 0x784e, 0x0, 0x786b, 0x0, 0x788c, 0x0, 0x7891, 0x0, 0x78ca, 0x0, 0x78cc, 0x0, 0x78fb, 0x0, 0x792a, 0x0, 0x793a, 0x0, 0x793c, 0x0, 0x793e, 0x0, 0x7948, 0x0, 0x7949, 0x0, 0x7950, 0x0, 0x7956, 0x0, 0x795d, 0x0, 0x795e, 0x0, 0x7965, 0x0, 0x797f, 0x0, 0x7981, 0x0, 0x798d, 0x0, 0x798e, 0x0, 0x798f, 0x0, 0x79ae, 0x0, 0x79b8, 0x0, 0x79be, 0x0, 0x79ca, 0x0, 0x79d8, 0x0, 0x79eb, 0x0, 0x7a1c, 0x0, 0x7a40, 0x0, 0x7a4a, 0x0, 0x7a4f, 0x0, 0x7a74, 0x0, 0x7a7a, 0x0, 0x7a81, 0x0, 0x7ab1, 0x0, 0x7acb, 0x0, 0x7aee, 0x0, 0x7af9, 0x0, 0x7b20, 0x0, 0x7b8f, 0x0, 0x7bc0, 0x0, 0x7bc6, 0x0, 0x7bc9, 0x0, 0x7c3e, 0x0, 0x7c60, 0x0, 0x7c73, 0x0, 0x7c7b, 0x0, 0x7c92, 0x0, 0x7cbe, 0x0, 0x7cd2, 0x0, 0x7cd6, 0x0, 0x7ce3, 0x0, 0x7ce7, 0x0, 0x7ce8, 0x0, 0x7cf8, 0x0, 0x7d00, 0x0, 0x7d10, 0x0, 0x7d22, 0x0, 0x7d2f, 0x0, 0x7d42, 0x0, 0x7d5b, 0x0, 0x7d63, 0x0, 0x7da0, 0x0, 0x7dbe, 0x0, 0x7dc7, 0x0, 0x7df4, 0x0, 0x7e02, 0x0, 0x7e09, 0x0, 0x7e37, 0x0, 0x7e41, 0x0, 0x7e45, 0x0, 0x7f36, 0x0, 0x7f3e, 0x0, 0x7f51, 0x0, 0x7f72, 0x0, 0x7f79, 0x0, 0x7f7a, 0x0, 0x7f85, 0x0, 0x7f8a, 0x0, 0x7f95, 0x0, 0x7f9a, 0x0, 0x7fbd, 0x0, 0x7ffa, 0x0, 0x8001, 0x0, 0x8005, 0x0, 0x800c, 0x0, 0x8012, 0x0, 0x8033, 0x0, 0x8046, 0x0, 0x8060, 0x0, 0x806f, 0x0, 0x8070, 0x0, 0x807e, 0x0, 0x807f, 0x0, 0x8089, 0x0, 0x808b, 0x0, 0x80ad, 0x0, 0x80b2, 0x0, 0x8103, 0x0, 0x813e, 0x0, 0x81d8, 0x0, 0x81e3, 0x0, 0x81e8, 0x0, 0x81ea, 0x0, 0x81ed, 0x0, 0x81f3, 0x0, 0x81fc, 0x0, 0x8201, 0x0, 0x8204, 0x0, 0x820c, 0x0, 0x8218, 0x0, 0x821b, 0x0, 0x821f, 0x0, 0x826e, 0x0, 0x826f, 0x0, 0x8272, 0x0, 0x8278, 0x0, 0x8279, 0x0, 0x828b, 0x0, 0x8291, 0x0, 0x829d, 0x0, 0x82b1, 0x0, 0x82b3, 0x0, 0x82bd, 0x0, 0x82e5, 0x0, 0x82e6, 0x0, 0x831d, 0x0, 0x8323, 0x0, 0x8336, 0x0, 0x8352, 0x0, 0x8353, 0x0, 0x8363, 0x0, 0x83ad, 0x0, 0x83bd, 0x0, 0x83c9, 0x0, 0x83ca, 0x0, 0x83cc, 0x0, 0x83dc, 0x0, 0x83e7, 0x0, 0x83ef, 0x0, 0x83f1, 0x0, 0x843d, 0x0, 0x8449, 0x0, 0x8457, 0x0, 0x84ee, 0x0, 0x84f1, 0x0, 0x84f3, 0x0, 0x84fc, 0x0, 0x8516, 0x0, 0x8564, 0x0, 0x85cd, 0x0, 0x85fa, 0x0, 0x8606, 0x0, 0x8612, 0x0, 0x862d, 0x0, 0x863f, 0x0, 0x864d, 0x0, 0x8650, 0x0, 0x865c, 0x0, 0x8667, 0x0, 0x8669, 0x0, 0x866b, 0x0, 0x8688, 0x0, 0x86a9, 0x0, 0x86e2, 0x0, 0x870e, 0x0, 0x8728, 0x0, 0x876b, 0x0, 0x8779, 0x0, 0x8786, 0x0, 0x87ba, 0x0, 0x87e1, 0x0, 0x8801, 0x0, 0x881f, 0x0, 0x8840, 0x0, 0x884c, 0x0, 0x8860, 0x0, 0x8863, 0x0, 0x88c2, 0x0, 0x88cf, 0x0, 0x88d7, 0x0, 0x88de, 0x0, 0x88e1, 0x0, 0x88f8, 0x0, 0x88fa, 0x0, 0x8910, 0x0, 0x8941, 0x0, 0x8964, 0x0, 0x897e, 0x0, 0x8986, 0x0, 0x898b, 0x0, 0x8996, 0x0, 0x89d2, 0x0, 0x89e3, 0x0, 0x8a00, 0x0, 0x8aa0, 0x0, 0x8aaa, 0x0, 0x8abf, 0x0, 0x8acb, 0x0, 0x8ad2, 0x0, 0x8ad6, 0x0, 0x8aed, 0x0, 0x8af8, 0x0, 0x8afe, 0x0, 0x8b01, 0x0, 0x8b39, 0x0, 0x8b58, 0x0, 0x8b80, 0x0, 0x8b8a, 0x0, 0x8c37, 0x0, 0x8c46, 0x0, 0x8c48, 0x0, 0x8c55, 0x0, 0x8c78, 0x0, 0x8c9d, 0x0, 0x8ca1, 0x0, 0x8ca9, 0x0, 0x8cab, 0x0, 0x8cc1, 0x0, 0x8cc2, 0x0, 0x8cc7, 0x0, 0x8cc8, 0x0, 0x8cd3, 0x0, 0x8d08, 0x0, 0x8d1b, 0x0, 0x8d64, 0x0, 0x8d70, 0x0, 0x8d77, 0x0, 0x8db3, 0x0, 0x8dbc, 0x0, 0x8dcb, 0x0, 0x8def, 0x0, 0x8df0, 0x0, 0x8eab, 0x0, 0x8eca, 0x0, 0x8ed4, 0x0, 0x8f26, 0x0, 0x8f2a, 0x0, 0x8f38, 0x0, 0x8f3b, 0x0, 0x8f62, 0x0, 0x8f9b, 0x0, 0x8f9e, 0x0, 0x8fb0, 0x0, 0x8fb5, 0x0, 0x8fb6, 0x0, 0x9023, 0x0, 0x9038, 0x0, 0x904a, 0x0, 0x9069, 0x0, 0x9072, 0x0, 0x907c, 0x0, 0x908f, 0x0, 0x9091, 0x0, 0x9094, 0x0, 0x90ce, 0x0, 0x90de, 0x0, 0x90f1, 0x0, 0x90fd, 0x0, 0x9111, 0x0, 0x911b, 0x0, 0x9149, 0x0, 0x914d, 0x0, 0x916a, 0x0, 0x9199, 0x0, 0x91b4, 0x0, 0x91c6, 0x0, 0x91cc, 0x0, 0x91cf, 0x0, 0x91d1, 0x0, 0x9234, 0x0, 0x9238, 0x0, 0x9276, 0x0, 0x927c, 0x0, 0x92d7, 0x0, 0x92d8, 0x0, 0x9304, 0x0, 0x934a, 0x0, 0x93f9, 0x0, 0x9415, 0x0, 0x9577, 0x0, 0x9580, 0x0, 0x958b, 0x0, 0x95ad, 0x0, 0x95b7, 0x0, 0x961c, 0x0, 0x962e, 0x0, 0x964b, 0x0, 0x964d, 0x0, 0x9675, 0x0, 0x9678, 0x0, 0x967c, 0x0, 0x9686, 0x0, 0x96a3, 0x0, 0x96b6, 0x0, 0x96b7, 0x0, 0x96b8, 0x0, 0x96b9, 0x0, 0x96c3, 0x0, 0x96e2, 0x0, 0x96e3, 0x0, 0x96e8, 0x0, 0x96f6, 0x0, 0x96f7, 0x0, 0x9723, 0x0, 0x9732, 0x0, 0x9748, 0x0, 0x9751, 0x0, 0x9756, 0x0, 0x975e, 0x0, 0x9762, 0x0, 0x9769, 0x0, 0x97cb, 0x0, 0x97db, 0x0, 0x97e0, 0x0, 0x97ed, 0x0, 0x97f3, 0x0, 0x97ff, 0x0, 0x9801, 0x0, 0x9805, 0x0, 0x980b, 0x0, 0x9818, 0x0, 0x9829, 0x0, 0x983b, 0x0, 0x985e, 0x0, 0x98a8, 0x0, 0x98db, 0x0, 0x98df, 0x0, 0x98e2, 0x0, 0x98ef, 0x0, 0x98fc, 0x0, 0x9928, 0x0, 0x9929, 0x0, 0x9996, 0x0, 0x9999, 0x0, 0x99a7, 0x0, 0x99ac, 0x0, 0x99c2, 0x0, 0x99f1, 0x0, 0x99fe, 0x0, 0x9a6a, 0x0, 0x9aa8, 0x0, 0x9ad8, 0x0, 0x9adf, 0x0, 0x9b12, 0x0, 0x9b25, 0x0, 0x9b2f, 0x0, 0x9b32, 0x0, 0x9b3c, 0x0, 0x9b5a, 0x0, 0x9b6f, 0x0, 0x9c40, 0x0, 0x9c57, 0x0, 0x9ce5, 0x0, 0x9cfd, 0x0, 0x9d67, 0x0, 0x9db4, 0x0, 0x9dfa, 0x0, 0x9e1e, 0x0, 0x9e75, 0x0, 0x9e7f, 0x0, 0x9e97, 0x0, 0x9e9f, 0x0, 0x9ea5, 0x0, 0x9ebb, 0x0, 0x9ec3, 0x0, 0x9ecd, 0x0, 0x9ece, 0x0, 0x9ed1, 0x0, 0x9ef9, 0x0, 0x9efd, 0x0, 0x9efe, 0x0, 0x9f05, 0x0, 0x9f0e, 0x0, 0x9f0f, 0x0, 0x9f13, 0x0, 0x9f16, 0x0, 0x9f20, 0x0, 0x9f3b, 0x0, 0x9f43, 0x0, 0x9f4a, 0x0, 0x9f52, 0x0, 0x9f8d, 0x0, 0x9f8e, 0x0, 0x9f9c, 0x0, 0x9f9f, 0x0, 0x9fa0, 0x0, 0xa651, 0x0, 0xa689, 0x0, 0xa727, 0x0, 0xa76f, 0x0, 0xa78e, 0x0, 0xab37, 0x0, 0xab52, 0x0, 0xab66, 0x0, 0xab67, 0x0, 0x11099, 0x110ba, 0x0, 0x1109b, 0x110ba, 0x0, 0x110a5, 0x110ba, 0x0, 0x11131, 0x11127, 0x0, 0x11132, 0x11127, 0x0, 0x11347, 0x1133e, 0x0, 0x11347, 0x11357, 0x0, 0x114b9, 0x114b0, 0x0, 0x114b9, 0x114ba, 0x0, 0x114b9, 0x114bd, 0x0, 0x115b8, 0x115af, 0x0, 0x115b9, 0x115af, 0x0, 0x11935, 0x11930, 0x0, 0x1d157, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x1d16e, 0x0, 0x1d158, 0x1d165, 0x1d16f, 0x0, 0x1d158, 0x1d165, 0x1d170, 0x0, 0x1d158, 0x1d165, 0x1d171, 0x0, 0x1d158, 0x1d165, 0x1d172, 0x0, 0x1d1b9, 0x1d165, 0x0, 0x1d1b9, 0x1d165, 0x1d16e, 0x0, 0x1d1b9, 0x1d165, 0x1d16f, 0x0, 0x1d1ba, 0x1d165, 0x0, 0x1d1ba, 0x1d165, 0x1d16e, 0x0, 0x1d1ba, 0x1d165, 0x1d16f, 0x0, 0x1df04, 0x0, 0x1df05, 0x0, 0x1df06, 0x0, 0x1df08, 0x0, 0x1df0a, 0x0, 0x1df1e, 0x0, 0x20122, 0x0, 0x2051c, 0x0, 0x20525, 0x0, 0x2054b, 0x0, 0x2063a, 0x0, 0x20804, 0x0, 0x208de, 0x0, 0x20a2c, 0x0, 0x20b63, 0x0, 0x214e4, 0x0, 0x216a8, 0x0, 0x216ea, 0x0, 0x219c8, 0x0, 0x21b18, 0x0, 0x21d0b, 0x0, 0x21de4, 0x0, 0x21de6, 0x0, 0x22183, 0x0, 0x2219f, 0x0, 0x22331, 0x0, 0x226d4, 0x0, 0x22844, 0x0, 0x2284a, 0x0, 0x22b0c, 0x0, 0x22bf1, 0x0, 0x2300a, 0x0, 0x232b8, 0x0, 0x2335f, 0x0, 0x23393, 0x0, 0x2339c, 0x0, 0x233c3, 0x0, 0x233d5, 0x0, 0x2346d, 0x0, 0x236a3, 0x0, 0x238a7, 0x0, 0x23a8d, 0x0, 0x23afa, 0x0, 0x23cbc, 0x0, 0x23d1e, 0x0, 0x23ed1, 0x0, 0x23f5e, 0x0, 0x23f8e, 0x0, 0x24263, 0x0, 0x242ee, 0x0, 0x243ab, 0x0, 0x24608, 0x0, 0x24735, 0x0, 0x24814, 0x0, 0x24c36, 0x0, 0x24c92, 0x0, 0x24fa1, 0x0, 0x24fb8, 0x0, 0x25044, 0x0, 0x250f2, 0x0, 0x250f3, 0x0, 0x25119, 0x0, 0x25133, 0x0, 0x25249, 0x0, 0x2541d, 0x0, 0x25626, 0x0, 0x2569a, 0x0, 0x256c5, 0x0, 0x2597c, 0x0, 0x25aa7, 0x0, 0x25bab, 0x0, 0x25c80, 0x0, 0x25cd0, 0x0, 0x25f86, 0x0, 0x261da, 0x0, 0x26228, 0x0, 0x26247, 0x0, 0x262d9, 0x0, 0x2633e, 0x0, 0x264da, 0x0, 0x26523, 0x0, 0x265a8, 0x0, 0x267a7, 0x0, 0x267b5, 0x0, 0x26b3c, 0x0, 0x26c36, 0x0, 0x26cd5, 0x0, 0x26d6b, 0x0, 0x26f2c, 0x0, 0x26fb1, 0x0, 0x270d2, 0x0, 0x273ca, 0x0, 0x27667, 0x0, 0x278ae, 0x0, 0x27966, 0x0, 0x27ca8, 0x0, 0x27ed3, 0x0, 0x27f2f, 0x0, 0x285d2, 0x0, 0x285ed, 0x0, 0x2872e, 0x0, 0x28bfa, 0x0, 0x28d77, 0x0, 0x29145, 0x0, 0x291df, 0x0, 0x2921a, 0x0, 0x2940a, 0x0, 0x29496, 0x0, 0x295b6, 0x0, 0x29b30, 0x0, 0x2a0ce, 0x0, 0x2a105, 0x0, 0x2a20e, 0x0, 0x2a291, 0x0, 0x2a392, 0x0, 0x2a600, 0x0]; return t; } +//24512 bytes +enum compatMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)(x" +0000000000000040000005C0", +x" +0000010000000B0000002460", +x" +020201000402030206020205080702020202020209020202000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000001000000030002000500040007000600080000000A0009 +000C000B00000000000D0000000F000E00000000001100100013001200150014001700160019001800000000001B001A +00000000000000000000001C00000000001D0000001E0000000000000000001F00000000000000000000000000000000 +000000000000000000000000000000000020000000000021000000000000002200230000000000240000000000000000 +0000000000000025000000260000002700000000000000280000000000000029000000000000002A000000000000002B +002C000000000000002D00000000002E0000002F00310030003300320000000000340000000000000000000000350000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000037003600000038000000000000000000000000000000000000000000000000 +00390000003B003A003D003C00000000003F003E0041004000430042004500440047004600490048004B004A004D004C +004F004E0051005000530052000000000055005400570056005900580000005A005C005B005E005D0060005F00610000 +006200000000000000000000000000000000000000630000006500640067006600000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000006800690000000000000000006A00000000000000000000000000000000 +00000000006B0000000000000000000000000000006C0000000000000000000000000000000000000000006D006E0000 +0070006F0072007100740073000000750077007600790078007B007A007D007C007E00000080007F0000008100000000 +00830082008500840087008600890088008B008A008D008C008F008E0091009000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000920000000000000000009300000000000000940000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000096009500000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000980097009A0099009C009B009E009D00A0009F00A200A100A400A3000000A5 +00A700A600A900A800AB00AA00AD00AC00AF00AE00B100B000B300B200B500B400B700B600B900B800BB00BA00BD00BC +00BF00BE00C100C000C300C200C500C400C700C600C900C800CB00CA00CD00CC00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000CF00CE00000000000000000000000000000000 +000000000000000000D100D0000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000D300D20000000000D4000000000000000000000000000000000000000000000000000000000000 +00000000000000D5000000D6000000D7000000000000000000D8000000000000000000000000000000D9000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00DA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000DB0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000DC00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000DE00DD0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000E000DF00E10000000000E2 +000000000000000000000000000000000000000000000000000000000000000000E400E300E600E500E800E700EA00E9 +00EC00EB00EE00ED00E300EF00F000E400F100E600F300F200F400EA00F600F500F800F700FA00F900FC00FB00FE00FD +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FF0000010101000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000103010201050104010701060000000000000000000000000000000000000000 +0000000000000000000000000000000001090108010B010A0000010C00000000010E010D0000010F0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000001120111011401130116011501180117011A0119011C011B011E011D0120011F +000001210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000001500000692000000000009000000000000030F0343120F000300000000 +031400480000078A03C603CE000004940570056D0586057305B005A605F80000062E062B0658063106E706E406F906EA +0792000007AC07A907C207AF000007E608B4000008BA08B7096208CE0000000009AF09AC09C509B209EF09E50A4A0000 +0A8C0A890AB60A8F0B490B460B580B4C0C4400000C610C5E0C770C6400000C9B0D6B00000D710D6E0E0F0D850E1E0000 +09C8058909CB058C0A0D05CE0A3E05EC0A4105EF0A4405F20A4705F50A71061A000000000AA506470AB006520AB30655 +0AD306750ABC065E0AFE069A0B0406A00B0706A30B0D06A90B1906BA000000000B4F06ED0B5206F00B5506F30B6E070F +000006F60B3A06D80B7607170BB1072E0743000007500BCF07460BDC07400BD200000BCC078F0000079E0C4107980C50 +0F300C4A000000000C8607D10C9107DC0CA507F0000000000D0A08450D20085B0D10084B0D2E086F0D3508760D4C088D +0D3B087C0D6008A90D5708A0000000000D7408BD0D7B08C40D8208CB0D9B08E40D9E08E70DC709100DEC09420E120965 +097C097109820E2C060D0E32084306140CB107FC00000000000000000000000000000000000000000000000008F30000 +00000DAA0000000000000000000000000000000000000000000000000000000000000000000000000613060C07360A6A +0BBC073D0786078305B70C35070309F607F30B6208EA0CA808D90DA108D50D9008DD0D8C08D10D9400000D8809E805A9 +09E105A20E680E5D000000000B0A06A60BAB07280CCF081A0CD2081D0F070E8206090B790A6706100AFB069700000000 +0C3E078C09F205B30E650E5A0E6F0E6009F905BA09FC05BD0ABF06610AC206640B6507060B6807090CAB07F60CAE07F9 +0D13084E0D1608510DA408ED0DA708F00D49088A0D5D08A6000000000B2206C300000000000000000000000009DE059F +0ACC066E0C9E07E90C7E07C90C9407DF0C9707E20E18096B000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000EB70B100A14073E0EE10EDD0DE40EE9 +000006950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000012000F004B002400270006000000000A2B0EB10B44084300000F0A00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0004001A002B00000000001D000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000F2E00000000000000000000005400000000000005460000000000000000001C000307410F45 +0FC00FA0000010110000104A10991073000011E200000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000107C101A115210EC11D2117600001270000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000126911DB12601232000012A8 +11CB11471073106E1299107C0000124B0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000124D120B00001255114D100A00000000106A0000000000000000000000000000 +1313130D130A000000000000130100000000000000000000131F132B0000133400000000000000000000000000000000 +132500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001379000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001361135B135400000000000013C600000000000000000000137313810000139C +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013D013CD +000000000000000000000000000000001316000000001366000000000000000000000000000000000000000000000000 +13481304134B130700000000135E13100000000013E213DD13691319136E131C0000000013761322137C1328138C132E +0000000013EA13E513BD134313991331139F133713A2133A13AD133D0000000013B61340000000000000000000000000 +00000000000000000000000013ED00000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000149414911497183A0000187500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000149A00001906183D000018BC000000000000000000000000 +00001918000018FD00000000000000000000000000000000000000000000000000000000191500000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000192D0000000000000000000000000000 +193600000000000000001939000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000191E191B19241921192A192719331930 +000000000000000000000000000000000000000019450000000019480000000000000000000000000000000000000000 +0000000000000000193F193C194200000000000000000000000000000000000000000000000000000000000000000000 +0000000019570000000000000000195A0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000194B00001951194E0000000000001954 +000000000000000000000000000000000000196619630000000019690000000000000000000000000000000000000000 +00000000000000001960195D000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000196C000000000000000000000000000000000000000000000000000000000000000000000000 +000000001975196F00001972000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000197800000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000197B000000000000000019850000000019881981197E0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001991198B0000198E000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000001994199A19970000199E0000000000000000000000000000000000000000000000000000000000000000 +0000000019A1000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000019AA0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000019A719A400000000000000000000000000000000000000000000000000000000000019AD00000000 +00000000000000000000000000000000000000000000000000000000000000000000000019B200000000000000000000 +000000000000000019B500000000000000000000000019B80000000019BB00000000000000000000000019BE00000000 +0000000000000000000000000000000019AF00000000000000000000000000000000000019C1000019C4000019DC19E0 +19E319E700000000000000000000000019C7000000000000000000000000000000000000000000000000000000000000 +0000000019CD00000000000000000000000000000000000019D000000000000000000000000019D30000000019D60000 +0000000000000000000019D9000000000000000000000000000000000000000019CA0000000000000000000000000000 +000000000000000000000000000019EA0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000019ED0000000000000000000000000000000000001AE3 +00001AE600001AE900001AEC00001AEF0000000000001AF2000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001AF500001AF80000000000001AFE1AFB1B010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000E580568000005D5062905E606870E7C06CF06AC071A060707230734000007810E8B07A7076D06AF +056B0890069207730E910E8F093A1B040A800A310EA30EA106020EA50B7C00000E7805D30E97078A1B081B060BA60CD6 +1B0C0A27086D0EC911471B0E114B1149129B12990A140AE3086D0A27114911471299124D0000129B0000000000000000 +000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000E9300000E9909A30EA50E6B +0EA90ADC0EB50EAD0EBD0EBB1B100EBF0EC50F140F161B120ECB0ECD0ED10ECF0ED50ED30EEB0EDB0E800EED0EF50EF3 +0EF71B0A06110EF90F030F0111CB0F050A0A05CB0A1605DA0A1905DD0A1C05E00A4D05FB0A6E06170A74061D0A7D0626 +0A7706200A7A06230AA8064A0AAC064E0AD606780AD9067B0ACF06710AF206840B01069D0B1C06BD0B2506C60B1F06C0 +0B2806C90B2B06CC0B7107120B5B06FC0BA807250BAE072B0BB407310BD507490BD8074C0BE207560BDF07530C150775 +0C1807780C1B077B0C4707950C4D079B0C5607A40C5307A10C7A07C50C8207CD0C8907D40C8D07D80CEF08380CF2083B +0D0D08480D1908540D1C08570D23085E0D3808790D4208830D3108720D3E087F0D4508860D51089D0D5A08A30D6608AF +0D6308AC0DC4090D0DCD09160DCA09130D7708C00D7E08C70DDE09270DE1092A0DE6093C0DE9093F0DF209480DEF0945 +0DF8094B0E0409570E07095A0E1B096E0E2F097F0E3809880E3B098B0D540B2E0E240DF50D3809A90000000000000000 +09FF05C009EC05AD09B9057A09B5057609C1058209BD057E0A0205C309D2059309CE058F09DA059B09D605970A0605C7 +0AC506670AB9065B0AA206440A9606380A9206340A9E06400A9A063C0AC8066A0B5F07000B6B070C0CC808130CA207ED +0C6B07B60C6707B20C7307BE0C6F07BA0CCB08160CB808030CB407FF0CC0080B0CBC08070CC4080F0DC1090A0D9808E1 +0DB108FA0DAD08F60DB909020DB508FE0DBD09060E0C095F0E2709770E2109740E150968000000000000000000000000 +111B10F9111E10FC112711051130110E0F700F4E0F730F510F7C0F5A0F850F6311601155116311581167115C00000000 +0FAE0FA30FB10FA60FB50FAA00000000119F117D11A2118011AB118911B411920FE50FC30FE80FC60FF10FCF0FFA0FD8 +11F911EA11FC11ED120011F1120411F5102C101D102F1020103310241037102812401235124312381247123C00000000 +1058104D105B1050105F10540000000012871278128A127B128E127F12921283107F00001082000010860000108A0000 +12D112AF12D412B212DD12BB12E612C410BE109C10C1109F10CA10A810D310B110EC10E51152114F1176116F11D211CF +1232122F1260125D12A812A1000000001139111711221100112B1109113411120F8E0F6C0F770F550F800F5E0F890F67 +11BD119B11A6118411AF118D11B8119610030FE10FEC0FCA0FF50FD30FFE0FDC12EF12CD12D812B612E112BF12EA12C8 +10DC10BA10C510A310CE10AC10D710B510F310F6114410E8000010EF1140113D0F480F4B0F450F42002A0F92002A11CD +0020005111C811720000117911C411C10FA00F9D0FC00FBD002D10070035003111D511D811E211DE0000000011E61208 +101410171011100E003C000000440040126312661270126C1252124F127412961076107910731070001810670998001C +0000000012FA12A4000012AB12F612F3104A104710991096000310E00000003900010001000100010001000100010001 +000100010000000100000000000000001B1600000000000000000000004E000000000000000000000000000000000000 +000000000000000002FC02FA000002FF00000000000000000000000000010000000000001B1C000000001B1F1B2B1B28 +00000000000000000000008F0000000C0000000000000000000000000563000000920560000000000000000000000000 +0000000000000000000000001B2300000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000000000000000AE3030500000000037403650392038303B003A11B5A02F400A105440B3E00A5 +03140305030F0343037403650392038303B003A11B5A02F400A10544000000A50A8006920B44078A0B100EA10A2B0B7C +0B3E05D308430CD600000BA6000000000000000000000000000000000000000000000842000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000009A509A10E5005E30A2100000E7E0A25 +0E53000006AC060206AC06AC0E740B1006CF06CF0A2B0734078100000000078906AF0000076D083E076D076D00000000 +089208660000089A0000060A0000077F0000060A05B0071A05E305D50A800000067E06290723000013FF078A1415140D +0AE3141A068000001149124B10630F9700001B580000000005E600000A800A31073E0AE3000000000000000000000000 +03E203DA03CA03C103D204550498045903D604CF03DE04E704EB049C03BE051106D106CF06DE06D4091B06B20922091E +068206E10953095005E30734072305E60B330AE30B400B360DD2086D0DD90DD50B440B430E000DFD09A30A2B05D30A31 +00000000000000000000000000000000030D000000000000000000000000000000000000000000000000000000000000 +000000001B3A1B3300000000000000000000000000000000000000000000000000000000000000000000000000001B3F +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001B4200001B451B480000000000000000000000000000000000000000000000000000000000000000 +000000000000000000001B4D000000001B5200000000000000001B550000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001B5C00001B5F00000000000000001B651B621B6E0000 +00001B71000000000000000000000000000000000000000000000000000000001B7500000000000000001B781B7B0000 +1B7E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000055600001B84000000000000000000000000000000001B810000055B054A1B8A1B87000000001B901B8D00000000 +1B961B930000000000000000000000001B9C1B99000000001BA81BA5000000001BAE1BAB000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001BBA1BB71BC01BBD0000000000000000000000000000000000000000000000000000000000000000 +1BA21B9F1BB41BB10000000000000000000000001BC61BC31BCC1BC90000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001BE4000000001BE60000000000000000 +0000000000000000000000000000000000000000000000000000000000000000034303140365030F0383037403A10392 +031C03B00342032F036403550382037303A0039103F703AF00D900A300E600E200EE00EA00F600F200A700FA00B100AC +00BB00B600C500C000CF00CA00DD00D403460319036803590386037703A40395031F03B3034503320367035803850376 +03A3039403FA03B2016A01660172016E017A01760182017E018A01860192018E019A019601A2019E01AA01A601B201AE +01BA01B601C201BE01CA01C605D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7076D083E +0890086106B2056B06820773060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A +0A1405D80BA60843086D0A270B440DE40611069500000305000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000001B6900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000054F05420000055200000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000001BD9000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000006B2073E0000000000000000000000000000000000000000 +0000000000000000000000001BDE00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000232E00000000000000000000000000000000000000000000000000000000000000000000 +00000000276400000000000000000000000000000000000000000000000000001FAA1F981FB81FB01FC21FBC1FCA1FC6 +1FFD1FD0201120092021201920392029203D203B206B205720772073207F2079208F208D209D209B20A920A1210120F7 +212B21212131212F214A213921662160217C21762180217E218E218C21AA21A421B221AE21C121BA21DB21C521E121DD +21E721E321F321EB223D220122492247228B228922972295229F229B032522A3032922C3231222D523202318232C2326 +23322330233623342394233823BE23B823C223C023C823C423D423CA23E623E224082406240E240C2414241224282426 +24382436243C243A24582446245C245A248E246E24A0249024AC24A824CE24BC24F424F0250424FE250C25082510250E +251E251C2530252C253625342540253C25442542254A254825A4259A25C025BE25DA25C425E225DE260425E6260A2606 +260E260C262626242634262A26442636264A2648266C265C267826762692267C269C269426B426AE26C826BC26CE26CC +26D226D026DA26D826EC26DE26F026EE26FE26FC270C27022710270E27162714271A27182724271C27322730273A2738 +273E273C27442742274C274627542750275A2756275E275C276627620000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001BF82081207F00002083000000000000000000000000000000000000000000000000 +000000000000000000001C2D00001C3000001C3300001C3600001C3900001C3C00001C3F00001C4200001C4500001C48 +00001C4B00001C4E1C5100001C5400001C5700000000000000000000000000001C5D1C5A1C60000000001C631C691C66 +1C6C000000001C6F1C781C75000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000001C2A0000000000000000008700000000008A1C7B1C8200000000000000000000000000000000 +000000000000000000001CD500001CF200001CA500001D4100001D4A00001D5E00001D6E00001D7900001D7E00001D8B +00001D9000001D9A1DA100001DA600001CBF00000000000000000000000000001DD51DCC1DEA000000001DF11E101E06 +1E25000000001E2D1D591E50000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000001CB01EF300001F011EFC00001F06000000001D501F0F00000000000000000000000000000000 +0000000000000000000000000000000019EF00001ABB19F41ABD19F619FB1ABF1A021A001AC31AC11AC71AC51ACB1AC9 +1A071A511A111A0C1A131A5B1A1A1A181A2C1A221A391A2E1A431A3E19F21A481A851A831A891A871A8D1A8B1A371A8F +1A951A931A991A971A9D1A201AA11A9F1AA51AA31AA91A2A1A4D1A7F1ACD1A4F1AD11ACF1AD51AD31AD91AD71ADB1A53 +1A551ADD1A591A571A5F1A5D1A631A611A671A651A6B1A691A6F1A6D1A731A711A771A751AE11ADF1A7B1A791AAB1A7D +1AAF1AAD1AB31AB11AB71AB500001AB9000000001FC61F9820F91F9E1FAC1FA024161FA21FA61FBC213E1F9A1FD02103 +01D701CE01E901E001FB01F2020D0204023302250245023C0257024E01DB01D201ED01E401FF01F60211020802370229 +02490240025B02520216022E0000021E0270026002A0026802880274028402640290026C02C402B002B802C002A402EC +02BC02AC02D002B402C8029802D402E40278028C02A8029C027C02CC029402E8028002D802E002DC21C320D324B02295 +0000000000000000000000000000000004060831041C04110432042704400439044E04470475046E047F047C04850482 +19F619EF1A0219FB1A0C1A071A1A1A131A2E1A221A3E1A391A481A4319F819F11A0419FD1A0E1A091A1C1A151A301A24 +1A401A3B1A4A1A451A271A3300001A1F1FC61F9820F91F9E20131FC820111F9C207F1FBE2394032922D523382101267C +22ED032522F222CD23CE20B9247C26102494205D214A241A1FFB2654234820911FDD26E0213C20251FAC1FA021AC1FA2 +207B20B32164216A1FDB24422089261A04882135048E048B04B1049104B704B404BD04BA04C304C004C904C604E404CC +034E033B04D604A3050304F2052905180327053A034D033A0A8506B407390A821CA01C871CB91CAE1CD31CC91D221CF0 +1D481D3F1D6C1D5C1D7C1CCD1D8E1D891D9F1CAA1C8D1DA41DBE1D551D3D1DC01DCA1DBC1E041DE81E4E1E231E8B1CE0 +1E9E1CD11EB31EAF1EC81EC01CE41ECA1EE31C9C1EF11D0C1EFF1EFA1FD81F041C8F1C891C9A1C941CA81CA21CBB1CB3 +1CCB1CC21CE21CCF1CEB1CE61CDD1CD81CFA1CF51CFF1D061D0E1D0B1D1C1D151D2C1D101D3A1D331D531D441D611D57 +1D711D661D851D811DA91D931D301DB21DC61DBB1DD81DE41DCF1DDF1DFB1DF41DED1E001E1A1E131E1F1E091E301E44 +1E4A1E341E3E1E391E5B1E281E671E531E6A1E611E741E6E1E7D1E791E851E811E921E8D1EA01E951D171EA41EBA1EB5 +1ECE1EC21ED81ED31EE51EDD1D1E1EE8033F031103610352037F0370039D038E03BB03AC033E032B03600351037E036F +039C038D03BA03AB040D0402042304180B12042E056A0A560C5B0A120A5C0CE90A630A5F21BC06DB213B22B222EF22AB +0C290CDD0BED1211071C0B7E0689075B0B8F0A290C2C0CE0121D121406010BF90B81068D068C0764122008960A590C00 +0AEF0B9712230C380A330C030C060B9A0A370A360C0A0B9D0A3B0A3A0C1E0BA106910C2207680B850CF906900D030CFD +0C3B0CEC0C1212260C2F0CE30BF01217076F0B890C320CE60BF3121A07720B8C077E0BB705D7099C0A300A2D05E805FF +06940A5306AE0B16071F0B3D0BA507220BC20BBF0BC90BC50BFC0BF608230C0E08260CD80D28082E0939086C05D1092D +034A0337036C035D038A037B03A80399032303B703490336036B035C0389037A03A7039803FE03B604140409042A041F +043C0435044A0443047104510AF704780000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000013B913B20000000000000000000000000000000000000000 +000000000000000000000000000000000000276E00000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000067E05E30000083E00000000 +0E7A0E720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000002772276C27740EC100000000000000000000000000000000 +0EFB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +22C52608261C26361FAE2378276220AB2144276220DD267C2239214224FC243425B62598265A25D0234C230623EE23A2 +2670257C1FC0270623102095259623B42198272E258E2388225325D825BC252A22CF21D123DA23581FE326602065202F +230C2287244423B2259225082630259E271E26C42462272C24DE2482268A256E25F2273221DF211F251A24BA246623CC +26C026182186211D2362230824D6237C26A024EA252020632033203524E0249826A4257A2255260025F8230621701FB4 +23E4220B207524241FEB246A1FA421FD22932342209F24D4244A211525EA257E26482328225D233E226D255A1FCE2422 +2031200F24CA22F625F025462069267A214A20C322A121D9246C238A270A26982740273422C120572642231E222D21BF +2283223B23A8238224922400251624E42582263A268C264E2059204323A020CD25EA25C6220721CF2324226923DE24B8 +20FB1FD621A2217023EC220D250223FA267E251226C626BE1FE526E42674248C221926B21FF71FC42182217223062299 +243223AE2658258822B9275E2055269E22E522DF23702354242023F224D22460201326EA26A6224321941FEF263C2364 +221D21F523E422E9204726AA218A20BB22D722AE234622FC242A23F025C824F8267825CE207D26B820BD2372240223B0 +26AC259027362722236022E324A8252E24C024AE239C23D81FD225FE2049256221C7204124C62257234E2168264022BF +26A225C021D525DE20E91FFF0000000000002113000022B720370000243E23DC247E2470248A248024C226CA00002504 +00002594000025F626500000000026660000000026F626F4272A26F826B026621FF91FE7206120032087206720EF20E1 +211120F3218821172213218C222B2227228D223722BB22A5235A22F82380236823BA23AA246423F4247622F224782474 +247C247A2488248624A4249A24E424B224EC24E8250A24F6254C25322580254C25E025D425FC25FA2620261E2650264C +26DC26BA220F26E8253E287300000000202D1FA81FE1200D20172001206D205F20D720E120ED20DF211B211321462140 +215C215421D721D321FF21EF22232217222B221B2237222522712245227B227722B7228F22D122CF232022DB23542328 +2376237A238E2380245623AA23D623BC23FC23DC241C240A2430242E2440243E245224482468245024B224A624DA24BE +24F224E42564250A25B2257825DC25D625EC25E025EE25F625F825FA25FC25F4262026022656263E2682267226BA26A8 +26D426CA26E226DC271226E828492762285B28471F501F3C288F1F5228D128A127602758000000000000000000000000 +0AE20ADE0AE10AE60D2B0AE500000D2B000000000000000000000000000000000000000013F9000013F313F013F613FC +000000000000000014300000147D000013FF1451141F141A140B14391462144602F4147814751472146E146A14041401 +140F1407141C1417142714210000142A1433142D143B14360000144300001448144E144B1453000000001456145F145C +146714641424147A143E1412140A145918C318C318C918C918C918C918CB18CB18CB18CB18CF18CF18CF18CF18C718C7 +18C718C718CD18CD18CD18CD18C518C518C518C518E718E718E718E718E918E918E918E918D318D318D318D318D118D1 +18D118D118D518D518D518D518D718D718D718D718DD18DD18DB18DB18DF18DF18D918D918E318E318E118E118EB18EB +18EB18EB18EF18EF18EF18EF18F318F318F318F318F118F118F118F118F518F518F718F718F718F71918191818FB18FB +18FB18FB18F918F918F918F9163C163C1915191500000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000018ED000018ED18ED18AE18ED +18AA18AE18B218AA190618B2190D190D19001900190B190B18B618B618B618B614C014C01878187818B818B8189C189C +18AC18AC18A818A818B018B018B418B418A018B418A018A0190F190F190F190F1880187C18A01890149F18A414A914A2 +14BF14B614C914C214E314D8151514F8151D1518152F15261537153214DC14CD157C14E014E7157F15B015A515C515B7 +163E160D1650164D1665165B16731670168F168A16B2162016EA16B516F016ED16FE16F717061701171C170D1724171F +172A17271730172D173E173317551741177317641624163714FC178B15041500150815D117D8150C17FA17EB18141803 +181C1817182A181F1847182D1855184E186F185E158F1872184215990064005D0072006B00800079188C188818941890 +18A418A014B3148614B914B614C214BF14F514F2150F14F81518151515231520152915261532152F170116FE171F171C +17301724173E173316371741178B162415D11790180017FD180E18031817181418581842185E185B186F1869187C1872 +188418801898189014A2149F14B614A914C914BC14E314D8151214F81537152614DC14CD157C14E015A514E715B715B0 +160D15C5163E16181650164D1665165B168A16701620168F16B516B216ED16EA16F716F0170D1706172A17271730172D +1755173317731764148B1637150014FC15D1150417EB17D8180317FA181C18111830181F184E1847185E185518901698 +14B6189814F814BC1526151215C5152C15F715D41730160216371733181118031698185E16D716D0168216DE16AA1685 +16C416AD15D716C7160515DA153B160814D114A614EB14D5164514AD1668164815DF166B15F115E615F415F7161B15C2 +1682166216AA168516C416AD15D716C7160515DA153B160814D114A614EB14D5164514AD1668164815DF166B15F115E6 +15F415F7161B15C215DF166215F115E615D415F71673160215B015A515DF15B715F115E6168A1673148E148E00000000 +000000000000000000000000000000000000000000000000000000000000000014DB14CC14DF14DB14FB14E6150314FF +154E154E156C157015A815B315CC15AC15C815CC15D015D01610161015E9164115E215E915FA15FA15FE15FE165E1653 +1676165E167A16761692167E169E169E16B816A216BC16C016F316F317141710176F17671758176B17761758177D1776 +17A9177D17B617AD179E179617C117BD000000001822179A17EE182617DF17F217E317DF1806180A1861186114D414AC +14EE14D0150B14EA155615071552153A161415BA165715ED17811760184A185117CC186517F6171817671710173A16A6 +17C517DB1736175C17DB175C1565153E16FA17A2173614A51641169217E715BE00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001709163A14841489161E17B11696159416231635154216270000159C00000000 +00000000000000000000000000000000000000000000000000000000000000001BE002F605401BE2008D05461C260093 +02FF1C280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1B1A02FC09961B1800A109960E3E00A51BFA0E421BF41BFE1BE81BF61BE41BEA1BEC1BE61BF01BEE00001BF2098E0000 +000C0992000C000C0996000C099609961BE002F6000002FA05400546008D009300A11B1A0E3E00A51BFA0E4200971BFE +02F2009D02F802F40559054800000544009909900566009B000000000000000016CA00570000005A0000006116CD0068 +16D4006F16DB007616E2007D16E500841491148014941491183A14941497183A187514971875187514821875149D1482 +149D149D14C5149D14C714C514C714C7151B14C7151B151B14A0151B14A014A014A314A014A314A314AA14A314AA14AA +158B14AA158D158B1487158D14B4148715A314B415A315A315DD15A315DD15DD160B15DD160B160B164B160B164B164B +166E164B166E166E1688166E16881688168D1688168D168D16B0168D16B016B016E816B016E816E8170416E817041704 +1722170417221722159717221597159714B7159714B714B714BA14B714BA14BA148C14BA148C148C1833148C14C01833 +14A714C014A714A7174914A7174D17491751174D174617510000174600000000008D000000970095009B0099009F009D +00A500A102F402F202F802F6030302FA03140305030F0343037403650392038303B003A1054605400544054800930559 +0568056605E305D5062905E60687067E06CF06AC071A06070723073407A70781083E06AF0861076D056B0890077306B2 +095D0682098E060A09920990099609940692099809A3093A0A800A3106020ADC0AE30B100B7C073E05D30A2B078A0B3E +05D80CD608430A140A270BA60DE4086D06950B440E3E06110E420E401BD50E441BE21BD71BEE1BEC1F0B1BE01C851F04 +1CAC1C9E1CC71CB71EBE1EB11D9D1EC61C871CC51CAE1CA01CC91CB91CF01CD31D3F1D221D5C1D481CCD1D6C1D891D7C +1CAA1D8E1DA41D9F1D551C8D1DC01DBE1DBC1D3D1DE81DCA1E231E041CE01E4E1CD11E8B1EAF1E9E1EC01EB31ECA1EC8 +1C9C1CE41D0C1EE31CB51EF1008B008819EF1A7F1ABB19F41ABD19F619FB1ABF1A021A001AC31AC11AC71AC51ACB1AC9 +1A071A511A111A0C1A131A5B1A1A1A181A2C1A221A391A2E1A431A3E00001A48000000001A8319F21A871A851A8B1A89 +000000001A8F1A8D1A931A371A971A95000000001A201A991A9F1A9D1AA31AA1000000001A2A1AA500001AA900000000 +0E480E4600090E4E0E4A0E4C00001B2F1B311BCF1B381B361BD11B3D00001BD300000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000277A0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000277D00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0F3300000E630F350E950F0E0F1C00000F2027760E9B0F1E1B140E9D0EA70E9F0EB30F280EAB0EAF0E740F100EB90F12 +0F2A0EEF0EC30F2C2770281128130EC728150EFD0ED70E6D05D80ED928170EDF0EE50EE30F260EE727780F220EF10F24 +00001BDC0F180EFF0F0C0F1A0E870E8528190E890000281B000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000027800000278300000000 +000000000000000000000000000000000000000027860000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000278C2789 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000278F000000002792000000000000000000000000000000000000000000000000000000000000000000000000 +000000002795000027980000000000000000000000000000000000000000279B279E0000000000000000000000000000 +00000000000000000000000000000000000000000000000027A4000027A10000000027A7000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000027AD0000000027AA000027B0 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000027B627B300000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000027B900000000000000000000000027BC000027C027CD27C427D127D027BF +000027C30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000027D727DB000027DA000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000005D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7076D083E +0890086106B2056B06820773060A095D03140305030F0343037403650392038303B003A1000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000027E427E127EB27E727F327EF000027F70000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000027FB000027FE280628022809 +0000280D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000005D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7 +076D083E0890086106B2056B06820773060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D3 +0CD6078A0A1405D80BA60843086D0A270B440DE40611069505D5056805E605E3067E062906AC0687060706CF0734071A +0781072306AF07A7076D083E0890086106B2056B06820773060A095D093A06920A3109A30ADC0A8000000602073E0AE3 +0A2B0B7C0B3E05D30CD6078A0A1405D80BA60843086D0A270B440DE40611069505D5056805E605E3067E062906AC0687 +060706CF0734071A0781072306AF07A7076D083E0890086106B2056B06820773060A095D093A06920A3109A30ADC0A80 +0B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D80BA60843086D0A270B440DE4061106950000056805E605E3 +0000000000000687060700000000071A0781000006AF07A70000083E0890086106B2056B06820773060A095D093A0692 +0A3109A30ADC00000B100000073E0AE30A2B0B7C0B3E05D30CD600000A1405D80BA60843086D0A270B440DE406110695 +05D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7076D083E0890086106B2056B06820773 +060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D80BA60843086D0A27 +0B440DE40611069505D5056805E60000067E062900000687060700000734071A0781072306AF07A70000083E08900861 +06B2056B068207730000095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D8 +0BA60843086D0A270B440DE40611069505D5056805E60000067E062900000687060706CF0734071A00000723000007A7 +000000000890086106B2056B068207730000095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D3 +0CD6078A0A1405D80BA60843086D0A270B440DE40611069505D5056805E605E3067E062906AC0687060706CF0734071A +0781072306AF07A7076D083E0890086106B2056B06820773060A095D093A06920A3109A30ADC0A800B100602073E0AE3 +0A2B0B7C0B3E05D30CD6078A0A1405D80BA60843086D0A270B440DE4061106950781072306AF07A7076D083E08900861 +06B2056B06820773060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D8 +060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D80BA60843086D0A27 +0B440DE40611069505D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7076D083E08900861 +06B2056B06820773060A095D093A06920A3109A30ADC0A800B100602073E0AE30A2B0B7C0B3E05D30CD6078A0A1405D8 +0BA60843086D0A270B440DE40611069505D5056805E605E3067E062906AC0687060706CF0734071A0781072306AF07A7 +0B440DE4061106950E8D0E76000000000F950F400F990F970FB90F9B100A0FBB103B100C103F103D1043104110631045 +100A1065106C106A108E106E109210901B50077F114710E3114B1149116B114D11CB116D120B11CD120F120D122B1229 +124B122D1255124D125912571299125B129D129B1B4B129F11CB114D1299120B124B124D0F950F400F990F970FB90F9B +100A0FBB103B100C103F103D1043104110631045100A1065106C106A108E106E109210901B50077F114710E3114B1149 +116B114D11CB116D120B11CD120F120D122B1229124B122D1255124D125912571299125B129D129B1B4B129F11CB114D +1299120B124B124D0F950F400F990F970FB90F9B100A0FBB103B100C103F103D1043104110631045100A1065106C106A +108E106E109210901B50077F114710E3114B1149116B114D11CB116D120B11CD120F120D122B1229124B122D1255124D +125912571299125B129D129B1B4B129F11CB114D1299120B124B124D0F950F400F990F970FB90F9B100A0FBB103B100C +103F103D1043104110631045100A1065106C106A108E106E109210901B50077F114710E3114B1149116B114D11CB116D +120B11CD120F120D122B1229124B122D1255124D125912571299125B129D129B1B4B129F11CB114D1299120B124B124D +0F950F400F990F970FB90F9B100A0FBB103B100C103F103D1043104110631045100A1065106C106A108E106E10921090 +1B50077F114710E3114B1149116B114D11CB116D120B11CD120F120D122B1229124B122D1255124D125912571299125B +129D129B1B4B129F11CB114D1299120B124B124D12FF12FD0000000003140305030F0343037403650392038303B003A1 +03140305030F0343037403650392038303B003A103140305030F0343037403650392038303B003A103140305030F0343 +037403650392038303B003A103140305030F0343037403650392038303B003A100000000000000000000000000000000 +00000000000000000000000000000000134E13461352135013591357136C1364137F137113861384138F138A13931391 +1397139513A713A513AB13A913B413B013C013BB13E0276A13C913C413D713E8134613DB1350134E1357135213641359 +1371136C1384137F138F138A1397139313A713A513AB13A913B213B013D313B413C213C413D513CB13D9276800000000 +0000000000000000000000000000000000000000000000000000000000000000149D1482158B14A01833000014A314B4 +14A7166E1597172214BA14B7168D15A3160B16E81487170414C715DD14AA151B164B158D16B0168818F518BF18C118E5 +149D0000000014A00000148C14A3000014A700001597172214BA14B7168D15A3160B16E80000170414C715DD14AA151B +164B000016B00000000000000000000000000000000014A00000000014A3000014A700001597000014BA0000168D15A3 +160B000000001704000015DD14AA0000164B000016B0000018F5000018C10000149D0000000014A00000148C14A30000 +14A7166E0000172214BA14B7168D15A3160B16E80000170414C715DD14AA151B164B000016B01688000018BF000018E5 +149D1482158B14A01833148C14A314B414A7166E1597000014BA14B7168D15A3160B16E81487170414C715DD14AA151B +164B158D16B016880000000000000000149D0000158B14A01833000014A314B414A7166E1597000014BA14B7168D15A3 +160B16E81487170414C715DD14AA151B164B158D16B0168800000000000000000307030A03F1031604AB046804FA04DE +0520050B000005310000000000000000010200FE010A01060112010E011A01160122011E012A01260132012E013A0136 +0142013E014A01460152014E015A01560162015E05E31BFC05E5076D0000093605D5056805E605E3067E062906AC0687 +060706CF0734071A0781072306AF07A7076D083E0890086106B2056B06820773060A095D076F06B1086908630933082A +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000761075E0000076C000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000606000000000000000000000000 +000000000000000000000000000000001D4D1C7200001D5C000000000000000000000000000000000000000000000000 +216222491DA620A521331FC6213E25E422B01FCC229923A421F7204F229D201B24D820452612240E20C12125224F237E +1F98226526521F9E1FAC21AC225F20B3224B262624A22484236E20B7032922CD20512418266E20E70000000000000000 +1C001C181C0C1C041C101C1C1C081C2000001C1400000000000000000000000020AF21F9000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +03140305030F0343037403650392038303B003A10000000000000000000000001FB21FB6281D1FBA1FE71FDF1FED1FE9 +1FF31FF11FF51FF928251F1220052003201520071F14281F201B200B202328231FD42027202D202B203B28E11F18203F +204D204B20532051205F1F1A20672061206F206D20752071208720852093208B20992097209920992396282B20A720A3 +20AD282D20B520B120BF20C920C720C520CF20CB20D520D120DB20D920DF20DB20E520E320FD20EB20FF20EF20F520F1 +21232041210921072105210B210D210F282F2119212921272133212D21482137283328312150214E214C21521F1C2156 +215A1F1E215E215E216C28352170216E28372174217A2178217E21E921841F202192218C283B2190283D2196219A219C +21A6219E1F2221A821B421B021B821B6283F1F2421C91F2621CD21CB28F521D1284321DD2538284321E521E528511F28 +21ED28A51F2A21F1220321FB220922051F2E221122131F2C221528452221221F22212223222B2229222F223322352231 +22392237224121BD2251224D226322592261284B2267225B2275226B2279284D226F2273227D1F30228522811F32227F +2291228D22A7284F22B522C722BB1F381F341F36201F201D22BD22C91F6A252222D122CF22DD22D3285922D922E71F3A +22F422E1285D22F822EB22FA1F3C22FE23022300230A2304230E285F23141F3E23162861231C1F40232823222863232A +286528392867233A23442340234A233C235A235223562354235E235C23502869236C236A23761F42286B237423842366 +286F286D23902386238C238E23921F442398239A2821239E287123A6287523AC23BC23B6287723C623D223D0287B2879 +23E823E023EA1F461F481F4823F823F623FE23FC1F4A2404287D2410287F241E284124242881242C288528831F4E1F4C +28892448288B2887244C288D244E244E1F5224521F54245428911F562462245E1F582468247A2893289728952496248A +249A1F5A249E249C289B289924AA289B289D1F5C24B624B4289F1F5E1F6024C424C824CC28A324D01F6224DC24E624E2 +1F6424EE28A928A728AB1F6628AD24FA2506250028AF250A251428B1251828B31F6828532526252425281F6C28B52158 +285528B7253828572646253A25501F6E2552254E2554205B2558255628B9255C255E255A256A2568256C256025802576 +257025662574257228BF28BB1F7028BD2586258428C7258A28C1258C1F741F7228C528C3259C1F7625A0259E25A825A2 +25AC25A625B225AA25B025AE1F7825B425BA25B825C21F7A28C925C425CC25CA25D21F7C28CB1F161F7E28CD25E81F80 +260225F428CF260A2616261426282622282728D3262C262E28292632263E263828D728D52664265E28D926682680266A +26882686268E268428DB26901F82269628DD269A26B61F8426C221A028E328DF1F881F8628E526D628E71F8A26E226E2 +28E926E61F8C26F2270026FA2708270428EB1F8E272027121F90272627281F921F9428ED28F128EF273A28F327441F96 +274A27482752274E28F72756000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//13440 bytes +enum canonMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)(x" +0000000000000040000004C0", +x" +0000010000000900000010C0", +x" +020201000302020205020204020602020202020207020202000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000002000100040003000600050007000000090008 +000B000A00000000000000000000000000000000000D000C000F000E0000001000120011001400130000000000160015 +000000000000000000000000000000000017000000000000000000000000001800000000000000000000000000000000 +00000000000000000000000000000000001900000000001A000000000000001B001C00000000001D0000000000000000 +000000000000001E0000001F000000200000000000000021000000000000002200000000000000230000000000000024 +000000000000000000000000000000000000000000260025002800270000000000290000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002B002A0000002C000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002E002D0030002F00320031003400330036003500380037003A0039003C003B +0000003D000000000000000000000000003E0000000000000040003F0000004100430042004500440047004600480000 +004900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000004A00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000004C004B004E004D0050004F00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000520051005400530056005500580057 +005A0059005C005B005E005D0000005F0061006000000062000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640063 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000006600650000000000670000000000000000000000000000 +000000000000000000000000000000000000000000000068000000690000006A0000000000000000006B000000000000 +0000000000000000006C0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000006D000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +006E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000006F000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000071007000720000000000730000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007500740077007600790078007B007A007D007C007F007E008100800083008200000084000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000F000C00250012004F004500850000 +00A1009E00CB00A40121011E013301240188000001A0019D01B601A3000001DA026D00000273027002F3028700000000 +0322031F03380325036203580398000003B403B103DE03B7043704340446043A049C000004B404B104CA04B7000004EE +05840000058A0587060D059E061C0000033B0028033E002B0380006D038C0079038F007C0392007F0395008203A2008F +0000000003CD00BA03D800C503DB00C803FB00E803E400D1040A00F7041000FD0413010004190106041C010900000000 +043D01270440012A0443012D045C014900000130000000000462014F0471015D0163000001700477016604840000047A +000000000185000001940499018E04A8000004A20000000004D901C504E401D004F801E400000000052F021B05450231 +05350221054B02370552023E0569025505580244057B02640572025B00000000058D02760594027D059B028405B4029D +05B702A005E002C905F502DE061002F6030B0302031106280314062E00000631050401F0000000000000000000000000 +00000000000000000000000002AC0000000005C300000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000560000013D036901E7045002A304FB029205BA028E05A9 +029605A5028A05AD000005A1035B0048035400410653064A0000000004160103046B01570522020E05250211065F065C +0000046500000000040700F4000000000496018203650052065006470656064D036C0059036F005C03E700D403EA00D7 +045301400456014304FE01EA050101ED05380224053B022705BD02A605C002A905660252057802610000000004250112 +0000000000000000000000000351003E03F400E104F101DD04D101BD04E701D304EA01D6061602FC0000000000000000 +000000000000000000000000000000000010000D066B0000000001370000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000006620000000000000000000000000000000000000001 +0000000000000000063D00000645067006DF06C30000072C0000075907980778000008D1000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000007810735084707E908C10867 +0000092F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000092808CA091F08FD0000095F0000000009B40000000009B70000000000000000000000000000000000000000 +09CC09C609C300000000000009BA0000000000000000000009D809E4000009ED00000000000000000000000000000000 +09DE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000A20000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000A0E0A080A050000000000000A41000000000000000000000A1A0A2600000A2F +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A470A44 +0000000000000000000000000000000009CF000000000A11000000000000000000000000000000000000000000000000 +09FF09BD0A0209C0000000000A0B09C9000000000A4D0A4A0A1409D20A1709D5000000000A1D09DB0A2309E10A2909E7 +000000000A530A500A3E09FC0A2C09EA0A3209F00A3509F30A3809F6000000000A3B09F9000000000000000000000000 +000000000AC10ABE0AC40AC700000ACA0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000AD300000ACD000000000000000000000000000000000000000000000000 +000000000AD0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0AE800000000000000000000000000000AF100000000000000000AF40000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0AD90AD60ADF0ADC0AE50AE20AEE0AEB00000000000000000000000000000000000000000B00000000000B0300000000 +0000000000000000000000000000000000000000000000000AFA0AF70AFD000000000000000000000000000000000000 +00000000000000000000000000000000000000000B1200000000000000000B1500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0B0600000B0C0B090000000000000B0F0000000000000000000000000000000000000B210B1E000000000B2400000000 +0000000000000000000000000000000000000000000000000B1B0B180000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000B270000000000000000000000000000000000000000 +00000000000000000000000000000000000000000B300B2A00000B2D0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000B33000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000B3600000000000000000B400000 +00000B430B3C0B3900000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000B4C0B4600000B490000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000B4F0B550B5200000B59000000000B5F00000000000000000000 +00000000000000000B620000000000000000000000000B65000000000B680000000000000000000000000B6B00000000 +000000000000000000000000000000000B5C0000000000000000000000000000000000000B6E00000B71000000000B89 +00000B8C0000000000000000000000000B74000000000000000000000000000000000000000000000000000000000000 +000000000B7A0000000000000000000000000000000000000B7D0000000000000000000000000B80000000000B830000 +000000000000000000000B8600000000000000000000000000000000000000000B770000000000000000000000000000 +00000000000000000000000000000B8F0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000B9200000B9500000B9800000B9B00000B9E +0000000000000BA100000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000BA400000BA7000000000000 +0BAD0BAA0BB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000037D006A038300700386007303890076039B0088039F008C03A5009203AE009B +03A8009503AB009803D000BD03D400C103FE00EB040100EE03F700E4040400F1040D00FA041F010C042801150422010F +042B0118042E011B045F014C0449013604680154046E015A04740160047D01690480016C048A017604870173048D0179 +0490017C0493017F049F018B04A5019104AE019A04AB019704CD01B904D501C104DC01C804E001CC05290215052C0218 +0532021E053E022A0541022D0548023405550241055F024B054E023A055B02470562024E056C02580575025E0581026A +057E026705DD02C605E602CF05E302CC059002790597028005E902D205EC02D505EF02D805F202DB05FB02E405F802E1 +060102E7060402EA060702ED061902FF062B030E063403170637031A056F0431062205FE065900000000000000000000 +0372005F035F004C032C001903280015033400210330001D03750062034500320341002E034D003A0349003603790066 +03ED00DA03E100CE03CA00B703BE00AB03BA00A703C600B303C200AF03F000DD044D013A04590146051B020704F501E1 +04BE01AA04BA01A604C601B204C201AE051E020A050B01F7050701F3051301FF050F01FB0517020305DA02C305B1029A +05CA02B305C602AF05D202BB05CE02B705D602BF060A02F006250308061F0305061302F9000000000000000000000000 +081807F6081B07F908240802082D080B069B0679069E067C06A7068506B0068E0855084A0858084D085C085100000000 +06D106C606D406C906D806CD000000000890086E08930871089C087A08A50883070406E2070706E5071006EE071906F7 +08E808D908EB08DC08EF08E008F308E407470738074A073B074E073F07520743090B0900090E09030912090700000000 +0767075C076A075F076E076300000000094609370949093A094D093E095109420784000007870000078B0000078F0000 +09880966098B096909940972099D097B07BD079B07C0079E07C907A707D207B007E907E2084708440867086008C108BE +08FD08FA091F091C095F09580000000008360814081F07FD082808060831080F06B9069706A2068006AB068906B40692 +08AE088C0897087508A0087E08A9088707220700070B06E9071406F2071D06FB09A60984098F096D0998097609A1097F +07DB07B907C407A207CD07AB07D607B407F007F3084107E5000007EC083D083A067306760670066D000006BD000008BC +0640000008B908630000086A08B508B206C306C006DF06DC0BB307260BB90BB608C408C708D108CD0000000008D508F7 +072F0732072C07290BBC00000BC20BBF09220925092F092B0919091609330955077B077E07780775063A0772031D063D +0000000009B1095B0000096209AD09AA0759075607980795064307DF000000000BC70BC5000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000079300000000004F0152000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000BCC0BC9000000000000000000000000000000000000000000000000 +00000000000000000000000000000BCF0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000BD200000BD50BD800000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000BDB000000000BDE00000000000000000BE100000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE400000BE7 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0BEA00000000000000000BED0BF000000BF3000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000600000BF9000000000000000000000000000000000BF6000000090003 +0BFF0BFC000000000C050C02000000000C0B0C080000000000000000000000000C110C0E000000000C1D0C1A00000000 +0C230C200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000C2F0C2C0C350C3200000000000000000000000000000000 +000000000000000000000000000000000C170C140C290C260000000000000000000000000C3B0C380C410C3E00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0C47000000000C4900000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000C440000000000000000000000000000000000000000000000000000000000000C4E00000C51 +00000C5400000C5700000C5A00000C5D00000C6000000C6300000C6600000C6900000C6C00000C6F0C7200000C750000 +0C7800000000000000000000000000000C7E0C7B0C81000000000C840C8A0C870C8D000000000C900C960C9300000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4B00000000 +00000000000000000000000000000C9900000000000000000000000000000000000000000000000000000C9F00000CA2 +00000CA500000CA800000CAB00000CAE00000CB100000CB400000CB700000CBA00000CBD00000CC00CC300000CC60000 +0CC900000000000000000000000000000CCF0CCC0CD2000000000CD50CDB0CD80CDE000000000CE10CE70CE400000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9C0CEA0000 +0CF00CED00000CF30000000000000CF60FB71241124B125D0D83104313270E290E9913270E4F12930F550E97116710CD +11FD11E31279121510190FEB109D1069128911C70D8D12F30FF50E1D11E110790EDB130911D910510F65121D12031189 +0FBD0EFF108D10250D9D127D0E050DD90FF10F9510D3107711DD1171125911E712FB12CF10E91307114D110712A111B9 +122F130B0F0B0E87117D112F10ED108312CB12490ECB0E85102F0FED1147104712B11159117F0E030DDD0DDF114F1115 +12B511C50F67123D12350FEB0EBB0D8710950F270E1110C10DA510F10D7F0F1B0F9D10110E23114510D70E7D122711C9 +126D10050F6F100D0F7B11A50D9110BF0DDB0DC3113D0FDB122D11950E0912910E9F0E370FA10F0710F3105312F712AB +1313130D0FB50DF912690FFD0F490EF30F910F57106D104B111110AF1179115311CD126112A312710DFB0DE910670E41 +1227120B0F230EFD10030F771091112D0E670D970EE50EBB109B0F29116B10A91295117512D112C90D9F12DD128D110F +0F3512C10DB10D8F0EC70EBD0FEB0F9F10CB1073127711D30FAD13230DF712AF0FD10FCB103B102110BD10A1114310E7 +0DC512E312B70F5D0ED70DA9126310310F390F1710950FD50DEB12BB0ECF0E310FC30FA710150FE110C3109F120D1163 +128F12130E1312C50E33103D10B1107512BD11DB130F12FF102D0FCF1121118B113311251063108B0D93123B0DED11AD +0EF50DE711390F69101B0EB512670FB312B312050F0312210E590DB50000000000000E7B00000FAB0DE1000010CF108F +110310F5110D1105113512D30000116D000011DF0000123312730000000012830000000012E912E7130512EB12BF127F +0DB30DA10E010DB90E170E070E5F0E530E790E630ECD0E7F0F2F0ED10F470F430F970F530FAF0FA310270FDD10491035 +107D106F10EB10A310FB10F710FD10F9110110FF110B1109111D111711531127115B1157117311611197118D11CB1197 +1223121912391237124F124D1273126F12D912C70F2B12E111931416000000000DD70D810D9B0DC10DC90DB70E0B0DFF +0E490E530E5D0E510E830E7B0E9B0E950EB10EA90F050F010F1D0F130F3F0F330F470F370F530F410F7F0F5F0F890F85 +0FAB0F990FBF0FBD0FFF0FC710211005104110451057104910E3106F1089107F10AB108F10B910B510C910C710D110CF +10DF10D510EF10DD1127111F11491131115F115311AF117311F911C3121F121B12291223122B12331235123712391231 +124F123F127512651299128B12C712B912D512D312DB12D912F912E113EC132713FE13EA0D370D2314320D3914741444 +132513210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000A7A00000ABB000000000000000000000000000000000000 +000000000AB50AB20AAE0AAA0A590A560A5F0A5C0A680A650A710A6B00000A740A7D0A770A830A8000000A8900000A8C +0A920A8F0A95000000000A980AA10A9E0AA70AA40A6E0AB80A860A6200000A9B00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000013290000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000132C00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000132F00001332000000000000000000000000000000000000000000000000133500000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000133B13380000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000133E0000000013410000000000000000000000000000000000000000 +00000000000000000000000000000000000000001344000013470000000000000000000000000000000000000000134A +134D00000000000000000000000000000000000000000000000000000000000000000000000000001353000013500000 +000013560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000135C0000000013590000135F0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000013651362000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001368000000000000000000000000 +136B0000136F137C13731380137F136E0000137200000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001386138A000013890000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013931390 +139A139613A2139E000013A6000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000013AA000013AD13B513B113B8000013BC000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0D850D8913C00D8B0DA10D990DA70DA30DAD0DAB0DAF0DB313C80CF90DBB0DB90DC70DBD0CFB13C20DCB0DBF0DD113C6 +0D950DD30DD70DD50DE314840CFF0DE50DF10DEF0DF50DF30DFF0D010E070E010E0D0E0B0E110E0F0E170E150E1B0E19 +0E210E1F0E210E21105D13CE0E270E250E2B13D00E2F0E2D0E350E3D0E3B0E390E430E3F0E470E450E4D0E4B0E510E4D +0E570E550E690E5B0E6B0E5F0E650E610E890DE70E710E6F0E6D0E730E750E7713D20E810E8D0E8B0E910E8F0E9D0E93 +13D613D40EA50EA30EA10EA70D030EAB0EAF0D050EB30EB30EB713D80EBB0EB913DA0EBF0EC30EC10EC50F0F0EC90D07 +0ED50ED113DE0ED313E00ED90EDD0EDF0EE70EE10D090EE90EED0EEB0EF10EEF13E20D0B0EF70D0D0EFB0EF914980EFF +13E60F09118F13E60F0D0F0D13F40D0F0F1114480D110F150F1F0F190F250F210D150F2D0F2F0D130F3113E80F3D0F3B +0F3D0F3F0F470F450F4B0F4F0F510F4D0F550F530F5B0F590F630F610F730F6B0F7113EE0F750F6D0F830F790F8713F0 +0F7D0F810F8B0D170F930F8F0D190F8D0F9B0F970FA513F20FA90FB90FAF0D1F0D1B0D1D0DCF0DCD0FB10FBB0D511181 +0FBF0FBD0FC90FC113FC0FC50FD30D210FD90FCD14000FDD0FD70FDF0D230FE30FE70FE50FEF0FE90FF314020FF70D25 +0FF914040FFB0D271005100114061007140813DC140A10091013100F1017100B1027101F10231021102B1029101D140C +1039103710410D29140E103F104D1033141214101059104F10551057105B0D2B105F106113C410651414106B14181071 +107F107B141A108110871085141E141C1097109310990D2D0D2F0D2F10A710A510AD10AB0D3110B3142010B7142210BB +13E410C1142410C5142814260D350D33142C10D5142E142A10D9143010DB10DB0D3910DF0D3B10E114340D3D10E910E5 +0D3F10EF10FF1436143A14381113110D11170D41111B1119143E143C1123143E14400D43112B112914420D450D471137 +113B113F144611410D49114B115511510D4B115D144C144A144E0D4D14501165116F11691452117311771454117B1456 +0D4F13F61185118311870D5314580EAD13F8145A118F13FA126B1191119B0D55119D1199119F0DFD11A311A1145C11A7 +11A911A511B511B311B711AB11CB11C111BB11B111BF11BD1462145E0D57146011D111CF146A11D5146411D70D5B0D59 +1468146611E50D5D11E911E711EF11EB11F311ED11F911F111F711F50D5F11FB120111FF12070D61146C12091211120F +12170D63146E0CFD0D65147012250D67123F123114721243124712451253125113CA14761255125713CC125B1265125F +147A14781281127B147C128512971287129F129D12A5129B147E12A70D6912A9148012AD12C30D6B12CD0EE314861482 +0D6F0D6D148812D7148A0D7112DB12DB148C12DF0D7312E512EF12ED12F512F1148E0D7512FD12F90D77130113030D79 +0D7B1490149414921311149613150D7D13191317131D131B149A131F0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +dstring decompCanonTable() nothrow @nogc pure @safe { +static immutable dchar[5276] t = +"\u0000\u003B\u0000\u003C\u0338\u0000\u003D\u0338\u0000\u003E\u0338\u0000\u0041\u0300\u0000\u0041\u0301\u0000\u0041"d~ +"\u0302\u0000\u0041\u0302\u0300\u0000\u0041\u0302\u0301\u0000\u0041\u0302\u0303\u0000\u0041\u0302\u0309\u0000\u0041"d~ +"\u0303\u0000\u0041\u0304\u0000\u0041\u0306\u0000\u0041\u0306\u0300\u0000\u0041\u0306\u0301\u0000\u0041\u0306\u0303"d~ +"\u0000\u0041\u0306\u0309\u0000\u0041\u0307\u0000\u0041\u0307\u0304\u0000\u0041\u0308\u0000\u0041\u0308\u0304\u0000"d~ +"\u0041\u0309\u0000\u0041\u030A\u0000\u0041\u030A\u0301\u0000\u0041\u030C\u0000\u0041\u030F\u0000\u0041\u0311\u0000"d~ +"\u0041\u0323\u0000\u0041\u0323\u0302\u0000\u0041\u0323\u0306\u0000\u0041\u0325\u0000\u0041\u0328\u0000\u0042\u0307"d~ +"\u0000\u0042\u0323\u0000\u0042\u0331\u0000\u0043\u0301\u0000\u0043\u0302\u0000\u0043\u0307\u0000\u0043\u030C\u0000"d~ +"\u0043\u0327\u0000\u0043\u0327\u0301\u0000\u0044\u0307\u0000\u0044\u030C\u0000\u0044\u0323\u0000\u0044\u0327\u0000"d~ +"\u0044\u032D\u0000\u0044\u0331\u0000\u0045\u0300\u0000\u0045\u0301\u0000\u0045\u0302\u0000\u0045\u0302\u0300\u0000"d~ +"\u0045\u0302\u0301\u0000\u0045\u0302\u0303\u0000\u0045\u0302\u0309\u0000\u0045\u0303\u0000\u0045\u0304\u0000\u0045"d~ +"\u0304\u0300\u0000\u0045\u0304\u0301\u0000\u0045\u0306\u0000\u0045\u0307\u0000\u0045\u0308\u0000\u0045\u0309\u0000"d~ +"\u0045\u030C\u0000\u0045\u030F\u0000\u0045\u0311\u0000\u0045\u0323\u0000\u0045\u0323\u0302\u0000\u0045\u0327\u0000"d~ +"\u0045\u0327\u0306\u0000\u0045\u0328\u0000\u0045\u032D\u0000\u0045\u0330\u0000\u0046\u0307\u0000\u0047\u0301\u0000"d~ +"\u0047\u0302\u0000\u0047\u0304\u0000\u0047\u0306\u0000\u0047\u0307\u0000\u0047\u030C\u0000\u0047\u0327\u0000\u0048"d~ +"\u0302\u0000\u0048\u0307\u0000\u0048\u0308\u0000\u0048\u030C\u0000\u0048\u0323\u0000\u0048\u0327\u0000\u0048\u032E"d~ +"\u0000\u0049\u0300\u0000\u0049\u0301\u0000\u0049\u0302\u0000\u0049\u0303\u0000\u0049\u0304\u0000\u0049\u0306\u0000"d~ +"\u0049\u0307\u0000\u0049\u0308\u0000\u0049\u0308\u0301\u0000\u0049\u0309\u0000\u0049\u030C\u0000\u0049\u030F\u0000"d~ +"\u0049\u0311\u0000\u0049\u0323\u0000\u0049\u0328\u0000\u0049\u0330\u0000\u004A\u0302\u0000\u004B\u0000\u004B\u0301"d~ +"\u0000\u004B\u030C\u0000\u004B\u0323\u0000\u004B\u0327\u0000\u004B\u0331\u0000\u004C\u0301\u0000\u004C\u030C\u0000"d~ +"\u004C\u0323\u0000\u004C\u0323\u0304\u0000\u004C\u0327\u0000\u004C\u032D\u0000\u004C\u0331\u0000\u004D\u0301\u0000"d~ +"\u004D\u0307\u0000\u004D\u0323\u0000\u004E\u0300\u0000\u004E\u0301\u0000\u004E\u0303\u0000\u004E\u0307\u0000\u004E"d~ +"\u030C\u0000\u004E\u0323\u0000\u004E\u0327\u0000\u004E\u032D\u0000\u004E\u0331\u0000\u004F\u0300\u0000\u004F\u0301"d~ +"\u0000\u004F\u0302\u0000\u004F\u0302\u0300\u0000\u004F\u0302\u0301\u0000\u004F\u0302\u0303\u0000\u004F\u0302\u0309"d~ +"\u0000\u004F\u0303\u0000\u004F\u0303\u0301\u0000\u004F\u0303\u0304\u0000\u004F\u0303\u0308\u0000\u004F\u0304\u0000"d~ +"\u004F\u0304\u0300\u0000\u004F\u0304\u0301\u0000\u004F\u0306\u0000\u004F\u0307\u0000\u004F\u0307\u0304\u0000\u004F"d~ +"\u0308\u0000\u004F\u0308\u0304\u0000\u004F\u0309\u0000\u004F\u030B\u0000\u004F\u030C\u0000\u004F\u030F\u0000\u004F"d~ +"\u0311\u0000\u004F\u031B\u0000\u004F\u031B\u0300\u0000\u004F\u031B\u0301\u0000\u004F\u031B\u0303\u0000\u004F\u031B"d~ +"\u0309\u0000\u004F\u031B\u0323\u0000\u004F\u0323\u0000\u004F\u0323\u0302\u0000\u004F\u0328\u0000\u004F\u0328\u0304"d~ +"\u0000\u0050\u0301\u0000\u0050\u0307\u0000\u0052\u0301\u0000\u0052\u0307\u0000\u0052\u030C\u0000\u0052\u030F\u0000"d~ +"\u0052\u0311\u0000\u0052\u0323\u0000\u0052\u0323\u0304\u0000\u0052\u0327\u0000\u0052\u0331\u0000\u0053\u0301\u0000"d~ +"\u0053\u0301\u0307\u0000\u0053\u0302\u0000\u0053\u0307\u0000\u0053\u030C\u0000\u0053\u030C\u0307\u0000\u0053\u0323"d~ +"\u0000\u0053\u0323\u0307\u0000\u0053\u0326\u0000\u0053\u0327\u0000\u0054\u0307\u0000\u0054\u030C\u0000\u0054\u0323"d~ +"\u0000\u0054\u0326\u0000\u0054\u0327\u0000\u0054\u032D\u0000\u0054\u0331\u0000\u0055\u0300\u0000\u0055\u0301\u0000"d~ +"\u0055\u0302\u0000\u0055\u0303\u0000\u0055\u0303\u0301\u0000\u0055\u0304\u0000\u0055\u0304\u0308\u0000\u0055\u0306"d~ +"\u0000\u0055\u0308\u0000\u0055\u0308\u0300\u0000\u0055\u0308\u0301\u0000\u0055\u0308\u0304\u0000\u0055\u0308\u030C"d~ +"\u0000\u0055\u0309\u0000\u0055\u030A\u0000\u0055\u030B\u0000\u0055\u030C\u0000\u0055\u030F\u0000\u0055\u0311\u0000"d~ +"\u0055\u031B\u0000\u0055\u031B\u0300\u0000\u0055\u031B\u0301\u0000\u0055\u031B\u0303\u0000\u0055\u031B\u0309\u0000"d~ +"\u0055\u031B\u0323\u0000\u0055\u0323\u0000\u0055\u0324\u0000\u0055\u0328\u0000\u0055\u032D\u0000\u0055\u0330\u0000"d~ +"\u0056\u0303\u0000\u0056\u0323\u0000\u0057\u0300\u0000\u0057\u0301\u0000\u0057\u0302\u0000\u0057\u0307\u0000\u0057"d~ +"\u0308\u0000\u0057\u0323\u0000\u0058\u0307\u0000\u0058\u0308\u0000\u0059\u0300\u0000\u0059\u0301\u0000\u0059\u0302"d~ +"\u0000\u0059\u0303\u0000\u0059\u0304\u0000\u0059\u0307\u0000\u0059\u0308\u0000\u0059\u0309\u0000\u0059\u0323\u0000"d~ +"\u005A\u0301\u0000\u005A\u0302\u0000\u005A\u0307\u0000\u005A\u030C\u0000\u005A\u0323\u0000\u005A\u0331\u0000\u0060"d~ +"\u0000\u0061\u0300\u0000\u0061\u0301\u0000\u0061\u0302\u0000\u0061\u0302\u0300\u0000\u0061\u0302\u0301\u0000\u0061"d~ +"\u0302\u0303\u0000\u0061\u0302\u0309\u0000\u0061\u0303\u0000\u0061\u0304\u0000\u0061\u0306\u0000\u0061\u0306\u0300"d~ +"\u0000\u0061\u0306\u0301\u0000\u0061\u0306\u0303\u0000\u0061\u0306\u0309\u0000\u0061\u0307\u0000\u0061\u0307\u0304"d~ +"\u0000\u0061\u0308\u0000\u0061\u0308\u0304\u0000\u0061\u0309\u0000\u0061\u030A\u0000\u0061\u030A\u0301\u0000\u0061"d~ +"\u030C\u0000\u0061\u030F\u0000\u0061\u0311\u0000\u0061\u0323\u0000\u0061\u0323\u0302\u0000\u0061\u0323\u0306\u0000"d~ +"\u0061\u0325\u0000\u0061\u0328\u0000\u0062\u0307\u0000\u0062\u0323\u0000\u0062\u0331\u0000\u0063\u0301\u0000\u0063"d~ +"\u0302\u0000\u0063\u0307\u0000\u0063\u030C\u0000\u0063\u0327\u0000\u0063\u0327\u0301\u0000\u0064\u0307\u0000\u0064"d~ +"\u030C\u0000\u0064\u0323\u0000\u0064\u0327\u0000\u0064\u032D\u0000\u0064\u0331\u0000\u0065\u0300\u0000\u0065\u0301"d~ +"\u0000\u0065\u0302\u0000\u0065\u0302\u0300\u0000\u0065\u0302\u0301\u0000\u0065\u0302\u0303\u0000\u0065\u0302\u0309"d~ +"\u0000\u0065\u0303\u0000\u0065\u0304\u0000\u0065\u0304\u0300\u0000\u0065\u0304\u0301\u0000\u0065\u0306\u0000\u0065"d~ +"\u0307\u0000\u0065\u0308\u0000\u0065\u0309\u0000\u0065\u030C\u0000\u0065\u030F\u0000\u0065\u0311\u0000\u0065\u0323"d~ +"\u0000\u0065\u0323\u0302\u0000\u0065\u0327\u0000\u0065\u0327\u0306\u0000\u0065\u0328\u0000\u0065\u032D\u0000\u0065"d~ +"\u0330\u0000\u0066\u0307\u0000\u0067\u0301\u0000\u0067\u0302\u0000\u0067\u0304\u0000\u0067\u0306\u0000\u0067\u0307"d~ +"\u0000\u0067\u030C\u0000\u0067\u0327\u0000\u0068\u0302\u0000\u0068\u0307\u0000\u0068\u0308\u0000\u0068\u030C\u0000"d~ +"\u0068\u0323\u0000\u0068\u0327\u0000\u0068\u032E\u0000\u0068\u0331\u0000\u0069\u0300\u0000\u0069\u0301\u0000\u0069"d~ +"\u0302\u0000\u0069\u0303\u0000\u0069\u0304\u0000\u0069\u0306\u0000\u0069\u0308\u0000\u0069\u0308\u0301\u0000\u0069"d~ +"\u0309\u0000\u0069\u030C\u0000\u0069\u030F\u0000\u0069\u0311\u0000\u0069\u0323\u0000\u0069\u0328\u0000\u0069\u0330"d~ +"\u0000\u006A\u0302\u0000\u006A\u030C\u0000\u006B\u0301\u0000\u006B\u030C\u0000\u006B\u0323\u0000\u006B\u0327\u0000"d~ +"\u006B\u0331\u0000\u006C\u0301\u0000\u006C\u030C\u0000\u006C\u0323\u0000\u006C\u0323\u0304\u0000\u006C\u0327\u0000"d~ +"\u006C\u032D\u0000\u006C\u0331\u0000\u006D\u0301\u0000\u006D\u0307\u0000\u006D\u0323\u0000\u006E\u0300\u0000\u006E"d~ +"\u0301\u0000\u006E\u0303\u0000\u006E\u0307\u0000\u006E\u030C\u0000\u006E\u0323\u0000\u006E\u0327\u0000\u006E\u032D"d~ +"\u0000\u006E\u0331\u0000\u006F\u0300\u0000\u006F\u0301\u0000\u006F\u0302\u0000\u006F\u0302\u0300\u0000\u006F\u0302"d~ +"\u0301\u0000\u006F\u0302\u0303\u0000\u006F\u0302\u0309\u0000\u006F\u0303\u0000\u006F\u0303\u0301\u0000\u006F\u0303"d~ +"\u0304\u0000\u006F\u0303\u0308\u0000\u006F\u0304\u0000\u006F\u0304\u0300\u0000\u006F\u0304\u0301\u0000\u006F\u0306"d~ +"\u0000\u006F\u0307\u0000\u006F\u0307\u0304\u0000\u006F\u0308\u0000\u006F\u0308\u0304\u0000\u006F\u0309\u0000\u006F"d~ +"\u030B\u0000\u006F\u030C\u0000\u006F\u030F\u0000\u006F\u0311\u0000\u006F\u031B\u0000\u006F\u031B\u0300\u0000\u006F"d~ +"\u031B\u0301\u0000\u006F\u031B\u0303\u0000\u006F\u031B\u0309\u0000\u006F\u031B\u0323\u0000\u006F\u0323\u0000\u006F"d~ +"\u0323\u0302\u0000\u006F\u0328\u0000\u006F\u0328\u0304\u0000\u0070\u0301\u0000\u0070\u0307\u0000\u0072\u0301\u0000"d~ +"\u0072\u0307\u0000\u0072\u030C\u0000\u0072\u030F\u0000\u0072\u0311\u0000\u0072\u0323\u0000\u0072\u0323\u0304\u0000"d~ +"\u0072\u0327\u0000\u0072\u0331\u0000\u0073\u0301\u0000\u0073\u0301\u0307\u0000\u0073\u0302\u0000\u0073\u0307\u0000"d~ +"\u0073\u030C\u0000\u0073\u030C\u0307\u0000\u0073\u0323\u0000\u0073\u0323\u0307\u0000\u0073\u0326\u0000\u0073\u0327"d~ +"\u0000\u0074\u0307\u0000\u0074\u0308\u0000\u0074\u030C\u0000\u0074\u0323\u0000\u0074\u0326\u0000\u0074\u0327\u0000"d~ +"\u0074\u032D\u0000\u0074\u0331\u0000\u0075\u0300\u0000\u0075\u0301\u0000\u0075\u0302\u0000\u0075\u0303\u0000\u0075"d~ +"\u0303\u0301\u0000\u0075\u0304\u0000\u0075\u0304\u0308\u0000\u0075\u0306\u0000\u0075\u0308\u0000\u0075\u0308\u0300"d~ +"\u0000\u0075\u0308\u0301\u0000\u0075\u0308\u0304\u0000\u0075\u0308\u030C\u0000\u0075\u0309\u0000\u0075\u030A\u0000"d~ +"\u0075\u030B\u0000\u0075\u030C\u0000\u0075\u030F\u0000\u0075\u0311\u0000\u0075\u031B\u0000\u0075\u031B\u0300\u0000"d~ +"\u0075\u031B\u0301\u0000\u0075\u031B\u0303\u0000\u0075\u031B\u0309\u0000\u0075\u031B\u0323\u0000\u0075\u0323\u0000"d~ +"\u0075\u0324\u0000\u0075\u0328\u0000\u0075\u032D\u0000\u0075\u0330\u0000\u0076\u0303\u0000\u0076\u0323\u0000\u0077"d~ +"\u0300\u0000\u0077\u0301\u0000\u0077\u0302\u0000\u0077\u0307\u0000\u0077\u0308\u0000\u0077\u030A\u0000\u0077\u0323"d~ +"\u0000\u0078\u0307\u0000\u0078\u0308\u0000\u0079\u0300\u0000\u0079\u0301\u0000\u0079\u0302\u0000\u0079\u0303\u0000"d~ +"\u0079\u0304\u0000\u0079\u0307\u0000\u0079\u0308\u0000\u0079\u0309\u0000\u0079\u030A\u0000\u0079\u0323\u0000\u007A"d~ +"\u0301\u0000\u007A\u0302\u0000\u007A\u0307\u0000\u007A\u030C\u0000\u007A\u0323\u0000\u007A\u0331\u0000\u00A8\u0300"d~ +"\u0000\u00A8\u0301\u0000\u00A8\u0342\u0000\u00B4\u0000\u00B7\u0000\u00C6\u0301\u0000\u00C6\u0304\u0000\u00D8\u0301"d~ +"\u0000\u00E6\u0301\u0000\u00E6\u0304\u0000\u00F8\u0301\u0000\u017F\u0307\u0000\u01B7\u030C\u0000\u0292\u030C\u0000"d~ +"\u02B9\u0000\u0300\u0000\u0301\u0000\u0308\u0301\u0000\u0313\u0000\u0391\u0300\u0000\u0391\u0301\u0000\u0391\u0304"d~ +"\u0000\u0391\u0306\u0000\u0391\u0313\u0000\u0391\u0313\u0300\u0000\u0391\u0313\u0300\u0345\u0000\u0391\u0313\u0301"d~ +"\u0000\u0391\u0313\u0301\u0345\u0000\u0391\u0313\u0342\u0000\u0391\u0313\u0342\u0345\u0000\u0391\u0313\u0345\u0000"d~ +"\u0391\u0314\u0000\u0391\u0314\u0300\u0000\u0391\u0314\u0300\u0345\u0000\u0391\u0314\u0301\u0000\u0391\u0314\u0301"d~ +"\u0345\u0000\u0391\u0314\u0342\u0000\u0391\u0314\u0342\u0345\u0000\u0391\u0314\u0345\u0000\u0391\u0345\u0000\u0395"d~ +"\u0300\u0000\u0395\u0301\u0000\u0395\u0313\u0000\u0395\u0313\u0300\u0000\u0395\u0313\u0301\u0000\u0395\u0314\u0000"d~ +"\u0395\u0314\u0300\u0000\u0395\u0314\u0301\u0000\u0397\u0300\u0000\u0397\u0301\u0000\u0397\u0313\u0000\u0397\u0313"d~ +"\u0300\u0000\u0397\u0313\u0300\u0345\u0000\u0397\u0313\u0301\u0000\u0397\u0313\u0301\u0345\u0000\u0397\u0313\u0342"d~ +"\u0000\u0397\u0313\u0342\u0345\u0000\u0397\u0313\u0345\u0000\u0397\u0314\u0000\u0397\u0314\u0300\u0000\u0397\u0314"d~ +"\u0300\u0345\u0000\u0397\u0314\u0301\u0000\u0397\u0314\u0301\u0345\u0000\u0397\u0314\u0342\u0000\u0397\u0314\u0342"d~ +"\u0345\u0000\u0397\u0314\u0345\u0000\u0397\u0345\u0000\u0399\u0300\u0000\u0399\u0301\u0000\u0399\u0304\u0000\u0399"d~ +"\u0306\u0000\u0399\u0308\u0000\u0399\u0313\u0000\u0399\u0313\u0300\u0000\u0399\u0313\u0301\u0000\u0399\u0313\u0342"d~ +"\u0000\u0399\u0314\u0000\u0399\u0314\u0300\u0000\u0399\u0314\u0301\u0000\u0399\u0314\u0342\u0000\u039F\u0300\u0000"d~ +"\u039F\u0301\u0000\u039F\u0313\u0000\u039F\u0313\u0300\u0000\u039F\u0313\u0301\u0000\u039F\u0314\u0000\u039F\u0314"d~ +"\u0300\u0000\u039F\u0314\u0301\u0000\u03A1\u0314\u0000\u03A5\u0300\u0000\u03A5\u0301\u0000\u03A5\u0304\u0000\u03A5"d~ +"\u0306\u0000\u03A5\u0308\u0000\u03A5\u0314\u0000\u03A5\u0314\u0300\u0000\u03A5\u0314\u0301\u0000\u03A5\u0314\u0342"d~ +"\u0000\u03A9\u0000\u03A9\u0300\u0000\u03A9\u0301\u0000\u03A9\u0313\u0000\u03A9\u0313\u0300\u0000\u03A9\u0313\u0300"d~ +"\u0345\u0000\u03A9\u0313\u0301\u0000\u03A9\u0313\u0301\u0345\u0000\u03A9\u0313\u0342\u0000\u03A9\u0313\u0342\u0345"d~ +"\u0000\u03A9\u0313\u0345\u0000\u03A9\u0314\u0000\u03A9\u0314\u0300\u0000\u03A9\u0314\u0300\u0345\u0000\u03A9\u0314"d~ +"\u0301\u0000\u03A9\u0314\u0301\u0345\u0000\u03A9\u0314\u0342\u0000\u03A9\u0314\u0342\u0345\u0000\u03A9\u0314\u0345"d~ +"\u0000\u03A9\u0345\u0000\u03B1\u0300\u0000\u03B1\u0300\u0345\u0000\u03B1\u0301\u0000\u03B1\u0301\u0345\u0000\u03B1"d~ +"\u0304\u0000\u03B1\u0306\u0000\u03B1\u0313\u0000\u03B1\u0313\u0300\u0000\u03B1\u0313\u0300\u0345\u0000\u03B1\u0313"d~ +"\u0301\u0000\u03B1\u0313\u0301\u0345\u0000\u03B1\u0313\u0342\u0000\u03B1\u0313\u0342\u0345\u0000\u03B1\u0313\u0345"d~ +"\u0000\u03B1\u0314\u0000\u03B1\u0314\u0300\u0000\u03B1\u0314\u0300\u0345\u0000\u03B1\u0314\u0301\u0000\u03B1\u0314"d~ +"\u0301\u0345\u0000\u03B1\u0314\u0342\u0000\u03B1\u0314\u0342\u0345\u0000\u03B1\u0314\u0345\u0000\u03B1\u0342\u0000"d~ +"\u03B1\u0342\u0345\u0000\u03B1\u0345\u0000\u03B5\u0300\u0000\u03B5\u0301\u0000\u03B5\u0313\u0000\u03B5\u0313\u0300"d~ +"\u0000\u03B5\u0313\u0301\u0000\u03B5\u0314\u0000\u03B5\u0314\u0300\u0000\u03B5\u0314\u0301\u0000\u03B7\u0300\u0000"d~ +"\u03B7\u0300\u0345\u0000\u03B7\u0301\u0000\u03B7\u0301\u0345\u0000\u03B7\u0313\u0000\u03B7\u0313\u0300\u0000\u03B7"d~ +"\u0313\u0300\u0345\u0000\u03B7\u0313\u0301\u0000\u03B7\u0313\u0301\u0345\u0000\u03B7\u0313\u0342\u0000\u03B7\u0313"d~ +"\u0342\u0345\u0000\u03B7\u0313\u0345\u0000\u03B7\u0314\u0000\u03B7\u0314\u0300\u0000\u03B7\u0314\u0300\u0345\u0000"d~ +"\u03B7\u0314\u0301\u0000\u03B7\u0314\u0301\u0345\u0000\u03B7\u0314\u0342\u0000\u03B7\u0314\u0342\u0345\u0000\u03B7"d~ +"\u0314\u0345\u0000\u03B7\u0342\u0000\u03B7\u0342\u0345\u0000\u03B7\u0345\u0000\u03B9\u0000\u03B9\u0300\u0000\u03B9"d~ +"\u0301\u0000\u03B9\u0304\u0000\u03B9\u0306\u0000\u03B9\u0308\u0000\u03B9\u0308\u0300\u0000\u03B9\u0308\u0301\u0000"d~ +"\u03B9\u0308\u0342\u0000\u03B9\u0313\u0000\u03B9\u0313\u0300\u0000\u03B9\u0313\u0301\u0000\u03B9\u0313\u0342\u0000"d~ +"\u03B9\u0314\u0000\u03B9\u0314\u0300\u0000\u03B9\u0314\u0301\u0000\u03B9\u0314\u0342\u0000\u03B9\u0342\u0000\u03BF"d~ +"\u0300\u0000\u03BF\u0301\u0000\u03BF\u0313\u0000\u03BF\u0313\u0300\u0000\u03BF\u0313\u0301\u0000\u03BF\u0314\u0000"d~ +"\u03BF\u0314\u0300\u0000\u03BF\u0314\u0301\u0000\u03C1\u0313\u0000\u03C1\u0314\u0000\u03C5\u0300\u0000\u03C5\u0301"d~ +"\u0000\u03C5\u0304\u0000\u03C5\u0306\u0000\u03C5\u0308\u0000\u03C5\u0308\u0300\u0000\u03C5\u0308\u0301\u0000\u03C5"d~ +"\u0308\u0342\u0000\u03C5\u0313\u0000\u03C5\u0313\u0300\u0000\u03C5\u0313\u0301\u0000\u03C5\u0313\u0342\u0000\u03C5"d~ +"\u0314\u0000\u03C5\u0314\u0300\u0000\u03C5\u0314\u0301\u0000\u03C5\u0314\u0342\u0000\u03C5\u0342\u0000\u03C9\u0300"d~ +"\u0000\u03C9\u0300\u0345\u0000\u03C9\u0301\u0000\u03C9\u0301\u0345\u0000\u03C9\u0313\u0000\u03C9\u0313\u0300\u0000"d~ +"\u03C9\u0313\u0300\u0345\u0000\u03C9\u0313\u0301\u0000\u03C9\u0313\u0301\u0345\u0000\u03C9\u0313\u0342\u0000\u03C9"d~ +"\u0313\u0342\u0345\u0000\u03C9\u0313\u0345\u0000\u03C9\u0314\u0000\u03C9\u0314\u0300\u0000\u03C9\u0314\u0300\u0345"d~ +"\u0000\u03C9\u0314\u0301\u0000\u03C9\u0314\u0301\u0345\u0000\u03C9\u0314\u0342\u0000\u03C9\u0314\u0342\u0345\u0000"d~ +"\u03C9\u0314\u0345\u0000\u03C9\u0342\u0000\u03C9\u0342\u0345\u0000\u03C9\u0345\u0000\u03D2\u0301\u0000\u03D2\u0308"d~ +"\u0000\u0406\u0308\u0000\u0410\u0306\u0000\u0410\u0308\u0000\u0413\u0301\u0000\u0415\u0300\u0000\u0415\u0306\u0000"d~ +"\u0415\u0308\u0000\u0416\u0306\u0000\u0416\u0308\u0000\u0417\u0308\u0000\u0418\u0300\u0000\u0418\u0304\u0000\u0418"d~ +"\u0306\u0000\u0418\u0308\u0000\u041A\u0301\u0000\u041E\u0308\u0000\u0423\u0304\u0000\u0423\u0306\u0000\u0423\u0308"d~ +"\u0000\u0423\u030B\u0000\u0427\u0308\u0000\u042B\u0308\u0000\u042D\u0308\u0000\u0430\u0306\u0000\u0430\u0308\u0000"d~ +"\u0433\u0301\u0000\u0435\u0300\u0000\u0435\u0306\u0000\u0435\u0308\u0000\u0436\u0306\u0000\u0436\u0308\u0000\u0437"d~ +"\u0308\u0000\u0438\u0300\u0000\u0438\u0304\u0000\u0438\u0306\u0000\u0438\u0308\u0000\u043A\u0301\u0000\u043E\u0308"d~ +"\u0000\u0443\u0304\u0000\u0443\u0306\u0000\u0443\u0308\u0000\u0443\u030B\u0000\u0447\u0308\u0000\u044B\u0308\u0000"d~ +"\u044D\u0308\u0000\u0456\u0308\u0000\u0474\u030F\u0000\u0475\u030F\u0000\u04D8\u0308\u0000\u04D9\u0308\u0000\u04E8"d~ +"\u0308\u0000\u04E9\u0308\u0000\u05D0\u05B7\u0000\u05D0\u05B8\u0000\u05D0\u05BC\u0000\u05D1\u05BC\u0000\u05D1\u05BF"d~ +"\u0000\u05D2\u05BC\u0000\u05D3\u05BC\u0000\u05D4\u05BC\u0000\u05D5\u05B9\u0000\u05D5\u05BC\u0000\u05D6\u05BC\u0000"d~ +"\u05D8\u05BC\u0000\u05D9\u05B4\u0000\u05D9\u05BC\u0000\u05DA\u05BC\u0000\u05DB\u05BC\u0000\u05DB\u05BF\u0000\u05DC"d~ +"\u05BC\u0000\u05DE\u05BC\u0000\u05E0\u05BC\u0000\u05E1\u05BC\u0000\u05E3\u05BC\u0000\u05E4\u05BC\u0000\u05E4\u05BF"d~ +"\u0000\u05E6\u05BC\u0000\u05E7\u05BC\u0000\u05E8\u05BC\u0000\u05E9\u05BC\u0000\u05E9\u05BC\u05C1\u0000\u05E9\u05BC"d~ +"\u05C2\u0000\u05E9\u05C1\u0000\u05E9\u05C2\u0000\u05EA\u05BC\u0000\u05F2\u05B7\u0000\u0627\u0653\u0000\u0627\u0654"d~ +"\u0000\u0627\u0655\u0000\u0648\u0654\u0000\u064A\u0654\u0000\u06C1\u0654\u0000\u06D2\u0654\u0000\u06D5\u0654\u0000"d~ +"\u0915\u093C\u0000\u0916\u093C\u0000\u0917\u093C\u0000\u091C\u093C\u0000\u0921\u093C\u0000\u0922\u093C\u0000\u0928"d~ +"\u093C\u0000\u092B\u093C\u0000\u092F\u093C\u0000\u0930\u093C\u0000\u0933\u093C\u0000\u09A1\u09BC\u0000\u09A2\u09BC"d~ +"\u0000\u09AF\u09BC\u0000\u09C7\u09BE\u0000\u09C7\u09D7\u0000\u0A16\u0A3C\u0000\u0A17\u0A3C\u0000\u0A1C\u0A3C\u0000"d~ +"\u0A2B\u0A3C\u0000\u0A32\u0A3C\u0000\u0A38\u0A3C\u0000\u0B21\u0B3C\u0000\u0B22\u0B3C\u0000\u0B47\u0B3E\u0000\u0B47"d~ +"\u0B56\u0000\u0B47\u0B57\u0000\u0B92\u0BD7\u0000\u0BC6\u0BBE\u0000\u0BC6\u0BD7\u0000\u0BC7\u0BBE\u0000\u0C46\u0C56"d~ +"\u0000\u0CBF\u0CD5\u0000\u0CC6\u0CC2\u0000\u0CC6\u0CC2\u0CD5\u0000\u0CC6\u0CD5\u0000\u0CC6\u0CD6\u0000\u0D46\u0D3E"d~ +"\u0000\u0D46\u0D57\u0000\u0D47\u0D3E\u0000\u0DD9\u0DCA\u0000\u0DD9\u0DCF\u0000\u0DD9\u0DCF\u0DCA\u0000\u0DD9\u0DDF"d~ +"\u0000\u0F40\u0FB5\u0000\u0F42\u0FB7\u0000\u0F4C\u0FB7\u0000\u0F51\u0FB7\u0000\u0F56\u0FB7\u0000\u0F5B\u0FB7\u0000"d~ +"\u0F71\u0F72\u0000\u0F71\u0F74\u0000\u0F71\u0F80\u0000\u0F90\u0FB5\u0000\u0F92\u0FB7\u0000\u0F9C\u0FB7\u0000\u0FA1"d~ +"\u0FB7\u0000\u0FA6\u0FB7\u0000\u0FAB\u0FB7\u0000\u0FB2\u0F80\u0000\u0FB3\u0F80\u0000\u1025\u102E\u0000\u1B05\u1B35"d~ +"\u0000\u1B07\u1B35\u0000\u1B09\u1B35\u0000\u1B0B\u1B35\u0000\u1B0D\u1B35\u0000\u1B11\u1B35\u0000\u1B3A\u1B35\u0000"d~ +"\u1B3C\u1B35\u0000\u1B3E\u1B35\u0000\u1B3F\u1B35\u0000\u1B42\u1B35\u0000\u1FBF\u0300\u0000\u1FBF\u0301\u0000\u1FBF"d~ +"\u0342\u0000\u1FFE\u0300\u0000\u1FFE\u0301\u0000\u1FFE\u0342\u0000\u2002\u0000\u2003\u0000\u2190\u0338\u0000\u2192"d~ +"\u0338\u0000\u2194\u0338\u0000\u21D0\u0338\u0000\u21D2\u0338\u0000\u21D4\u0338\u0000\u2203\u0338\u0000\u2208\u0338"d~ +"\u0000\u220B\u0338\u0000\u2223\u0338\u0000\u2225\u0338\u0000\u223C\u0338\u0000\u2243\u0338\u0000\u2245\u0338\u0000"d~ +"\u2248\u0338\u0000\u224D\u0338\u0000\u2261\u0338\u0000\u2264\u0338\u0000\u2265\u0338\u0000\u2272\u0338\u0000\u2273"d~ +"\u0338\u0000\u2276\u0338\u0000\u2277\u0338\u0000\u227A\u0338\u0000\u227B\u0338\u0000\u227C\u0338\u0000\u227D\u0338"d~ +"\u0000\u2282\u0338\u0000\u2283\u0338\u0000\u2286\u0338\u0000\u2287\u0338\u0000\u2291\u0338\u0000\u2292\u0338\u0000"d~ +"\u22A2\u0338\u0000\u22A8\u0338\u0000\u22A9\u0338\u0000\u22AB\u0338\u0000\u22B2\u0338\u0000\u22B3\u0338\u0000\u22B4"d~ +"\u0338\u0000\u22B5\u0338\u0000\u2ADD\u0338\u0000\u3008\u0000\u3009\u0000\u3046\u3099\u0000\u304B\u3099\u0000\u304D"d~ +"\u3099\u0000\u304F\u3099\u0000\u3051\u3099\u0000\u3053\u3099\u0000\u3055\u3099\u0000\u3057\u3099\u0000\u3059\u3099"d~ +"\u0000\u305B\u3099\u0000\u305D\u3099\u0000\u305F\u3099\u0000\u3061\u3099\u0000\u3064\u3099\u0000\u3066\u3099\u0000"d~ +"\u3068\u3099\u0000\u306F\u3099\u0000\u306F\u309A\u0000\u3072\u3099\u0000\u3072\u309A\u0000\u3075\u3099\u0000\u3075"d~ +"\u309A\u0000\u3078\u3099\u0000\u3078\u309A\u0000\u307B\u3099\u0000\u307B\u309A\u0000\u309D\u3099\u0000\u30A6\u3099"d~ +"\u0000\u30AB\u3099\u0000\u30AD\u3099\u0000\u30AF\u3099\u0000\u30B1\u3099\u0000\u30B3\u3099\u0000\u30B5\u3099\u0000"d~ +"\u30B7\u3099\u0000\u30B9\u3099\u0000\u30BB\u3099\u0000\u30BD\u3099\u0000\u30BF\u3099\u0000\u30C1\u3099\u0000\u30C4"d~ +"\u3099\u0000\u30C6\u3099\u0000\u30C8\u3099\u0000\u30CF\u3099\u0000\u30CF\u309A\u0000\u30D2\u3099\u0000\u30D2\u309A"d~ +"\u0000\u30D5\u3099\u0000\u30D5\u309A\u0000\u30D8\u3099\u0000\u30D8\u309A\u0000\u30DB\u3099\u0000\u30DB\u309A\u0000"d~ +"\u30EF\u3099\u0000\u30F0\u3099\u0000\u30F1\u3099\u0000\u30F2\u3099\u0000\u30FD\u3099\u0000\u349E\u0000\u34B9\u0000"d~ +"\u34BB\u0000\u34DF\u0000\u3515\u0000\u36EE\u0000\u36FC\u0000\u3781\u0000\u382F\u0000\u3862\u0000\u387C\u0000\u38C7"d~ +"\u0000\u38E3\u0000\u391C\u0000\u393A\u0000\u3A2E\u0000\u3A6C\u0000\u3AE4\u0000\u3B08\u0000\u3B19\u0000\u3B49\u0000"d~ +"\u3B9D\u0000\u3C18\u0000\u3C4E\u0000\u3D33\u0000\u3D96\u0000\u3EAC\u0000\u3EB8\u0000\u3F1B\u0000\u3FFC\u0000\u4008"d~ +"\u0000\u4018\u0000\u4039\u0000\u4046\u0000\u4096\u0000\u40E3\u0000\u412F\u0000\u4202\u0000\u4227\u0000\u42A0\u0000"d~ +"\u4301\u0000\u4334\u0000\u4359\u0000\u43D5\u0000\u43D9\u0000\u440B\u0000\u446B\u0000\u452B\u0000\u455D\u0000\u4561"d~ +"\u0000\u456B\u0000\u45D7\u0000\u45F9\u0000\u4635\u0000\u46BE\u0000\u46C7\u0000\u4995\u0000\u49E6\u0000\u4A6E\u0000"d~ +"\u4A76\u0000\u4AB2\u0000\u4B33\u0000\u4BCE\u0000\u4CCE\u0000\u4CED\u0000\u4CF8\u0000\u4D56\u0000\u4E0D\u0000\u4E26"d~ +"\u0000\u4E32\u0000\u4E38\u0000\u4E39\u0000\u4E3D\u0000\u4E41\u0000\u4E82\u0000\u4E86\u0000\u4EAE\u0000\u4EC0\u0000"d~ +"\u4ECC\u0000\u4EE4\u0000\u4F60\u0000\u4F80\u0000\u4F86\u0000\u4F8B\u0000\u4FAE\u0000\u4FBB\u0000\u4FBF\u0000\u5002"d~ +"\u0000\u502B\u0000\u507A\u0000\u5099\u0000\u50CF\u0000\u50DA\u0000\u50E7\u0000\u5140\u0000\u5145\u0000\u514D\u0000"d~ +"\u5154\u0000\u5164\u0000\u5167\u0000\u5168\u0000\u5169\u0000\u516D\u0000\u5177\u0000\u5180\u0000\u518D\u0000\u5192"d~ +"\u0000\u5195\u0000\u5197\u0000\u51A4\u0000\u51AC\u0000\u51B5\u0000\u51B7\u0000\u51C9\u0000\u51CC\u0000\u51DC\u0000"d~ +"\u51DE\u0000\u51F5\u0000\u5203\u0000\u5207\u0000\u5217\u0000\u5229\u0000\u523A\u0000\u523B\u0000\u5246\u0000\u5272"d~ +"\u0000\u5277\u0000\u5289\u0000\u529B\u0000\u52A3\u0000\u52B3\u0000\u52C7\u0000\u52C9\u0000\u52D2\u0000\u52DE\u0000"d~ +"\u52E4\u0000\u52F5\u0000\u52FA\u0000\u5305\u0000\u5306\u0000\u5317\u0000\u533F\u0000\u5349\u0000\u5351\u0000\u535A"d~ +"\u0000\u5373\u0000\u5375\u0000\u537D\u0000\u537F\u0000\u53C3\u0000\u53CA\u0000\u53DF\u0000\u53E5\u0000\u53EB\u0000"d~ +"\u53F1\u0000\u5406\u0000\u540F\u0000\u541D\u0000\u5438\u0000\u5442\u0000\u5448\u0000\u5468\u0000\u549E\u0000\u54A2"d~ +"\u0000\u54BD\u0000\u54F6\u0000\u5510\u0000\u5553\u0000\u5555\u0000\u5563\u0000\u5584\u0000\u5587\u0000\u5599\u0000"d~ +"\u559D\u0000\u55AB\u0000\u55B3\u0000\u55C0\u0000\u55C2\u0000\u55E2\u0000\u5606\u0000\u5651\u0000\u5668\u0000\u5674"d~ +"\u0000\u56F9\u0000\u5716\u0000\u5717\u0000\u578B\u0000\u57CE\u0000\u57F4\u0000\u580D\u0000\u5831\u0000\u5832\u0000"d~ +"\u5840\u0000\u585A\u0000\u585E\u0000\u58A8\u0000\u58AC\u0000\u58B3\u0000\u58D8\u0000\u58DF\u0000\u58EE\u0000\u58F2"d~ +"\u0000\u58F7\u0000\u5906\u0000\u591A\u0000\u5922\u0000\u5944\u0000\u5948\u0000\u5951\u0000\u5954\u0000\u5962\u0000"d~ +"\u5973\u0000\u59D8\u0000\u59EC\u0000\u5A1B\u0000\u5A27\u0000\u5A62\u0000\u5A66\u0000\u5AB5\u0000\u5B08\u0000\u5B28"d~ +"\u0000\u5B3E\u0000\u5B85\u0000\u5BC3\u0000\u5BD8\u0000\u5BE7\u0000\u5BEE\u0000\u5BF3\u0000\u5BFF\u0000\u5C06\u0000"d~ +"\u5C22\u0000\u5C3F\u0000\u5C60\u0000\u5C62\u0000\u5C64\u0000\u5C65\u0000\u5C6E\u0000\u5C8D\u0000\u5CC0\u0000\u5D19"d~ +"\u0000\u5D43\u0000\u5D50\u0000\u5D6B\u0000\u5D6E\u0000\u5D7C\u0000\u5DB2\u0000\u5DBA\u0000\u5DE1\u0000\u5DE2\u0000"d~ +"\u5DFD\u0000\u5E28\u0000\u5E3D\u0000\u5E69\u0000\u5E74\u0000\u5EA6\u0000\u5EB0\u0000\u5EB3\u0000\u5EB6\u0000\u5EC9"d~ +"\u0000\u5ECA\u0000\u5ED2\u0000\u5ED3\u0000\u5ED9\u0000\u5EEC\u0000\u5EFE\u0000\u5F04\u0000\u5F22\u0000\u5F53\u0000"d~ +"\u5F62\u0000\u5F69\u0000\u5F6B\u0000\u5F8B\u0000\u5F9A\u0000\u5FA9\u0000\u5FAD\u0000\u5FCD\u0000\u5FD7\u0000\u5FF5"d~ +"\u0000\u5FF9\u0000\u6012\u0000\u601C\u0000\u6075\u0000\u6081\u0000\u6094\u0000\u60C7\u0000\u60D8\u0000\u60E1\u0000"d~ +"\u6108\u0000\u6144\u0000\u6148\u0000\u614C\u0000\u614E\u0000\u6160\u0000\u6168\u0000\u617A\u0000\u618E\u0000\u6190"d~ +"\u0000\u61A4\u0000\u61AF\u0000\u61B2\u0000\u61DE\u0000\u61F2\u0000\u61F6\u0000\u6200\u0000\u6210\u0000\u621B\u0000"d~ +"\u622E\u0000\u6234\u0000\u625D\u0000\u62B1\u0000\u62C9\u0000\u62CF\u0000\u62D3\u0000\u62D4\u0000\u62FC\u0000\u62FE"d~ +"\u0000\u633D\u0000\u6350\u0000\u6368\u0000\u637B\u0000\u6383\u0000\u63A0\u0000\u63A9\u0000\u63C4\u0000\u63C5\u0000"d~ +"\u63E4\u0000\u641C\u0000\u6422\u0000\u6452\u0000\u6469\u0000\u6477\u0000\u647E\u0000\u649A\u0000\u649D\u0000\u64C4"d~ +"\u0000\u654F\u0000\u6556\u0000\u656C\u0000\u6578\u0000\u6599\u0000\u65C5\u0000\u65E2\u0000\u65E3\u0000\u6613\u0000"d~ +"\u6649\u0000\u6674\u0000\u6688\u0000\u6691\u0000\u669C\u0000\u66B4\u0000\u66C6\u0000\u66F4\u0000\u66F8\u0000\u6700"d~ +"\u0000\u6717\u0000\u671B\u0000\u6721\u0000\u674E\u0000\u6753\u0000\u6756\u0000\u675E\u0000\u677B\u0000\u6785\u0000"d~ +"\u6797\u0000\u67F3\u0000\u67FA\u0000\u6817\u0000\u681F\u0000\u6852\u0000\u6881\u0000\u6885\u0000\u688E\u0000\u68A8"d~ +"\u0000\u6914\u0000\u6942\u0000\u69A3\u0000\u69EA\u0000\u6A02\u0000\u6A13\u0000\u6AA8\u0000\u6AD3\u0000\u6ADB\u0000"d~ +"\u6B04\u0000\u6B21\u0000\u6B54\u0000\u6B72\u0000\u6B77\u0000\u6B79\u0000\u6B9F\u0000\u6BAE\u0000\u6BBA\u0000\u6BBB"d~ +"\u0000\u6C4E\u0000\u6C67\u0000\u6C88\u0000\u6CBF\u0000\u6CCC\u0000\u6CCD\u0000\u6CE5\u0000\u6D16\u0000\u6D1B\u0000"d~ +"\u6D1E\u0000\u6D34\u0000\u6D3E\u0000\u6D41\u0000\u6D69\u0000\u6D6A\u0000\u6D77\u0000\u6D78\u0000\u6D85\u0000\u6DCB"d~ +"\u0000\u6DDA\u0000\u6DEA\u0000\u6DF9\u0000\u6E1A\u0000\u6E2F\u0000\u6E6E\u0000\u6E9C\u0000\u6EBA\u0000\u6EC7\u0000"d~ +"\u6ECB\u0000\u6ED1\u0000\u6EDB\u0000\u6F0F\u0000\u6F22\u0000\u6F23\u0000\u6F6E\u0000\u6FC6\u0000\u6FEB\u0000\u6FFE"d~ +"\u0000\u701B\u0000\u701E\u0000\u7039\u0000\u704A\u0000\u7070\u0000\u7077\u0000\u707D\u0000\u7099\u0000\u70AD\u0000"d~ +"\u70C8\u0000\u70D9\u0000\u7145\u0000\u7149\u0000\u716E\u0000\u719C\u0000\u71CE\u0000\u71D0\u0000\u7210\u0000\u721B"d~ +"\u0000\u7228\u0000\u722B\u0000\u7235\u0000\u7250\u0000\u7262\u0000\u7280\u0000\u7295\u0000\u72AF\u0000\u72C0\u0000"d~ +"\u72FC\u0000\u732A\u0000\u7375\u0000\u737A\u0000\u7387\u0000\u738B\u0000\u73A5\u0000\u73B2\u0000\u73DE\u0000\u7406"d~ +"\u0000\u7409\u0000\u7422\u0000\u7447\u0000\u745C\u0000\u7469\u0000\u7471\u0000\u7485\u0000\u7489\u0000\u7498\u0000"d~ +"\u74CA\u0000\u7506\u0000\u7524\u0000\u753B\u0000\u753E\u0000\u7559\u0000\u7565\u0000\u7570\u0000\u75E2\u0000\u7610"d~ +"\u0000\u761D\u0000\u761F\u0000\u7642\u0000\u7669\u0000\u76CA\u0000\u76DB\u0000\u76E7\u0000\u76F4\u0000\u7701\u0000"d~ +"\u771E\u0000\u771F\u0000\u7740\u0000\u774A\u0000\u778B\u0000\u77A7\u0000\u784E\u0000\u786B\u0000\u788C\u0000\u7891"d~ +"\u0000\u78CA\u0000\u78CC\u0000\u78FB\u0000\u792A\u0000\u793C\u0000\u793E\u0000\u7948\u0000\u7949\u0000\u7950\u0000"d~ +"\u7956\u0000\u795D\u0000\u795E\u0000\u7965\u0000\u797F\u0000\u798D\u0000\u798E\u0000\u798F\u0000\u79AE\u0000\u79CA"d~ +"\u0000\u79EB\u0000\u7A1C\u0000\u7A40\u0000\u7A4A\u0000\u7A4F\u0000\u7A81\u0000\u7AB1\u0000\u7ACB\u0000\u7AEE\u0000"d~ +"\u7B20\u0000\u7BC0\u0000\u7BC6\u0000\u7BC9\u0000\u7C3E\u0000\u7C60\u0000\u7C7B\u0000\u7C92\u0000\u7CBE\u0000\u7CD2"d~ +"\u0000\u7CD6\u0000\u7CE3\u0000\u7CE7\u0000\u7CE8\u0000\u7D00\u0000\u7D10\u0000\u7D22\u0000\u7D2F\u0000\u7D5B\u0000"d~ +"\u7D63\u0000\u7DA0\u0000\u7DBE\u0000\u7DC7\u0000\u7DF4\u0000\u7E02\u0000\u7E09\u0000\u7E37\u0000\u7E41\u0000\u7E45"d~ +"\u0000\u7F3E\u0000\u7F72\u0000\u7F79\u0000\u7F7A\u0000\u7F85\u0000\u7F95\u0000\u7F9A\u0000\u7FBD\u0000\u7FFA\u0000"d~ +"\u8001\u0000\u8005\u0000\u8046\u0000\u8060\u0000\u806F\u0000\u8070\u0000\u807E\u0000\u808B\u0000\u80AD\u0000\u80B2"d~ +"\u0000\u8103\u0000\u813E\u0000\u81D8\u0000\u81E8\u0000\u81ED\u0000\u8201\u0000\u8204\u0000\u8218\u0000\u826F\u0000"d~ +"\u8279\u0000\u828B\u0000\u8291\u0000\u829D\u0000\u82B1\u0000\u82B3\u0000\u82BD\u0000\u82E5\u0000\u82E6\u0000\u831D"d~ +"\u0000\u8323\u0000\u8336\u0000\u8352\u0000\u8353\u0000\u8363\u0000\u83AD\u0000\u83BD\u0000\u83C9\u0000\u83CA\u0000"d~ +"\u83CC\u0000\u83DC\u0000\u83E7\u0000\u83EF\u0000\u83F1\u0000\u843D\u0000\u8449\u0000\u8457\u0000\u84EE\u0000\u84F1"d~ +"\u0000\u84F3\u0000\u84FC\u0000\u8516\u0000\u8564\u0000\u85CD\u0000\u85FA\u0000\u8606\u0000\u8612\u0000\u862D\u0000"d~ +"\u863F\u0000\u8650\u0000\u865C\u0000\u8667\u0000\u8669\u0000\u8688\u0000\u86A9\u0000\u86E2\u0000\u870E\u0000\u8728"d~ +"\u0000\u876B\u0000\u8779\u0000\u8786\u0000\u87BA\u0000\u87E1\u0000\u8801\u0000\u881F\u0000\u884C\u0000\u8860\u0000"d~ +"\u8863\u0000\u88C2\u0000\u88CF\u0000\u88D7\u0000\u88DE\u0000\u88E1\u0000\u88F8\u0000\u88FA\u0000\u8910\u0000\u8941"d~ +"\u0000\u8964\u0000\u8986\u0000\u898B\u0000\u8996\u0000\u8AA0\u0000\u8AAA\u0000\u8ABF\u0000\u8ACB\u0000\u8AD2\u0000"d~ +"\u8AD6\u0000\u8AED\u0000\u8AF8\u0000\u8AFE\u0000\u8B01\u0000\u8B39\u0000\u8B58\u0000\u8B80\u0000\u8B8A\u0000\u8C48"d~ +"\u0000\u8C55\u0000\u8CAB\u0000\u8CC1\u0000\u8CC2\u0000\u8CC8\u0000\u8CD3\u0000\u8D08\u0000\u8D1B\u0000\u8D77\u0000"d~ +"\u8DBC\u0000\u8DCB\u0000\u8DEF\u0000\u8DF0\u0000\u8ECA\u0000\u8ED4\u0000\u8F26\u0000\u8F2A\u0000\u8F38\u0000\u8F3B"d~ +"\u0000\u8F62\u0000\u8F9E\u0000\u8FB0\u0000\u8FB6\u0000\u9023\u0000\u9038\u0000\u9072\u0000\u907C\u0000\u908F\u0000"d~ +"\u9094\u0000\u90CE\u0000\u90DE\u0000\u90F1\u0000\u90FD\u0000\u9111\u0000\u911B\u0000\u916A\u0000\u9199\u0000\u91B4"d~ +"\u0000\u91CC\u0000\u91CF\u0000\u91D1\u0000\u9234\u0000\u9238\u0000\u9276\u0000\u927C\u0000\u92D7\u0000\u92D8\u0000"d~ +"\u9304\u0000\u934A\u0000\u93F9\u0000\u9415\u0000\u958B\u0000\u95AD\u0000\u95B7\u0000\u962E\u0000\u964B\u0000\u964D"d~ +"\u0000\u9675\u0000\u9678\u0000\u967C\u0000\u9686\u0000\u96A3\u0000\u96B7\u0000\u96B8\u0000\u96C3\u0000\u96E2\u0000"d~ +"\u96E3\u0000\u96F6\u0000\u96F7\u0000\u9723\u0000\u9732\u0000\u9748\u0000\u9756\u0000\u97DB\u0000\u97E0\u0000\u97FF"d~ +"\u0000\u980B\u0000\u9818\u0000\u9829\u0000\u983B\u0000\u985E\u0000\u98E2\u0000\u98EF\u0000\u98FC\u0000\u9928\u0000"d~ +"\u9929\u0000\u99A7\u0000\u99C2\u0000\u99F1\u0000\u99FE\u0000\u9A6A\u0000\u9B12\u0000\u9B6F\u0000\u9C40\u0000\u9C57"d~ +"\u0000\u9CFD\u0000\u9D67\u0000\u9DB4\u0000\u9DFA\u0000\u9E1E\u0000\u9E7F\u0000\u9E97\u0000\u9E9F\u0000\u9EBB\u0000"d~ +"\u9ECE\u0000\u9EF9\u0000\u9EFE\u0000\u9F05\u0000\u9F0F\u0000\u9F16\u0000\u9F3B\u0000\u9F43\u0000\u9F8D\u0000\u9F8E"d~ +"\u0000\u9F9C\u0000\U000105D2\u0307\u0000\U000105DA\u0307\u0000\U00011099\U000110BA\u0000\U0001109B\U000110BA\u0000"d~ +"\U000110A5\U000110BA\u0000\U00011131\U00011127\u0000\U00011132\U00011127\u0000\U00011347\U0001133E\u0000\U00011347"d~ +"\U00011357\u0000\U00011382\U000113C9\u0000\U00011384\U000113BB\u0000\U0001138B\U000113C2\u0000\U00011390\U000113C9"d~ +"\u0000\U000113C2\U000113B8\u0000\U000113C2\U000113C2\u0000\U000113C2\U000113C9\u0000\U000114B9\U000114B0\u0000"d~ +"\U000114B9\U000114BA\u0000\U000114B9\U000114BD\u0000\U000115B8\U000115AF\u0000\U000115B9\U000115AF\u0000\U00011935"d~ +"\U00011930\u0000\U0001611E\U0001611E\u0000\U0001611E\U0001611E\U0001611F\u0000\U0001611E\U0001611E\U00016120\u0000"d~ +"\U0001611E\U0001611F\u0000\U0001611E\U00016120\u0000\U0001611E\U00016129\u0000\U0001611E\U00016129\U0001611F\u0000"d~ +"\U00016129\U0001611F\u0000\U00016D63\U00016D67\u0000\U00016D63\U00016D67\U00016D67\u0000\U00016D67\U00016D67\u0000"d~ +"\U0001D157\U0001D165\u0000\U0001D158\U0001D165\u0000\U0001D158\U0001D165\U0001D16E\u0000\U0001D158\U0001D165\U0001D16F"d~ +"\u0000\U0001D158\U0001D165\U0001D170\u0000\U0001D158\U0001D165\U0001D171\u0000\U0001D158\U0001D165\U0001D172\u0000"d~ +"\U0001D1B9\U0001D165\u0000\U0001D1B9\U0001D165\U0001D16E\u0000\U0001D1B9\U0001D165\U0001D16F\u0000\U0001D1BA\U0001D165"d~ +"\u0000\U0001D1BA\U0001D165\U0001D16E\u0000\U0001D1BA\U0001D165\U0001D16F\u0000\U00020122\u0000\U0002051C\u0000"d~ +"\U00020525\u0000\U0002054B\u0000\U0002063A\u0000\U00020804\u0000\U000208DE\u0000\U00020A2C\u0000\U00020B63\u0000"d~ +"\U000214E4\u0000\U000216A8\u0000\U000216EA\u0000\U000219C8\u0000\U00021B18\u0000\U00021D0B\u0000\U00021DE4\u0000"d~ +"\U00021DE6\u0000\U00022183\u0000\U0002219F\u0000\U00022331\u0000\U000226D4\u0000\U00022844\u0000\U0002284A\u0000"d~ +"\U00022B0C\u0000\U00022BF1\u0000\U0002300A\u0000\U000232B8\u0000\U0002335F\u0000\U00023393\u0000\U0002339C\u0000"d~ +"\U000233C3\u0000\U000233D5\u0000\U0002346D\u0000\U000236A3\u0000\U000238A7\u0000\U00023A8D\u0000\U00023AFA\u0000"d~ +"\U00023CBC\u0000\U00023D1E\u0000\U00023ED1\u0000\U00023F5E\u0000\U00023F8E\u0000\U00024263\u0000\U000242EE\u0000"d~ +"\U000243AB\u0000\U00024608\u0000\U00024735\u0000\U00024814\u0000\U00024C36\u0000\U00024C92\u0000\U00024FA1\u0000"d~ +"\U00024FB8\u0000\U00025044\u0000\U000250F2\u0000\U000250F3\u0000\U00025119\u0000\U00025133\u0000\U00025249\u0000"d~ +"\U0002541D\u0000\U00025626\u0000\U0002569A\u0000\U000256C5\u0000\U0002597C\u0000\U00025AA7\u0000\U00025BAB\u0000"d~ +"\U00025C80\u0000\U00025CD0\u0000\U00025F86\u0000\U000261DA\u0000\U00026228\u0000\U00026247\u0000\U000262D9\u0000"d~ +"\U0002633E\u0000\U000264DA\u0000\U00026523\u0000\U000265A8\u0000\U000267A7\u0000\U000267B5\u0000\U00026B3C\u0000"d~ +"\U00026C36\u0000\U00026CD5\u0000\U00026D6B\u0000\U00026F2C\u0000\U00026FB1\u0000\U000270D2\u0000\U000273CA\u0000"d~ +"\U00027667\u0000\U000278AE\u0000\U00027966\u0000\U00027CA8\u0000\U00027ED3\u0000\U00027F2F\u0000\U000285D2\u0000"d~ +"\U000285ED\u0000\U0002872E\u0000\U00028BFA\u0000\U00028D77\u0000\U00029145\u0000\U000291DF\u0000\U0002921A\u0000"d~ +"\U0002940A\u0000\U00029496\u0000\U000295B6\u0000\U00029B30\u0000\U0002A0CE\u0000\U0002A105\u0000\U0002A20E\u0000"d~ +"\U0002A291\u0000\U0002A392\u0000\U0002A600\u0000"d; +return t[]; +} +dstring decompCompatTable() nothrow @nogc pure @safe { +static immutable dchar[10489] t = +"\u0000\u0020\u0000\u0020\u0301\u0000\u0020\u0303\u0000\u0020\u0304\u0000\u0020\u0305\u0000\u0020\u0306\u0000\u0020"d~ +"\u0307\u0000\u0020\u0308\u0000\u0020\u0308\u0300\u0000\u0020\u0308\u0301\u0000\u0020\u0308\u0342\u0000\u0020\u030A"d~ +"\u0000\u0020\u030B\u0000\u0020\u0313\u0000\u0020\u0313\u0300\u0000\u0020\u0313\u0301\u0000\u0020\u0313\u0342\u0000"d~ +"\u0020\u0314\u0000\u0020\u0314\u0300\u0000\u0020\u0314\u0301\u0000\u0020\u0314\u0342\u0000\u0020\u0327\u0000\u0020"d~ +"\u0328\u0000\u0020\u0333\u0000\u0020\u0342\u0000\u0020\u0345\u0000\u0020\u064B\u0000\u0020\u064C\u0000\u0020\u064C"d~ +"\u0651\u0000\u0020\u064D\u0000\u0020\u064D\u0651\u0000\u0020\u064E\u0000\u0020\u064E\u0651\u0000\u0020\u064F\u0000"d~ +"\u0020\u064F\u0651\u0000\u0020\u0650\u0000\u0020\u0650\u0651\u0000\u0020\u0651\u0000\u0020\u0651\u0670\u0000\u0020"d~ +"\u0652\u0000\u0020\u3099\u0000\u0020\u309A\u0000\u0021\u0000\u0021\u0021\u0000\u0021\u003F\u0000\u0022\u0000\u0023"d~ +"\u0000\u0024\u0000\u0025\u0000\u0026\u0000\u0027\u0000\u0028\u0000\u0028\u0031\u0029\u0000\u0028\u0031\u0030\u0029"d~ +"\u0000\u0028\u0031\u0031\u0029\u0000\u0028\u0031\u0032\u0029\u0000\u0028\u0031\u0033\u0029\u0000\u0028\u0031\u0034"d~ +"\u0029\u0000\u0028\u0031\u0035\u0029\u0000\u0028\u0031\u0036\u0029\u0000\u0028\u0031\u0037\u0029\u0000\u0028\u0031"d~ +"\u0038\u0029\u0000\u0028\u0031\u0039\u0029\u0000\u0028\u0032\u0029\u0000\u0028\u0032\u0030\u0029\u0000\u0028\u0033"d~ +"\u0029\u0000\u0028\u0034\u0029\u0000\u0028\u0035\u0029\u0000\u0028\u0036\u0029\u0000\u0028\u0037\u0029\u0000\u0028"d~ +"\u0038\u0029\u0000\u0028\u0039\u0029\u0000\u0028\u0041\u0029\u0000\u0028\u0042\u0029\u0000\u0028\u0043\u0029\u0000"d~ +"\u0028\u0044\u0029\u0000\u0028\u0045\u0029\u0000\u0028\u0046\u0029\u0000\u0028\u0047\u0029\u0000\u0028\u0048\u0029"d~ +"\u0000\u0028\u0049\u0029\u0000\u0028\u004A\u0029\u0000\u0028\u004B\u0029\u0000\u0028\u004C\u0029\u0000\u0028\u004D"d~ +"\u0029\u0000\u0028\u004E\u0029\u0000\u0028\u004F\u0029\u0000\u0028\u0050\u0029\u0000\u0028\u0051\u0029\u0000\u0028"d~ +"\u0052\u0029\u0000\u0028\u0053\u0029\u0000\u0028\u0054\u0029\u0000\u0028\u0055\u0029\u0000\u0028\u0056\u0029\u0000"d~ +"\u0028\u0057\u0029\u0000\u0028\u0058\u0029\u0000\u0028\u0059\u0029\u0000\u0028\u005A\u0029\u0000\u0028\u0061\u0029"d~ +"\u0000\u0028\u0062\u0029\u0000\u0028\u0063\u0029\u0000\u0028\u0064\u0029\u0000\u0028\u0065\u0029\u0000\u0028\u0066"d~ +"\u0029\u0000\u0028\u0067\u0029\u0000\u0028\u0068\u0029\u0000\u0028\u0069\u0029\u0000\u0028\u006A\u0029\u0000\u0028"d~ +"\u006B\u0029\u0000\u0028\u006C\u0029\u0000\u0028\u006D\u0029\u0000\u0028\u006E\u0029\u0000\u0028\u006F\u0029\u0000"d~ +"\u0028\u0070\u0029\u0000\u0028\u0071\u0029\u0000\u0028\u0072\u0029\u0000\u0028\u0073\u0029\u0000\u0028\u0074\u0029"d~ +"\u0000\u0028\u0075\u0029\u0000\u0028\u0076\u0029\u0000\u0028\u0077\u0029\u0000\u0028\u0078\u0029\u0000\u0028\u0079"d~ +"\u0029\u0000\u0028\u007A\u0029\u0000\u0028\u1100\u0029\u0000\u0028\u1100\u1161\u0029\u0000\u0028\u1102\u0029\u0000"d~ +"\u0028\u1102\u1161\u0029\u0000\u0028\u1103\u0029\u0000\u0028\u1103\u1161\u0029\u0000\u0028\u1105\u0029\u0000\u0028"d~ +"\u1105\u1161\u0029\u0000\u0028\u1106\u0029\u0000\u0028\u1106\u1161\u0029\u0000\u0028\u1107\u0029\u0000\u0028\u1107"d~ +"\u1161\u0029\u0000\u0028\u1109\u0029\u0000\u0028\u1109\u1161\u0029\u0000\u0028\u110B\u0029\u0000\u0028\u110B\u1161"d~ +"\u0029\u0000\u0028\u110B\u1169\u110C\u1165\u11AB\u0029\u0000\u0028\u110B\u1169\u1112\u116E\u0029\u0000\u0028\u110C"d~ +"\u0029\u0000\u0028\u110C\u1161\u0029\u0000\u0028\u110C\u116E\u0029\u0000\u0028\u110E\u0029\u0000\u0028\u110E\u1161"d~ +"\u0029\u0000\u0028\u110F\u0029\u0000\u0028\u110F\u1161\u0029\u0000\u0028\u1110\u0029\u0000\u0028\u1110\u1161\u0029"d~ +"\u0000\u0028\u1111\u0029\u0000\u0028\u1111\u1161\u0029\u0000\u0028\u1112\u0029\u0000\u0028\u1112\u1161\u0029\u0000"d~ +"\u0028\u4E00\u0029\u0000\u0028\u4E03\u0029\u0000\u0028\u4E09\u0029\u0000\u0028\u4E5D\u0029\u0000\u0028\u4E8C\u0029"d~ +"\u0000\u0028\u4E94\u0029\u0000\u0028\u4EE3\u0029\u0000\u0028\u4F01\u0029\u0000\u0028\u4F11\u0029\u0000\u0028\u516B"d~ +"\u0029\u0000\u0028\u516D\u0029\u0000\u0028\u52B4\u0029\u0000\u0028\u5341\u0029\u0000\u0028\u5354\u0029\u0000\u0028"d~ +"\u540D\u0029\u0000\u0028\u547C\u0029\u0000\u0028\u56DB\u0029\u0000\u0028\u571F\u0029\u0000\u0028\u5B66\u0029\u0000"d~ +"\u0028\u65E5\u0029\u0000\u0028\u6708\u0029\u0000\u0028\u6709\u0029\u0000\u0028\u6728\u0029\u0000\u0028\u682A\u0029"d~ +"\u0000\u0028\u6C34\u0029\u0000\u0028\u706B\u0029\u0000\u0028\u7279\u0029\u0000\u0028\u76E3\u0029\u0000\u0028\u793E"d~ +"\u0029\u0000\u0028\u795D\u0029\u0000\u0028\u796D\u0029\u0000\u0028\u81EA\u0029\u0000\u0028\u81F3\u0029\u0000\u0028"d~ +"\u8CA1\u0029\u0000\u0028\u8CC7\u0029\u0000\u0028\u91D1\u0029\u0000\u0029\u0000\u002A\u0000\u002B\u0000\u002C\u0000"d~ +"\u002D\u0000\u002E\u0000\u002E\u002E\u0000\u002E\u002E\u002E\u0000\u002F\u0000\u0030\u0000\u0030\u002C\u0000\u0030"d~ +"\u002E\u0000\u0030\u2044\u0033\u0000\u0030\u70B9\u0000\u0031\u0000\u0031\u002C\u0000\u0031\u002E\u0000\u0031\u0030"d~ +"\u0000\u0031\u0030\u002E\u0000\u0031\u0030\u65E5\u0000\u0031\u0030\u6708\u0000\u0031\u0030\u70B9\u0000\u0031\u0031"d~ +"\u0000\u0031\u0031\u002E\u0000\u0031\u0031\u65E5\u0000\u0031\u0031\u6708\u0000\u0031\u0031\u70B9\u0000\u0031\u0032"d~ +"\u0000\u0031\u0032\u002E\u0000\u0031\u0032\u65E5\u0000\u0031\u0032\u6708\u0000\u0031\u0032\u70B9\u0000\u0031\u0033"d~ +"\u0000\u0031\u0033\u002E\u0000\u0031\u0033\u65E5\u0000\u0031\u0033\u70B9\u0000\u0031\u0034\u0000\u0031\u0034\u002E"d~ +"\u0000\u0031\u0034\u65E5\u0000\u0031\u0034\u70B9\u0000\u0031\u0035\u0000\u0031\u0035\u002E\u0000\u0031\u0035\u65E5"d~ +"\u0000\u0031\u0035\u70B9\u0000\u0031\u0036\u0000\u0031\u0036\u002E\u0000\u0031\u0036\u65E5\u0000\u0031\u0036\u70B9"d~ +"\u0000\u0031\u0037\u0000\u0031\u0037\u002E\u0000\u0031\u0037\u65E5\u0000\u0031\u0037\u70B9\u0000\u0031\u0038\u0000"d~ +"\u0031\u0038\u002E\u0000\u0031\u0038\u65E5\u0000\u0031\u0038\u70B9\u0000\u0031\u0039\u0000\u0031\u0039\u002E\u0000"d~ +"\u0031\u0039\u65E5\u0000\u0031\u0039\u70B9\u0000\u0031\u2044\u0000\u0031\u2044\u0031\u0030\u0000\u0031\u2044\u0032"d~ +"\u0000\u0031\u2044\u0033\u0000\u0031\u2044\u0034\u0000\u0031\u2044\u0035\u0000\u0031\u2044\u0036\u0000\u0031\u2044"d~ +"\u0037\u0000\u0031\u2044\u0038\u0000\u0031\u2044\u0039\u0000\u0031\u65E5\u0000\u0031\u6708\u0000\u0031\u70B9\u0000"d~ +"\u0032\u0000\u0032\u002C\u0000\u0032\u002E\u0000\u0032\u0030\u0000\u0032\u0030\u002E\u0000\u0032\u0030\u65E5\u0000"d~ +"\u0032\u0030\u70B9\u0000\u0032\u0031\u0000\u0032\u0031\u65E5\u0000\u0032\u0031\u70B9\u0000\u0032\u0032\u0000\u0032"d~ +"\u0032\u65E5\u0000\u0032\u0032\u70B9\u0000\u0032\u0033\u0000\u0032\u0033\u65E5\u0000\u0032\u0033\u70B9\u0000\u0032"d~ +"\u0034\u0000\u0032\u0034\u65E5\u0000\u0032\u0034\u70B9\u0000\u0032\u0035\u0000\u0032\u0035\u65E5\u0000\u0032\u0036"d~ +"\u0000\u0032\u0036\u65E5\u0000\u0032\u0037\u0000\u0032\u0037\u65E5\u0000\u0032\u0038\u0000\u0032\u0038\u65E5\u0000"d~ +"\u0032\u0039\u0000\u0032\u0039\u65E5\u0000\u0032\u2044\u0033\u0000\u0032\u2044\u0035\u0000\u0032\u65E5\u0000\u0032"d~ +"\u6708\u0000\u0032\u70B9\u0000\u0033\u0000\u0033\u002C\u0000\u0033\u002E\u0000\u0033\u0030\u0000\u0033\u0030\u65E5"d~ +"\u0000\u0033\u0031\u0000\u0033\u0031\u65E5\u0000\u0033\u0032\u0000\u0033\u0033\u0000\u0033\u0034\u0000\u0033\u0035"d~ +"\u0000\u0033\u0036\u0000\u0033\u0037\u0000\u0033\u0038\u0000\u0033\u0039\u0000\u0033\u2044\u0034\u0000\u0033\u2044"d~ +"\u0035\u0000\u0033\u2044\u0038\u0000\u0033\u65E5\u0000\u0033\u6708\u0000\u0033\u70B9\u0000\u0034\u0000\u0034\u002C"d~ +"\u0000\u0034\u002E\u0000\u0034\u0030\u0000\u0034\u0031\u0000\u0034\u0032\u0000\u0034\u0033\u0000\u0034\u0034\u0000"d~ +"\u0034\u0035\u0000\u0034\u0036\u0000\u0034\u0037\u0000\u0034\u0038\u0000\u0034\u0039\u0000\u0034\u2044\u0035\u0000"d~ +"\u0034\u65E5\u0000\u0034\u6708\u0000\u0034\u70B9\u0000\u0035\u0000\u0035\u002C\u0000\u0035\u002E\u0000\u0035\u0030"d~ +"\u0000\u0035\u2044\u0036\u0000\u0035\u2044\u0038\u0000\u0035\u65E5\u0000\u0035\u6708\u0000\u0035\u70B9\u0000\u0036"d~ +"\u0000\u0036\u002C\u0000\u0036\u002E\u0000\u0036\u65E5\u0000\u0036\u6708\u0000\u0036\u70B9\u0000\u0037\u0000\u0037"d~ +"\u002C\u0000\u0037\u002E\u0000\u0037\u2044\u0038\u0000\u0037\u65E5\u0000\u0037\u6708\u0000\u0037\u70B9\u0000\u0038"d~ +"\u0000\u0038\u002C\u0000\u0038\u002E\u0000\u0038\u65E5\u0000\u0038\u6708\u0000\u0038\u70B9\u0000\u0039\u0000\u0039"d~ +"\u002C\u0000\u0039\u002E\u0000\u0039\u65E5\u0000\u0039\u6708\u0000\u0039\u70B9\u0000\u003A\u0000\u003A\u003A\u003D"d~ +"\u0000\u003B\u0000\u003C\u0000\u003C\u0338\u0000\u003D\u0000\u003D\u003D\u0000\u003D\u003D\u003D\u0000\u003D\u0338"d~ +"\u0000\u003E\u0000\u003E\u0338\u0000\u003F\u0000\u003F\u0021\u0000\u003F\u003F\u0000\u0040\u0000\u0041\u0000\u0041"d~ +"\u0055\u0000\u0041\u0300\u0000\u0041\u0301\u0000\u0041\u0302\u0000\u0041\u0302\u0300\u0000\u0041\u0302\u0301\u0000"d~ +"\u0041\u0302\u0303\u0000\u0041\u0302\u0309\u0000\u0041\u0303\u0000\u0041\u0304\u0000\u0041\u0306\u0000\u0041\u0306"d~ +"\u0300\u0000\u0041\u0306\u0301\u0000\u0041\u0306\u0303\u0000\u0041\u0306\u0309\u0000\u0041\u0307\u0000\u0041\u0307"d~ +"\u0304\u0000\u0041\u0308\u0000\u0041\u0308\u0304\u0000\u0041\u0309\u0000\u0041\u030A\u0000\u0041\u030A\u0301\u0000"d~ +"\u0041\u030C\u0000\u0041\u030F\u0000\u0041\u0311\u0000\u0041\u0323\u0000\u0041\u0323\u0302\u0000\u0041\u0323\u0306"d~ +"\u0000\u0041\u0325\u0000\u0041\u0328\u0000\u0041\u2215\u006D\u0000\u0042\u0000\u0042\u0071\u0000\u0042\u0307\u0000"d~ +"\u0042\u0323\u0000\u0042\u0331\u0000\u0043\u0000\u0043\u0044\u0000\u0043\u006F\u002E\u0000\u0043\u0301\u0000\u0043"d~ +"\u0302\u0000\u0043\u0307\u0000\u0043\u030C\u0000\u0043\u0327\u0000\u0043\u0327\u0301\u0000\u0043\u2215\u006B\u0067"d~ +"\u0000\u0044\u0000\u0044\u004A\u0000\u0044\u005A\u0000\u0044\u005A\u030C\u0000\u0044\u007A\u0000\u0044\u007A\u030C"d~ +"\u0000\u0044\u0307\u0000\u0044\u030C\u0000\u0044\u0323\u0000\u0044\u0327\u0000\u0044\u032D\u0000\u0044\u0331\u0000"d~ +"\u0045\u0000\u0045\u0300\u0000\u0045\u0301\u0000\u0045\u0302\u0000\u0045\u0302\u0300\u0000\u0045\u0302\u0301\u0000"d~ +"\u0045\u0302\u0303\u0000\u0045\u0302\u0309\u0000\u0045\u0303\u0000\u0045\u0304\u0000\u0045\u0304\u0300\u0000\u0045"d~ +"\u0304\u0301\u0000\u0045\u0306\u0000\u0045\u0307\u0000\u0045\u0308\u0000\u0045\u0309\u0000\u0045\u030C\u0000\u0045"d~ +"\u030F\u0000\u0045\u0311\u0000\u0045\u0323\u0000\u0045\u0323\u0302\u0000\u0045\u0327\u0000\u0045\u0327\u0306\u0000"d~ +"\u0045\u0328\u0000\u0045\u032D\u0000\u0045\u0330\u0000\u0046\u0000\u0046\u0041\u0058\u0000\u0046\u0307\u0000\u0047"d~ +"\u0000\u0047\u0042\u0000\u0047\u0048\u007A\u0000\u0047\u0050\u0061\u0000\u0047\u0079\u0000\u0047\u0301\u0000\u0047"d~ +"\u0302\u0000\u0047\u0304\u0000\u0047\u0306\u0000\u0047\u0307\u0000\u0047\u030C\u0000\u0047\u0327\u0000\u0048\u0000"d~ +"\u0048\u0050\u0000\u0048\u0056\u0000\u0048\u0067\u0000\u0048\u007A\u0000\u0048\u0302\u0000\u0048\u0307\u0000\u0048"d~ +"\u0308\u0000\u0048\u030C\u0000\u0048\u0323\u0000\u0048\u0327\u0000\u0048\u032E\u0000\u0049\u0000\u0049\u0049\u0000"d~ +"\u0049\u0049\u0049\u0000\u0049\u004A\u0000\u0049\u0055\u0000\u0049\u0056\u0000\u0049\u0058\u0000\u0049\u0300\u0000"d~ +"\u0049\u0301\u0000\u0049\u0302\u0000\u0049\u0303\u0000\u0049\u0304\u0000\u0049\u0306\u0000\u0049\u0307\u0000\u0049"d~ +"\u0308\u0000\u0049\u0308\u0301\u0000\u0049\u0309\u0000\u0049\u030C\u0000\u0049\u030F\u0000\u0049\u0311\u0000\u0049"d~ +"\u0323\u0000\u0049\u0328\u0000\u0049\u0330\u0000\u004A\u0000\u004A\u0302\u0000\u004B\u0000\u004B\u0042\u0000\u004B"d~ +"\u004B\u0000\u004B\u004D\u0000\u004B\u0301\u0000\u004B\u030C\u0000\u004B\u0323\u0000\u004B\u0327\u0000\u004B\u0331"d~ +"\u0000\u004C\u0000\u004C\u004A\u0000\u004C\u0054\u0044\u0000\u004C\u006A\u0000\u004C\u00B7\u0000\u004C\u0301\u0000"d~ +"\u004C\u030C\u0000\u004C\u0323\u0000\u004C\u0323\u0304\u0000\u004C\u0327\u0000\u004C\u032D\u0000\u004C\u0331\u0000"d~ +"\u004D\u0000\u004D\u0042\u0000\u004D\u0043\u0000\u004D\u0044\u0000\u004D\u0048\u007A\u0000\u004D\u0050\u0061\u0000"d~ +"\u004D\u0052\u0000\u004D\u0056\u0000\u004D\u0057\u0000\u004D\u0301\u0000\u004D\u0307\u0000\u004D\u0323\u0000\u004D"d~ +"\u03A9\u0000\u004E\u0000\u004E\u004A\u0000\u004E\u006A\u0000\u004E\u006F\u0000\u004E\u0300\u0000\u004E\u0301\u0000"d~ +"\u004E\u0303\u0000\u004E\u0307\u0000\u004E\u030C\u0000\u004E\u0323\u0000\u004E\u0327\u0000\u004E\u032D\u0000\u004E"d~ +"\u0331\u0000\u004F\u0000\u004F\u0300\u0000\u004F\u0301\u0000\u004F\u0302\u0000\u004F\u0302\u0300\u0000\u004F\u0302"d~ +"\u0301\u0000\u004F\u0302\u0303\u0000\u004F\u0302\u0309\u0000\u004F\u0303\u0000\u004F\u0303\u0301\u0000\u004F\u0303"d~ +"\u0304\u0000\u004F\u0303\u0308\u0000\u004F\u0304\u0000\u004F\u0304\u0300\u0000\u004F\u0304\u0301\u0000\u004F\u0306"d~ +"\u0000\u004F\u0307\u0000\u004F\u0307\u0304\u0000\u004F\u0308\u0000\u004F\u0308\u0304\u0000\u004F\u0309\u0000\u004F"d~ +"\u030B\u0000\u004F\u030C\u0000\u004F\u030F\u0000\u004F\u0311\u0000\u004F\u031B\u0000\u004F\u031B\u0300\u0000\u004F"d~ +"\u031B\u0301\u0000\u004F\u031B\u0303\u0000\u004F\u031B\u0309\u0000\u004F\u031B\u0323\u0000\u004F\u0323\u0000\u004F"d~ +"\u0323\u0302\u0000\u004F\u0328\u0000\u004F\u0328\u0304\u0000\u0050\u0000\u0050\u0048\u0000\u0050\u0050\u004D\u0000"d~ +"\u0050\u0050\u0056\u0000\u0050\u0052\u0000\u0050\u0054\u0045\u0000\u0050\u0061\u0000\u0050\u0301\u0000\u0050\u0307"d~ +"\u0000\u0051\u0000\u0052\u0000\u0052\u0073\u0000\u0052\u0301\u0000\u0052\u0307\u0000\u0052\u030C\u0000\u0052\u030F"d~ +"\u0000\u0052\u0311\u0000\u0052\u0323\u0000\u0052\u0323\u0304\u0000\u0052\u0327\u0000\u0052\u0331\u0000\u0053\u0000"d~ +"\u0053\u0044\u0000\u0053\u004D\u0000\u0053\u0053\u0000\u0053\u0076\u0000\u0053\u0301\u0000\u0053\u0301\u0307\u0000"d~ +"\u0053\u0302\u0000\u0053\u0307\u0000\u0053\u030C\u0000\u0053\u030C\u0307\u0000\u0053\u0323\u0000\u0053\u0323\u0307"d~ +"\u0000\u0053\u0326\u0000\u0053\u0327\u0000\u0054\u0000\u0054\u0045\u004C\u0000\u0054\u0048\u007A\u0000\u0054\u004D"d~ +"\u0000\u0054\u0307\u0000\u0054\u030C\u0000\u0054\u0323\u0000\u0054\u0326\u0000\u0054\u0327\u0000\u0054\u032D\u0000"d~ +"\u0054\u0331\u0000\u0055\u0000\u0055\u0300\u0000\u0055\u0301\u0000\u0055\u0302\u0000\u0055\u0303\u0000\u0055\u0303"d~ +"\u0301\u0000\u0055\u0304\u0000\u0055\u0304\u0308\u0000\u0055\u0306\u0000\u0055\u0308\u0000\u0055\u0308\u0300\u0000"d~ +"\u0055\u0308\u0301\u0000\u0055\u0308\u0304\u0000\u0055\u0308\u030C\u0000\u0055\u0309\u0000\u0055\u030A\u0000\u0055"d~ +"\u030B\u0000\u0055\u030C\u0000\u0055\u030F\u0000\u0055\u0311\u0000\u0055\u031B\u0000\u0055\u031B\u0300\u0000\u0055"d~ +"\u031B\u0301\u0000\u0055\u031B\u0303\u0000\u0055\u031B\u0309\u0000\u0055\u031B\u0323\u0000\u0055\u0323\u0000\u0055"d~ +"\u0324\u0000\u0055\u0328\u0000\u0055\u032D\u0000\u0055\u0330\u0000\u0056\u0000\u0056\u0049\u0000\u0056\u0049\u0049"d~ +"\u0000\u0056\u0049\u0049\u0049\u0000\u0056\u0303\u0000\u0056\u0323\u0000\u0056\u2215\u006D\u0000\u0057\u0000\u0057"d~ +"\u0043\u0000\u0057\u005A\u0000\u0057\u0062\u0000\u0057\u0300\u0000\u0057\u0301\u0000\u0057\u0302\u0000\u0057\u0307"d~ +"\u0000\u0057\u0308\u0000\u0057\u0323\u0000\u0058\u0000\u0058\u0049\u0000\u0058\u0049\u0049\u0000\u0058\u0307\u0000"d~ +"\u0058\u0308\u0000\u0059\u0000\u0059\u0300\u0000\u0059\u0301\u0000\u0059\u0302\u0000\u0059\u0303\u0000\u0059\u0304"d~ +"\u0000\u0059\u0307\u0000\u0059\u0308\u0000\u0059\u0309\u0000\u0059\u0323\u0000\u005A\u0000\u005A\u0301\u0000\u005A"d~ +"\u0302\u0000\u005A\u0307\u0000\u005A\u030C\u0000\u005A\u0323\u0000\u005A\u0331\u0000\u005B\u0000\u005C\u0000\u005D"d~ +"\u0000\u005E\u0000\u005F\u0000\u0060\u0000\u0061\u0000\u0061\u002E\u006D\u002E\u0000\u0061\u002F\u0063\u0000\u0061"d~ +"\u002F\u0073\u0000\u0061\u02BE\u0000\u0061\u0300\u0000\u0061\u0301\u0000\u0061\u0302\u0000\u0061\u0302\u0300\u0000"d~ +"\u0061\u0302\u0301\u0000\u0061\u0302\u0303\u0000\u0061\u0302\u0309\u0000\u0061\u0303\u0000\u0061\u0304\u0000\u0061"d~ +"\u0306\u0000\u0061\u0306\u0300\u0000\u0061\u0306\u0301\u0000\u0061\u0306\u0303\u0000\u0061\u0306\u0309\u0000\u0061"d~ +"\u0307\u0000\u0061\u0307\u0304\u0000\u0061\u0308\u0000\u0061\u0308\u0304\u0000\u0061\u0309\u0000\u0061\u030A\u0000"d~ +"\u0061\u030A\u0301\u0000\u0061\u030C\u0000\u0061\u030F\u0000\u0061\u0311\u0000\u0061\u0323\u0000\u0061\u0323\u0302"d~ +"\u0000\u0061\u0323\u0306\u0000\u0061\u0325\u0000\u0061\u0328\u0000\u0062\u0000\u0062\u0061\u0072\u0000\u0062\u0307"d~ +"\u0000\u0062\u0323\u0000\u0062\u0331\u0000\u0063\u0000\u0063\u002F\u006F\u0000\u0063\u002F\u0075\u0000\u0063\u0061"d~ +"\u006C\u0000\u0063\u0063\u0000\u0063\u0064\u0000\u0063\u006D\u0000\u0063\u006D\u0032\u0000\u0063\u006D\u0033\u0000"d~ +"\u0063\u0301\u0000\u0063\u0302\u0000\u0063\u0307\u0000\u0063\u030C\u0000\u0063\u0327\u0000\u0063\u0327\u0301\u0000"d~ +"\u0064\u0000\u0064\u0042\u0000\u0064\u0061\u0000\u0064\u006C\u0000\u0064\u006D\u0000\u0064\u006D\u0032\u0000\u0064"d~ +"\u006D\u0033\u0000\u0064\u007A\u0000\u0064\u007A\u030C\u0000\u0064\u0307\u0000\u0064\u030C\u0000\u0064\u0323\u0000"d~ +"\u0064\u0327\u0000\u0064\u032D\u0000\u0064\u0331\u0000\u0065\u0000\u0065\u0056\u0000\u0065\u0072\u0067\u0000\u0065"d~ +"\u0300\u0000\u0065\u0301\u0000\u0065\u0302\u0000\u0065\u0302\u0300\u0000\u0065\u0302\u0301\u0000\u0065\u0302\u0303"d~ +"\u0000\u0065\u0302\u0309\u0000\u0065\u0303\u0000\u0065\u0304\u0000\u0065\u0304\u0300\u0000\u0065\u0304\u0301\u0000"d~ +"\u0065\u0306\u0000\u0065\u0307\u0000\u0065\u0308\u0000\u0065\u0309\u0000\u0065\u030C\u0000\u0065\u030F\u0000\u0065"d~ +"\u0311\u0000\u0065\u0323\u0000\u0065\u0323\u0302\u0000\u0065\u0327\u0000\u0065\u0327\u0306\u0000\u0065\u0328\u0000"d~ +"\u0065\u032D\u0000\u0065\u0330\u0000\u0066\u0000\u0066\u0066\u0000\u0066\u0066\u0069\u0000\u0066\u0066\u006C\u0000"d~ +"\u0066\u0069\u0000\u0066\u006C\u0000\u0066\u006D\u0000\u0066\u0307\u0000\u0067\u0000\u0067\u0061\u006C\u0000\u0067"d~ +"\u0301\u0000\u0067\u0302\u0000\u0067\u0304\u0000\u0067\u0306\u0000\u0067\u0307\u0000\u0067\u030C\u0000\u0067\u0327"d~ +"\u0000\u0068\u0000\u0068\u0050\u0061\u0000\u0068\u0061\u0000\u0068\u0302\u0000\u0068\u0307\u0000\u0068\u0308\u0000"d~ +"\u0068\u030C\u0000\u0068\u0323\u0000\u0068\u0327\u0000\u0068\u032E\u0000\u0068\u0331\u0000\u0069\u0000\u0069\u0069"d~ +"\u0000\u0069\u0069\u0069\u0000\u0069\u006A\u0000\u0069\u006E\u0000\u0069\u0076\u0000\u0069\u0078\u0000\u0069\u0300"d~ +"\u0000\u0069\u0301\u0000\u0069\u0302\u0000\u0069\u0303\u0000\u0069\u0304\u0000\u0069\u0306\u0000\u0069\u0308\u0000"d~ +"\u0069\u0308\u0301\u0000\u0069\u0309\u0000\u0069\u030C\u0000\u0069\u030F\u0000\u0069\u0311\u0000\u0069\u0323\u0000"d~ +"\u0069\u0328\u0000\u0069\u0330\u0000\u006A\u0000\u006A\u0302\u0000\u006A\u030C\u0000\u006B\u0000\u006B\u0041\u0000"d~ +"\u006B\u0048\u007A\u0000\u006B\u0050\u0061\u0000\u006B\u0056\u0000\u006B\u0057\u0000\u006B\u0063\u0061\u006C\u0000"d~ +"\u006B\u0067\u0000\u006B\u006C\u0000\u006B\u006D\u0000\u006B\u006D\u0032\u0000\u006B\u006D\u0033\u0000\u006B\u0074"d~ +"\u0000\u006B\u0301\u0000\u006B\u030C\u0000\u006B\u0323\u0000\u006B\u0327\u0000\u006B\u0331\u0000\u006B\u03A9\u0000"d~ +"\u006C\u0000\u006C\u006A\u0000\u006C\u006D\u0000\u006C\u006E\u0000\u006C\u006F\u0067\u0000\u006C\u0078\u0000\u006C"d~ +"\u00B7\u0000\u006C\u0301\u0000\u006C\u030C\u0000\u006C\u0323\u0000\u006C\u0323\u0304\u0000\u006C\u0327\u0000\u006C"d~ +"\u032D\u0000\u006C\u0331\u0000\u006D\u0000\u006D\u0032\u0000\u006D\u0033\u0000\u006D\u0041\u0000\u006D\u0056\u0000"d~ +"\u006D\u0057\u0000\u006D\u0062\u0000\u006D\u0067\u0000\u006D\u0069\u006C\u0000\u006D\u006C\u0000\u006D\u006D\u0000"d~ +"\u006D\u006D\u0032\u0000\u006D\u006D\u0033\u0000\u006D\u006F\u006C\u0000\u006D\u0073\u0000\u006D\u0301\u0000\u006D"d~ +"\u0307\u0000\u006D\u0323\u0000\u006D\u2215\u0073\u0000\u006D\u2215\u0073\u0032\u0000\u006E\u0000\u006E\u0041\u0000"d~ +"\u006E\u0046\u0000\u006E\u0056\u0000\u006E\u0057\u0000\u006E\u006A\u0000\u006E\u006D\u0000\u006E\u0073\u0000\u006E"d~ +"\u0300\u0000\u006E\u0301\u0000\u006E\u0303\u0000\u006E\u0307\u0000\u006E\u030C\u0000\u006E\u0323\u0000\u006E\u0327"d~ +"\u0000\u006E\u032D\u0000\u006E\u0331\u0000\u006F\u0000\u006F\u0056\u0000\u006F\u0300\u0000\u006F\u0301\u0000\u006F"d~ +"\u0302\u0000\u006F\u0302\u0300\u0000\u006F\u0302\u0301\u0000\u006F\u0302\u0303\u0000\u006F\u0302\u0309\u0000\u006F"d~ +"\u0303\u0000\u006F\u0303\u0301\u0000\u006F\u0303\u0304\u0000\u006F\u0303\u0308\u0000\u006F\u0304\u0000\u006F\u0304"d~ +"\u0300\u0000\u006F\u0304\u0301\u0000\u006F\u0306\u0000\u006F\u0307\u0000\u006F\u0307\u0304\u0000\u006F\u0308\u0000"d~ +"\u006F\u0308\u0304\u0000\u006F\u0309\u0000\u006F\u030B\u0000\u006F\u030C\u0000\u006F\u030F\u0000\u006F\u0311\u0000"d~ +"\u006F\u031B\u0000\u006F\u031B\u0300\u0000\u006F\u031B\u0301\u0000\u006F\u031B\u0303\u0000\u006F\u031B\u0309\u0000"d~ +"\u006F\u031B\u0323\u0000\u006F\u0323\u0000\u006F\u0323\u0302\u0000\u006F\u0328\u0000\u006F\u0328\u0304\u0000\u0070"d~ +"\u0000\u0070\u002E\u006D\u002E\u0000\u0070\u0041\u0000\u0070\u0046\u0000\u0070\u0056\u0000\u0070\u0057\u0000\u0070"d~ +"\u0063\u0000\u0070\u0073\u0000\u0070\u0301\u0000\u0070\u0307\u0000\u0071\u0000\u0072\u0000\u0072\u0061\u0064\u0000"d~ +"\u0072\u0061\u0064\u2215\u0073\u0000\u0072\u0061\u0064\u2215\u0073\u0032\u0000\u0072\u0301\u0000\u0072\u0307\u0000"d~ +"\u0072\u030C\u0000\u0072\u030F\u0000\u0072\u0311\u0000\u0072\u0323\u0000\u0072\u0323\u0304\u0000\u0072\u0327\u0000"d~ +"\u0072\u0331\u0000\u0073\u0000\u0073\u0072\u0000\u0073\u0074\u0000\u0073\u0301\u0000\u0073\u0301\u0307\u0000\u0073"d~ +"\u0302\u0000\u0073\u0307\u0000\u0073\u030C\u0000\u0073\u030C\u0307\u0000\u0073\u0323\u0000\u0073\u0323\u0307\u0000"d~ +"\u0073\u0326\u0000\u0073\u0327\u0000\u0074\u0000\u0074\u0307\u0000\u0074\u0308\u0000\u0074\u030C\u0000\u0074\u0323"d~ +"\u0000\u0074\u0326\u0000\u0074\u0327\u0000\u0074\u032D\u0000\u0074\u0331\u0000\u0075\u0000\u0075\u0300\u0000\u0075"d~ +"\u0301\u0000\u0075\u0302\u0000\u0075\u0303\u0000\u0075\u0303\u0301\u0000\u0075\u0304\u0000\u0075\u0304\u0308\u0000"d~ +"\u0075\u0306\u0000\u0075\u0308\u0000\u0075\u0308\u0300\u0000\u0075\u0308\u0301\u0000\u0075\u0308\u0304\u0000\u0075"d~ +"\u0308\u030C\u0000\u0075\u0309\u0000\u0075\u030A\u0000\u0075\u030B\u0000\u0075\u030C\u0000\u0075\u030F\u0000\u0075"d~ +"\u0311\u0000\u0075\u031B\u0000\u0075\u031B\u0300\u0000\u0075\u031B\u0301\u0000\u0075\u031B\u0303\u0000\u0075\u031B"d~ +"\u0309\u0000\u0075\u031B\u0323\u0000\u0075\u0323\u0000\u0075\u0324\u0000\u0075\u0328\u0000\u0075\u032D\u0000\u0075"d~ +"\u0330\u0000\u0076\u0000\u0076\u0069\u0000\u0076\u0069\u0069\u0000\u0076\u0069\u0069\u0069\u0000\u0076\u0303\u0000"d~ +"\u0076\u0323\u0000\u0077\u0000\u0077\u0300\u0000\u0077\u0301\u0000\u0077\u0302\u0000\u0077\u0307\u0000\u0077\u0308"d~ +"\u0000\u0077\u030A\u0000\u0077\u0323\u0000\u0078\u0000\u0078\u0069\u0000\u0078\u0069\u0069\u0000\u0078\u0307\u0000"d~ +"\u0078\u0308\u0000\u0079\u0000\u0079\u0300\u0000\u0079\u0301\u0000\u0079\u0302\u0000\u0079\u0303\u0000\u0079\u0304"d~ +"\u0000\u0079\u0307\u0000\u0079\u0308\u0000\u0079\u0309\u0000\u0079\u030A\u0000\u0079\u0323\u0000\u007A\u0000\u007A"d~ +"\u0301\u0000\u007A\u0302\u0000\u007A\u0307\u0000\u007A\u030C\u0000\u007A\u0323\u0000\u007A\u0331\u0000\u007B\u0000"d~ +"\u007C\u0000\u007D\u0000\u007E\u0000\u00A2\u0000\u00A3\u0000\u00A5\u0000\u00A6\u0000\u00AC\u0000\u00B0\u0043\u0000"d~ +"\u00B0\u0046\u0000\u00B7\u0000\u00C6\u0000\u00C6\u0301\u0000\u00C6\u0304\u0000\u00D8\u0301\u0000\u00E6\u0000\u00E6"d~ +"\u0301\u0000\u00E6\u0304\u0000\u00F0\u0000\u00F8\u0000\u00F8\u0301\u0000\u0126\u0000\u0127\u0000\u0131\u0000\u014B"d~ +"\u0000\u0153\u0000\u018E\u0000\u0190\u0000\u01AB\u0000\u01B7\u030C\u0000\u01C0\u0000\u01C1\u0000\u01C2\u0000\u0222"d~ +"\u0000\u0237\u0000\u0250\u0000\u0251\u0000\u0252\u0000\u0253\u0000\u0254\u0000\u0255\u0000\u0256\u0000\u0257\u0000"d~ +"\u0258\u0000\u0259\u0000\u025B\u0000\u025C\u0000\u025E\u0000\u025F\u0000\u0260\u0000\u0261\u0000\u0262\u0000\u0263"d~ +"\u0000\u0264\u0000\u0265\u0000\u0266\u0000\u0267\u0000\u0268\u0000\u0269\u0000\u026A\u0000\u026B\u0000\u026C\u0000"d~ +"\u026D\u0000\u026E\u0000\u026F\u0000\u0270\u0000\u0271\u0000\u0272\u0000\u0273\u0000\u0274\u0000\u0275\u0000\u0276"d~ +"\u0000\u0277\u0000\u0278\u0000\u0279\u0000\u027A\u0000\u027B\u0000\u027D\u0000\u027E\u0000\u0280\u0000\u0281\u0000"d~ +"\u0282\u0000\u0283\u0000\u0284\u0000\u0288\u0000\u0289\u0000\u028A\u0000\u028B\u0000\u028C\u0000\u028D\u0000\u028E"d~ +"\u0000\u028F\u0000\u0290\u0000\u0291\u0000\u0292\u0000\u0292\u030C\u0000\u0295\u0000\u0298\u0000\u0299\u0000\u029B"d~ +"\u0000\u029C\u0000\u029D\u0000\u029F\u0000\u02A1\u0000\u02A2\u0000\u02A3\u0000\u02A4\u0000\u02A5\u0000\u02A6\u0000"d~ +"\u02A7\u0000\u02A8\u0000\u02A9\u0000\u02AA\u0000\u02AB\u0000\u02B9\u0000\u02BC\u006E\u0000\u02D0\u0000\u02D1\u0000"d~ +"\u0300\u0000\u0301\u0000\u0308\u0301\u0000\u0313\u0000\u0391\u0000\u0391\u0300\u0000\u0391\u0301\u0000\u0391\u0304"d~ +"\u0000\u0391\u0306\u0000\u0391\u0313\u0000\u0391\u0313\u0300\u0000\u0391\u0313\u0300\u0345\u0000\u0391\u0313\u0301"d~ +"\u0000\u0391\u0313\u0301\u0345\u0000\u0391\u0313\u0342\u0000\u0391\u0313\u0342\u0345\u0000\u0391\u0313\u0345\u0000"d~ +"\u0391\u0314\u0000\u0391\u0314\u0300\u0000\u0391\u0314\u0300\u0345\u0000\u0391\u0314\u0301\u0000\u0391\u0314\u0301"d~ +"\u0345\u0000\u0391\u0314\u0342\u0000\u0391\u0314\u0342\u0345\u0000\u0391\u0314\u0345\u0000\u0391\u0345\u0000\u0392"d~ +"\u0000\u0393\u0000\u0394\u0000\u0395\u0000\u0395\u0300\u0000\u0395\u0301\u0000\u0395\u0313\u0000\u0395\u0313\u0300"d~ +"\u0000\u0395\u0313\u0301\u0000\u0395\u0314\u0000\u0395\u0314\u0300\u0000\u0395\u0314\u0301\u0000\u0396\u0000\u0397"d~ +"\u0000\u0397\u0300\u0000\u0397\u0301\u0000\u0397\u0313\u0000\u0397\u0313\u0300\u0000\u0397\u0313\u0300\u0345\u0000"d~ +"\u0397\u0313\u0301\u0000\u0397\u0313\u0301\u0345\u0000\u0397\u0313\u0342\u0000\u0397\u0313\u0342\u0345\u0000\u0397"d~ +"\u0313\u0345\u0000\u0397\u0314\u0000\u0397\u0314\u0300\u0000\u0397\u0314\u0300\u0345\u0000\u0397\u0314\u0301\u0000"d~ +"\u0397\u0314\u0301\u0345\u0000\u0397\u0314\u0342\u0000\u0397\u0314\u0342\u0345\u0000\u0397\u0314\u0345\u0000\u0397"d~ +"\u0345\u0000\u0398\u0000\u0399\u0000\u0399\u0300\u0000\u0399\u0301\u0000\u0399\u0304\u0000\u0399\u0306\u0000\u0399"d~ +"\u0308\u0000\u0399\u0313\u0000\u0399\u0313\u0300\u0000\u0399\u0313\u0301\u0000\u0399\u0313\u0342\u0000\u0399\u0314"d~ +"\u0000\u0399\u0314\u0300\u0000\u0399\u0314\u0301\u0000\u0399\u0314\u0342\u0000\u039A\u0000\u039B\u0000\u039C\u0000"d~ +"\u039D\u0000\u039E\u0000\u039F\u0000\u039F\u0300\u0000\u039F\u0301\u0000\u039F\u0313\u0000\u039F\u0313\u0300\u0000"d~ +"\u039F\u0313\u0301\u0000\u039F\u0314\u0000\u039F\u0314\u0300\u0000\u039F\u0314\u0301\u0000\u03A0\u0000\u03A1\u0000"d~ +"\u03A1\u0314\u0000\u03A3\u0000\u03A4\u0000\u03A5\u0000\u03A5\u0300\u0000\u03A5\u0301\u0000\u03A5\u0304\u0000\u03A5"d~ +"\u0306\u0000\u03A5\u0308\u0000\u03A5\u0314\u0000\u03A5\u0314\u0300\u0000\u03A5\u0314\u0301\u0000\u03A5\u0314\u0342"d~ +"\u0000\u03A6\u0000\u03A7\u0000\u03A8\u0000\u03A9\u0000\u03A9\u0300\u0000\u03A9\u0301\u0000\u03A9\u0313\u0000\u03A9"d~ +"\u0313\u0300\u0000\u03A9\u0313\u0300\u0345\u0000\u03A9\u0313\u0301\u0000\u03A9\u0313\u0301\u0345\u0000\u03A9\u0313"d~ +"\u0342\u0000\u03A9\u0313\u0342\u0345\u0000\u03A9\u0313\u0345\u0000\u03A9\u0314\u0000\u03A9\u0314\u0300\u0000\u03A9"d~ +"\u0314\u0300\u0345\u0000\u03A9\u0314\u0301\u0000\u03A9\u0314\u0301\u0345\u0000\u03A9\u0314\u0342\u0000\u03A9\u0314"d~ +"\u0342\u0345\u0000\u03A9\u0314\u0345\u0000\u03A9\u0345\u0000\u03B1\u0000\u03B1\u0300\u0000\u03B1\u0300\u0345\u0000"d~ +"\u03B1\u0301\u0000\u03B1\u0301\u0345\u0000\u03B1\u0304\u0000\u03B1\u0306\u0000\u03B1\u0313\u0000\u03B1\u0313\u0300"d~ +"\u0000\u03B1\u0313\u0300\u0345\u0000\u03B1\u0313\u0301\u0000\u03B1\u0313\u0301\u0345\u0000\u03B1\u0313\u0342\u0000"d~ +"\u03B1\u0313\u0342\u0345\u0000\u03B1\u0313\u0345\u0000\u03B1\u0314\u0000\u03B1\u0314\u0300\u0000\u03B1\u0314\u0300"d~ +"\u0345\u0000\u03B1\u0314\u0301\u0000\u03B1\u0314\u0301\u0345\u0000\u03B1\u0314\u0342\u0000\u03B1\u0314\u0342\u0345"d~ +"\u0000\u03B1\u0314\u0345\u0000\u03B1\u0342\u0000\u03B1\u0342\u0345\u0000\u03B1\u0345\u0000\u03B2\u0000\u03B3\u0000"d~ +"\u03B4\u0000\u03B5\u0000\u03B5\u0300\u0000\u03B5\u0301\u0000\u03B5\u0313\u0000\u03B5\u0313\u0300\u0000\u03B5\u0313"d~ +"\u0301\u0000\u03B5\u0314\u0000\u03B5\u0314\u0300\u0000\u03B5\u0314\u0301\u0000\u03B6\u0000\u03B7\u0000\u03B7\u0300"d~ +"\u0000\u03B7\u0300\u0345\u0000\u03B7\u0301\u0000\u03B7\u0301\u0345\u0000\u03B7\u0313\u0000\u03B7\u0313\u0300\u0000"d~ +"\u03B7\u0313\u0300\u0345\u0000\u03B7\u0313\u0301\u0000\u03B7\u0313\u0301\u0345\u0000\u03B7\u0313\u0342\u0000\u03B7"d~ +"\u0313\u0342\u0345\u0000\u03B7\u0313\u0345\u0000\u03B7\u0314\u0000\u03B7\u0314\u0300\u0000\u03B7\u0314\u0300\u0345"d~ +"\u0000\u03B7\u0314\u0301\u0000\u03B7\u0314\u0301\u0345\u0000\u03B7\u0314\u0342\u0000\u03B7\u0314\u0342\u0345\u0000"d~ +"\u03B7\u0314\u0345\u0000\u03B7\u0342\u0000\u03B7\u0342\u0345\u0000\u03B7\u0345\u0000\u03B8\u0000\u03B9\u0000\u03B9"d~ +"\u0300\u0000\u03B9\u0301\u0000\u03B9\u0304\u0000\u03B9\u0306\u0000\u03B9\u0308\u0000\u03B9\u0308\u0300\u0000\u03B9"d~ +"\u0308\u0301\u0000\u03B9\u0308\u0342\u0000\u03B9\u0313\u0000\u03B9\u0313\u0300\u0000\u03B9\u0313\u0301\u0000\u03B9"d~ +"\u0313\u0342\u0000\u03B9\u0314\u0000\u03B9\u0314\u0300\u0000\u03B9\u0314\u0301\u0000\u03B9\u0314\u0342\u0000\u03B9"d~ +"\u0342\u0000\u03BA\u0000\u03BB\u0000\u03BC\u0000\u03BC\u0041\u0000\u03BC\u0046\u0000\u03BC\u0056\u0000\u03BC\u0057"d~ +"\u0000\u03BC\u0067\u0000\u03BC\u006C\u0000\u03BC\u006D\u0000\u03BC\u0073\u0000\u03BD\u0000\u03BE\u0000\u03BF\u0000"d~ +"\u03BF\u0300\u0000\u03BF\u0301\u0000\u03BF\u0313\u0000\u03BF\u0313\u0300\u0000\u03BF\u0313\u0301\u0000\u03BF\u0314"d~ +"\u0000\u03BF\u0314\u0300\u0000\u03BF\u0314\u0301\u0000\u03C0\u0000\u03C1\u0000\u03C1\u0313\u0000\u03C1\u0314\u0000"d~ +"\u03C2\u0000\u03C3\u0000\u03C4\u0000\u03C5\u0000\u03C5\u0300\u0000\u03C5\u0301\u0000\u03C5\u0304\u0000\u03C5\u0306"d~ +"\u0000\u03C5\u0308\u0000\u03C5\u0308\u0300\u0000\u03C5\u0308\u0301\u0000\u03C5\u0308\u0342\u0000\u03C5\u0313\u0000"d~ +"\u03C5\u0313\u0300\u0000\u03C5\u0313\u0301\u0000\u03C5\u0313\u0342\u0000\u03C5\u0314\u0000\u03C5\u0314\u0300\u0000"d~ +"\u03C5\u0314\u0301\u0000\u03C5\u0314\u0342\u0000\u03C5\u0342\u0000\u03C6\u0000\u03C7\u0000\u03C8\u0000\u03C9\u0000"d~ +"\u03C9\u0300\u0000\u03C9\u0300\u0345\u0000\u03C9\u0301\u0000\u03C9\u0301\u0345\u0000\u03C9\u0313\u0000\u03C9\u0313"d~ +"\u0300\u0000\u03C9\u0313\u0300\u0345\u0000\u03C9\u0313\u0301\u0000\u03C9\u0313\u0301\u0345\u0000\u03C9\u0313\u0342"d~ +"\u0000\u03C9\u0313\u0342\u0345\u0000\u03C9\u0313\u0345\u0000\u03C9\u0314\u0000\u03C9\u0314\u0300\u0000\u03C9\u0314"d~ +"\u0300\u0345\u0000\u03C9\u0314\u0301\u0000\u03C9\u0314\u0301\u0345\u0000\u03C9\u0314\u0342\u0000\u03C9\u0314\u0342"d~ +"\u0345\u0000\u03C9\u0314\u0345\u0000\u03C9\u0342\u0000\u03C9\u0342\u0345\u0000\u03C9\u0345\u0000\u03DC\u0000\u03DD"d~ +"\u0000\u0406\u0308\u0000\u0410\u0306\u0000\u0410\u0308\u0000\u0413\u0301\u0000\u0415\u0300\u0000\u0415\u0306\u0000"d~ +"\u0415\u0308\u0000\u0416\u0306\u0000\u0416\u0308\u0000\u0417\u0308\u0000\u0418\u0300\u0000\u0418\u0304\u0000\u0418"d~ +"\u0306\u0000\u0418\u0308\u0000\u041A\u0301\u0000\u041E\u0308\u0000\u0423\u0304\u0000\u0423\u0306\u0000\u0423\u0308"d~ +"\u0000\u0423\u030B\u0000\u0427\u0308\u0000\u042B\u0308\u0000\u042D\u0308\u0000\u0430\u0000\u0430\u0306\u0000\u0430"d~ +"\u0308\u0000\u0431\u0000\u0432\u0000\u0433\u0000\u0433\u0301\u0000\u0434\u0000\u0435\u0000\u0435\u0300\u0000\u0435"d~ +"\u0306\u0000\u0435\u0308\u0000\u0436\u0000\u0436\u0306\u0000\u0436\u0308\u0000\u0437\u0000\u0437\u0308\u0000\u0438"d~ +"\u0000\u0438\u0300\u0000\u0438\u0304\u0000\u0438\u0306\u0000\u0438\u0308\u0000\u043A\u0000\u043A\u0301\u0000\u043B"d~ +"\u0000\u043C\u0000\u043D\u0000\u043E\u0000\u043E\u0308\u0000\u043F\u0000\u0440\u0000\u0441\u0000\u0442\u0000\u0443"d~ +"\u0000\u0443\u0304\u0000\u0443\u0306\u0000\u0443\u0308\u0000\u0443\u030B\u0000\u0444\u0000\u0445\u0000\u0446\u0000"d~ +"\u0447\u0000\u0447\u0308\u0000\u0448\u0000\u044A\u0000\u044B\u0000\u044B\u0308\u0000\u044C\u0000\u044D\u0000\u044D"d~ +"\u0308\u0000\u044E\u0000\u0455\u0000\u0456\u0000\u0456\u0308\u0000\u0458\u0000\u045F\u0000\u0474\u030F\u0000\u0475"d~ +"\u030F\u0000\u0491\u0000\u04AB\u0000\u04AF\u0000\u04B1\u0000\u04CF\u0000\u04D8\u0308\u0000\u04D9\u0000\u04D9\u0308"d~ +"\u0000\u04E8\u0308\u0000\u04E9\u0000\u04E9\u0308\u0000\u0565\u0582\u0000\u0574\u0565\u0000\u0574\u056B\u0000\u0574"d~ +"\u056D\u0000\u0574\u0576\u0000\u057E\u0576\u0000\u05D0\u0000\u05D0\u05B7\u0000\u05D0\u05B8\u0000\u05D0\u05BC\u0000"d~ +"\u05D0\u05DC\u0000\u05D1\u0000\u05D1\u05BC\u0000\u05D1\u05BF\u0000\u05D2\u0000\u05D2\u05BC\u0000\u05D3\u0000\u05D3"d~ +"\u05BC\u0000\u05D4\u0000\u05D4\u05BC\u0000\u05D5\u05B9\u0000\u05D5\u05BC\u0000\u05D6\u05BC\u0000\u05D8\u05BC\u0000"d~ +"\u05D9\u05B4\u0000\u05D9\u05BC\u0000\u05DA\u05BC\u0000\u05DB\u0000\u05DB\u05BC\u0000\u05DB\u05BF\u0000\u05DC\u0000"d~ +"\u05DC\u05BC\u0000\u05DD\u0000\u05DE\u05BC\u0000\u05E0\u05BC\u0000\u05E1\u05BC\u0000\u05E2\u0000\u05E3\u05BC\u0000"d~ +"\u05E4\u05BC\u0000\u05E4\u05BF\u0000\u05E6\u05BC\u0000\u05E7\u05BC\u0000\u05E8\u0000\u05E8\u05BC\u0000\u05E9\u05BC"d~ +"\u0000\u05E9\u05BC\u05C1\u0000\u05E9\u05BC\u05C2\u0000\u05E9\u05C1\u0000\u05E9\u05C2\u0000\u05EA\u0000\u05EA\u05BC"d~ +"\u0000\u05F2\u05B7\u0000\u0621\u0000\u0627\u0000\u0627\u0643\u0628\u0631\u0000\u0627\u0644\u0644\u0647\u0000\u0627"d~ +"\u064B\u0000\u0627\u0653\u0000\u0627\u0654\u0000\u0627\u0655\u0000\u0627\u0674\u0000\u0628\u0000\u0628\u062C\u0000"d~ +"\u0628\u062D\u0000\u0628\u062D\u064A\u0000\u0628\u062E\u0000\u0628\u062E\u064A\u0000\u0628\u0631\u0000\u0628\u0632"d~ +"\u0000\u0628\u0645\u0000\u0628\u0646\u0000\u0628\u0647\u0000\u0628\u0649\u0000\u0628\u064A\u0000\u0629\u0000\u062A"d~ +"\u0000\u062A\u062C\u0000\u062A\u062C\u0645\u0000\u062A\u062C\u0649\u0000\u062A\u062C\u064A\u0000\u062A\u062D\u0000"d~ +"\u062A\u062D\u062C\u0000\u062A\u062D\u0645\u0000\u062A\u062E\u0000\u062A\u062E\u0645\u0000\u062A\u062E\u0649\u0000"d~ +"\u062A\u062E\u064A\u0000\u062A\u0631\u0000\u062A\u0632\u0000\u062A\u0645\u0000\u062A\u0645\u062C\u0000\u062A\u0645"d~ +"\u062D\u0000\u062A\u0645\u062E\u0000\u062A\u0645\u0649\u0000\u062A\u0645\u064A\u0000\u062A\u0646\u0000\u062A\u0647"d~ +"\u0000\u062A\u0649\u0000\u062A\u064A\u0000\u062B\u0000\u062B\u062C\u0000\u062B\u0631\u0000\u062B\u0632\u0000\u062B"d~ +"\u0645\u0000\u062B\u0646\u0000\u062B\u0647\u0000\u062B\u0649\u0000\u062B\u064A\u0000\u062C\u0000\u062C\u062D\u0000"d~ +"\u062C\u062D\u0649\u0000\u062C\u062D\u064A\u0000\u062C\u0644\u0020\u062C\u0644\u0627\u0644\u0647\u0000\u062C\u0645"d~ +"\u0000\u062C\u0645\u062D\u0000\u062C\u0645\u0649\u0000\u062C\u0645\u064A\u0000\u062C\u0649\u0000\u062C\u064A\u0000"d~ +"\u062D\u0000\u062D\u062C\u0000\u062D\u062C\u064A\u0000\u062D\u0645\u0000\u062D\u0645\u0649\u0000\u062D\u0645\u064A"d~ +"\u0000\u062D\u0649\u0000\u062D\u064A\u0000\u062E\u0000\u062E\u062C\u0000\u062E\u062D\u0000\u062E\u0645\u0000\u062E"d~ +"\u0649\u0000\u062E\u064A\u0000\u062F\u0000\u0630\u0000\u0630\u0670\u0000\u0631\u0000\u0631\u0633\u0648\u0644\u0000"d~ +"\u0631\u0670\u0000\u0631\u06CC\u0627\u0644\u0000\u0632\u0000\u0633\u0000\u0633\u062C\u0000\u0633\u062C\u062D\u0000"d~ +"\u0633\u062C\u0649\u0000\u0633\u062D\u0000\u0633\u062D\u062C\u0000\u0633\u062E\u0000\u0633\u062E\u0649\u0000\u0633"d~ +"\u062E\u064A\u0000\u0633\u0631\u0000\u0633\u0645\u0000\u0633\u0645\u062C\u0000\u0633\u0645\u062D\u0000\u0633\u0645"d~ +"\u0645\u0000\u0633\u0647\u0000\u0633\u0649\u0000\u0633\u064A\u0000\u0634\u0000\u0634\u062C\u0000\u0634\u062C\u064A"d~ +"\u0000\u0634\u062D\u0000\u0634\u062D\u0645\u0000\u0634\u062D\u064A\u0000\u0634\u062E\u0000\u0634\u0631\u0000\u0634"d~ +"\u0645\u0000\u0634\u0645\u062E\u0000\u0634\u0645\u0645\u0000\u0634\u0647\u0000\u0634\u0649\u0000\u0634\u064A\u0000"d~ +"\u0635\u0000\u0635\u062D\u0000\u0635\u062D\u062D\u0000\u0635\u062D\u064A\u0000\u0635\u062E\u0000\u0635\u0631\u0000"d~ +"\u0635\u0644\u0639\u0645\u0000\u0635\u0644\u0649\u0000\u0635\u0644\u0649\u0020\u0627\u0644\u0644\u0647\u0020\u0639"d~ +"\u0644\u064A\u0647\u0020\u0648\u0633\u0644\u0645\u0000\u0635\u0644\u06D2\u0000\u0635\u0645\u0000\u0635\u0645\u0645"d~ +"\u0000\u0635\u0649\u0000\u0635\u064A\u0000\u0636\u0000\u0636\u062C\u0000\u0636\u062D\u0000\u0636\u062D\u0649\u0000"d~ +"\u0636\u062D\u064A\u0000\u0636\u062E\u0000\u0636\u062E\u0645\u0000\u0636\u0631\u0000\u0636\u0645\u0000\u0636\u0649"d~ +"\u0000\u0636\u064A\u0000\u0637\u0000\u0637\u062D\u0000\u0637\u0645\u0000\u0637\u0645\u062D\u0000\u0637\u0645\u0645"d~ +"\u0000\u0637\u0645\u064A\u0000\u0637\u0649\u0000\u0637\u064A\u0000\u0638\u0000\u0638\u0645\u0000\u0639\u0000\u0639"d~ +"\u062C\u0000\u0639\u062C\u0645\u0000\u0639\u0644\u064A\u0647\u0000\u0639\u0645\u0000\u0639\u0645\u0645\u0000\u0639"d~ +"\u0645\u0649\u0000\u0639\u0645\u064A\u0000\u0639\u0649\u0000\u0639\u064A\u0000\u063A\u0000\u063A\u062C\u0000\u063A"d~ +"\u0645\u0000\u063A\u0645\u0645\u0000\u063A\u0645\u0649\u0000\u063A\u0645\u064A\u0000\u063A\u0649\u0000\u063A\u064A"d~ +"\u0000\u0640\u064B\u0000\u0640\u064E\u0000\u0640\u064E\u0651\u0000\u0640\u064F\u0000\u0640\u064F\u0651\u0000\u0640"d~ +"\u0650\u0000\u0640\u0650\u0651\u0000\u0640\u0651\u0000\u0640\u0652\u0000\u0641\u0000\u0641\u062C\u0000\u0641\u062D"d~ +"\u0000\u0641\u062E\u0000\u0641\u062E\u0645\u0000\u0641\u0645\u0000\u0641\u0645\u064A\u0000\u0641\u0649\u0000\u0641"d~ +"\u064A\u0000\u0642\u0000\u0642\u062D\u0000\u0642\u0644\u06D2\u0000\u0642\u0645\u0000\u0642\u0645\u062D\u0000\u0642"d~ +"\u0645\u0645\u0000\u0642\u0645\u064A\u0000\u0642\u0649\u0000\u0642\u064A\u0000\u0643\u0000\u0643\u0627\u0000\u0643"d~ +"\u062C\u0000\u0643\u062D\u0000\u0643\u062E\u0000\u0643\u0644\u0000\u0643\u0645\u0000\u0643\u0645\u0645\u0000\u0643"d~ +"\u0645\u064A\u0000\u0643\u0649\u0000\u0643\u064A\u0000\u0644\u0000\u0644\u0627\u0000\u0644\u0627\u0653\u0000\u0644"d~ +"\u0627\u0654\u0000\u0644\u0627\u0655\u0000\u0644\u062C\u0000\u0644\u062C\u062C\u0000\u0644\u062C\u0645\u0000\u0644"d~ +"\u062C\u064A\u0000\u0644\u062D\u0000\u0644\u062D\u0645\u0000\u0644\u062D\u0649\u0000\u0644\u062D\u064A\u0000\u0644"d~ +"\u062E\u0000\u0644\u062E\u0645\u0000\u0644\u0645\u0000\u0644\u0645\u062D\u0000\u0644\u0645\u064A\u0000\u0644\u0647"d~ +"\u0000\u0644\u0649\u0000\u0644\u064A\u0000\u0645\u0000\u0645\u0627\u0000\u0645\u062C\u0000\u0645\u062C\u062D\u0000"d~ +"\u0645\u062C\u062E\u0000\u0645\u062C\u0645\u0000\u0645\u062C\u064A\u0000\u0645\u062D\u0000\u0645\u062D\u062C\u0000"d~ +"\u0645\u062D\u0645\u0000\u0645\u062D\u0645\u062F\u0000\u0645\u062D\u064A\u0000\u0645\u062E\u0000\u0645\u062E\u062C"d~ +"\u0000\u0645\u062E\u0645\u0000\u0645\u062E\u064A\u0000\u0645\u0645\u0000\u0645\u0645\u064A\u0000\u0645\u0649\u0000"d~ +"\u0645\u064A\u0000\u0646\u0000\u0646\u062C\u0000\u0646\u062C\u062D\u0000\u0646\u062C\u0645\u0000\u0646\u062C\u0649"d~ +"\u0000\u0646\u062C\u064A\u0000\u0646\u062D\u0000\u0646\u062D\u0645\u0000\u0646\u062D\u0649\u0000\u0646\u062D\u064A"d~ +"\u0000\u0646\u062E\u0000\u0646\u0631\u0000\u0646\u0632\u0000\u0646\u0645\u0000\u0646\u0645\u0649\u0000\u0646\u0645"d~ +"\u064A\u0000\u0646\u0646\u0000\u0646\u0647\u0000\u0646\u0649\u0000\u0646\u064A\u0000\u0647\u0000\u0647\u062C\u0000"d~ +"\u0647\u0645\u0000\u0647\u0645\u062C\u0000\u0647\u0645\u0645\u0000\u0647\u0649\u0000\u0647\u064A\u0000\u0647\u0670"d~ +"\u0000\u0648\u0000\u0648\u0633\u0644\u0645\u0000\u0648\u0654\u0000\u0648\u0674\u0000\u0649\u0000\u0649\u0670\u0000"d~ +"\u064A\u0000\u064A\u062C\u0000\u064A\u062C\u064A\u0000\u064A\u062D\u0000\u064A\u062D\u064A\u0000\u064A\u062E\u0000"d~ +"\u064A\u0631\u0000\u064A\u0632\u0000\u064A\u0645\u0000\u064A\u0645\u0645\u0000\u064A\u0645\u064A\u0000\u064A\u0646"d~ +"\u0000\u064A\u0647\u0000\u064A\u0649\u0000\u064A\u064A\u0000\u064A\u0654\u0000\u064A\u0654\u0627\u0000\u064A\u0654"d~ +"\u062C\u0000\u064A\u0654\u062D\u0000\u064A\u0654\u062E\u0000\u064A\u0654\u0631\u0000\u064A\u0654\u0632\u0000\u064A"d~ +"\u0654\u0645\u0000\u064A\u0654\u0646\u0000\u064A\u0654\u0647\u0000\u064A\u0654\u0648\u0000\u064A\u0654\u0649\u0000"d~ +"\u064A\u0654\u064A\u0000\u064A\u0654\u06C6\u0000\u064A\u0654\u06C7\u0000\u064A\u0654\u06C8\u0000\u064A\u0654\u06D0"d~ +"\u0000\u064A\u0654\u06D5\u0000\u064A\u0674\u0000\u066E\u0000\u066F\u0000\u0671\u0000\u0679\u0000\u067A\u0000\u067B"d~ +"\u0000\u067E\u0000\u067F\u0000\u0680\u0000\u0683\u0000\u0684\u0000\u0686\u0000\u0687\u0000\u0688\u0000\u068C\u0000"d~ +"\u068D\u0000\u068E\u0000\u0691\u0000\u0698\u0000\u06A1\u0000\u06A4\u0000\u06A6\u0000\u06A9\u0000\u06AD\u0000\u06AF"d~ +"\u0000\u06B1\u0000\u06B3\u0000\u06BA\u0000\u06BB\u0000\u06BE\u0000\u06C1\u0000\u06C1\u0654\u0000\u06C5\u0000\u06C6"d~ +"\u0000\u06C7\u0000\u06C7\u0674\u0000\u06C8\u0000\u06C9\u0000\u06CB\u0000\u06CC\u0000\u06D0\u0000\u06D2\u0000\u06D2"d~ +"\u0654\u0000\u06D5\u0654\u0000\u0915\u093C\u0000\u0916\u093C\u0000\u0917\u093C\u0000\u091C\u093C\u0000\u0921\u093C"d~ +"\u0000\u0922\u093C\u0000\u0928\u093C\u0000\u092B\u093C\u0000\u092F\u093C\u0000\u0930\u093C\u0000\u0933\u093C\u0000"d~ +"\u09A1\u09BC\u0000\u09A2\u09BC\u0000\u09AF\u09BC\u0000\u09C7\u09BE\u0000\u09C7\u09D7\u0000\u0A16\u0A3C\u0000\u0A17"d~ +"\u0A3C\u0000\u0A1C\u0A3C\u0000\u0A2B\u0A3C\u0000\u0A32\u0A3C\u0000\u0A38\u0A3C\u0000\u0B21\u0B3C\u0000\u0B22\u0B3C"d~ +"\u0000\u0B47\u0B3E\u0000\u0B47\u0B56\u0000\u0B47\u0B57\u0000\u0B92\u0BD7\u0000\u0BC6\u0BBE\u0000\u0BC6\u0BD7\u0000"d~ +"\u0BC7\u0BBE\u0000\u0C46\u0C56\u0000\u0CBF\u0CD5\u0000\u0CC6\u0CC2\u0000\u0CC6\u0CC2\u0CD5\u0000\u0CC6\u0CD5\u0000"d~ +"\u0CC6\u0CD6\u0000\u0D46\u0D3E\u0000\u0D46\u0D57\u0000\u0D47\u0D3E\u0000\u0DD9\u0DCA\u0000\u0DD9\u0DCF\u0000\u0DD9"d~ +"\u0DCF\u0DCA\u0000\u0DD9\u0DDF\u0000\u0E4D\u0E32\u0000\u0EAB\u0E99\u0000\u0EAB\u0EA1\u0000\u0ECD\u0EB2\u0000\u0F0B"d~ +"\u0000\u0F40\u0FB5\u0000\u0F42\u0FB7\u0000\u0F4C\u0FB7\u0000\u0F51\u0FB7\u0000\u0F56\u0FB7\u0000\u0F5B\u0FB7\u0000"d~ +"\u0F71\u0F72\u0000\u0F71\u0F74\u0000\u0F71\u0F80\u0000\u0F90\u0FB5\u0000\u0F92\u0FB7\u0000\u0F9C\u0FB7\u0000\u0FA1"d~ +"\u0FB7\u0000\u0FA6\u0FB7\u0000\u0FAB\u0FB7\u0000\u0FB2\u0F71\u0F80\u0000\u0FB2\u0F80\u0000\u0FB3\u0F71\u0F80\u0000"d~ +"\u0FB3\u0F80\u0000\u1025\u102E\u0000\u10DC\u0000\u1100\u0000\u1100\u1161\u0000\u1101\u0000\u1102\u0000\u1102\u1161"d~ +"\u0000\u1103\u0000\u1103\u1161\u0000\u1104\u0000\u1105\u0000\u1105\u1161\u0000\u1106\u0000\u1106\u1161\u0000\u1107"d~ +"\u0000\u1107\u1161\u0000\u1108\u0000\u1109\u0000\u1109\u1161\u0000\u110A\u0000\u110B\u0000\u110B\u1161\u0000\u110B"d~ +"\u116E\u0000\u110C\u0000\u110C\u1161\u0000\u110C\u116E\u110B\u1174\u0000\u110D\u0000\u110E\u0000\u110E\u1161\u0000"d~ +"\u110E\u1161\u11B7\u1100\u1169\u0000\u110F\u0000\u110F\u1161\u0000\u1110\u0000\u1110\u1161\u0000\u1111\u0000\u1111"d~ +"\u1161\u0000\u1112\u0000\u1112\u1161\u0000\u1114\u0000\u1115\u0000\u111A\u0000\u111C\u0000\u111D\u0000\u111E\u0000"d~ +"\u1120\u0000\u1121\u0000\u1122\u0000\u1123\u0000\u1127\u0000\u1129\u0000\u112B\u0000\u112C\u0000\u112D\u0000\u112E"d~ +"\u0000\u112F\u0000\u1132\u0000\u1136\u0000\u1140\u0000\u1147\u0000\u114C\u0000\u1157\u0000\u1158\u0000\u1159\u0000"d~ +"\u1160\u0000\u1161\u0000\u1162\u0000\u1163\u0000\u1164\u0000\u1165\u0000\u1166\u0000\u1167\u0000\u1168\u0000\u1169"d~ +"\u0000\u116A\u0000\u116B\u0000\u116C\u0000\u116D\u0000\u116E\u0000\u116F\u0000\u1170\u0000\u1171\u0000\u1172\u0000"d~ +"\u1173\u0000\u1174\u0000\u1175\u0000\u1184\u0000\u1185\u0000\u1188\u0000\u1191\u0000\u1192\u0000\u1194\u0000\u119E"d~ +"\u0000\u11A1\u0000\u11AA\u0000\u11AC\u0000\u11AD\u0000\u11B0\u0000\u11B1\u0000\u11B2\u0000\u11B3\u0000\u11B4\u0000"d~ +"\u11B5\u0000\u11C7\u0000\u11C8\u0000\u11CC\u0000\u11CE\u0000\u11D3\u0000\u11D7\u0000\u11D9\u0000\u11DD\u0000\u11DF"d~ +"\u0000\u11F1\u0000\u11F2\u0000\u1B05\u1B35\u0000\u1B07\u1B35\u0000\u1B09\u1B35\u0000\u1B0B\u1B35\u0000\u1B0D\u1B35"d~ +"\u0000\u1B11\u1B35\u0000\u1B3A\u1B35\u0000\u1B3C\u1B35\u0000\u1B3E\u1B35\u0000\u1B3F\u1B35\u0000\u1B42\u1B35\u0000"d~ +"\u1D02\u0000\u1D16\u0000\u1D17\u0000\u1D1C\u0000\u1D1D\u0000\u1D25\u0000\u1D7B\u0000\u1D85\u0000\u1D91\u0000\u2010"d~ +"\u0000\u2013\u0000\u2014\u0000\u2032\u2032\u0000\u2032\u2032\u2032\u0000\u2032\u2032\u2032\u2032\u0000\u2035\u2035"d~ +"\u0000\u2035\u2035\u2035\u0000\u20A9\u0000\u2190\u0000\u2190\u0338\u0000\u2191\u0000\u2192\u0000\u2192\u0338\u0000"d~ +"\u2193\u0000\u2194\u0338\u0000\u21D0\u0338\u0000\u21D2\u0338\u0000\u21D4\u0338\u0000\u2202\u0000\u2203\u0338\u0000"d~ +"\u2207\u0000\u2208\u0338\u0000\u220B\u0338\u0000\u2211\u0000\u2212\u0000\u2223\u0338\u0000\u2225\u0338\u0000\u222B"d~ +"\u222B\u0000\u222B\u222B\u222B\u0000\u222B\u222B\u222B\u222B\u0000\u222E\u222E\u0000\u222E\u222E\u222E\u0000\u223C"d~ +"\u0338\u0000\u2243\u0338\u0000\u2245\u0338\u0000\u2248\u0338\u0000\u224D\u0338\u0000\u2261\u0338\u0000\u2264\u0338"d~ +"\u0000\u2265\u0338\u0000\u2272\u0338\u0000\u2273\u0338\u0000\u2276\u0338\u0000\u2277\u0338\u0000\u227A\u0338\u0000"d~ +"\u227B\u0338\u0000\u227C\u0338\u0000\u227D\u0338\u0000\u2282\u0338\u0000\u2283\u0338\u0000\u2286\u0338\u0000\u2287"d~ +"\u0338\u0000\u2291\u0338\u0000\u2292\u0338\u0000\u22A2\u0338\u0000\u22A8\u0338\u0000\u22A9\u0338\u0000\u22AB\u0338"d~ +"\u0000\u22B2\u0338\u0000\u22B3\u0338\u0000\u22B4\u0338\u0000\u22B5\u0338\u0000\u2502\u0000\u25A0\u0000\u25CB\u0000"d~ +"\u2985\u0000\u2986\u0000\u2ADD\u0338\u0000\u2C71\u0000\u2D61\u0000\u3001\u0000\u3002\u0000\u3008\u0000\u3009\u0000"d~ +"\u300A\u0000\u300B\u0000\u300C\u0000\u300D\u0000\u300E\u0000\u300F\u0000\u3010\u0000\u3011\u0000\u3012\u0000\u3014"d~ +"\u0000\u3014\u0053\u3015\u0000\u3014\u4E09\u3015\u0000\u3014\u4E8C\u3015\u0000\u3014\u52DD\u3015\u0000\u3014\u5B89"d~ +"\u3015\u0000\u3014\u6253\u3015\u0000\u3014\u6557\u3015\u0000\u3014\u672C\u3015\u0000\u3014\u70B9\u3015\u0000\u3014"d~ +"\u76D7\u3015\u0000\u3015\u0000\u3016\u0000\u3017\u0000\u3046\u3099\u0000\u304B\u3099\u0000\u304D\u3099\u0000\u304F"d~ +"\u3099\u0000\u3051\u3099\u0000\u3053\u3099\u0000\u3055\u3099\u0000\u3057\u3099\u0000\u3059\u3099\u0000\u305B\u3099"d~ +"\u0000\u305D\u3099\u0000\u305F\u3099\u0000\u3061\u3099\u0000\u3064\u3099\u0000\u3066\u3099\u0000\u3068\u3099\u0000"d~ +"\u306F\u3099\u0000\u306F\u309A\u0000\u3072\u3099\u0000\u3072\u309A\u0000\u3075\u3099\u0000\u3075\u309A\u0000\u3078"d~ +"\u3099\u0000\u3078\u309A\u0000\u307B\u304B\u0000\u307B\u3099\u0000\u307B\u309A\u0000\u3088\u308A\u0000\u3099\u0000"d~ +"\u309A\u0000\u309D\u3099\u0000\u30A1\u0000\u30A2\u0000\u30A2\u30CF\u309A\u30FC\u30C8\u0000\u30A2\u30EB\u30D5\u30A1"d~ +"\u0000\u30A2\u30F3\u30D8\u309A\u30A2\u0000\u30A2\u30FC\u30EB\u0000\u30A3\u0000\u30A4\u0000\u30A4\u30CB\u30F3\u30AF"d~ +"\u3099\u0000\u30A4\u30F3\u30C1\u0000\u30A5\u0000\u30A6\u0000\u30A6\u3099\u0000\u30A6\u30A9\u30F3\u0000\u30A7\u0000"d~ +"\u30A8\u0000\u30A8\u30B9\u30AF\u30FC\u30C8\u3099\u0000\u30A8\u30FC\u30AB\u30FC\u0000\u30A9\u0000\u30AA\u0000\u30AA"d~ +"\u30F3\u30B9\u0000\u30AA\u30FC\u30E0\u0000\u30AB\u0000\u30AB\u3099\u0000\u30AB\u3099\u30ED\u30F3\u0000\u30AB\u3099"d~ +"\u30F3\u30DE\u0000\u30AB\u30A4\u30EA\u0000\u30AB\u30E9\u30C3\u30C8\u0000\u30AB\u30ED\u30EA\u30FC\u0000\u30AD\u0000"d~ +"\u30AD\u3099\u0000\u30AD\u3099\u30AB\u3099\u0000\u30AD\u3099\u30CB\u30FC\u0000\u30AD\u3099\u30EB\u30BF\u3099\u30FC"d~ +"\u0000\u30AD\u30E5\u30EA\u30FC\u0000\u30AD\u30ED\u0000\u30AD\u30ED\u30AF\u3099\u30E9\u30E0\u0000\u30AD\u30ED\u30E1"d~ +"\u30FC\u30C8\u30EB\u0000\u30AD\u30ED\u30EF\u30C3\u30C8\u0000\u30AF\u0000\u30AF\u3099\u0000\u30AF\u3099\u30E9\u30E0"d~ +"\u0000\u30AF\u3099\u30E9\u30E0\u30C8\u30F3\u0000\u30AF\u30EB\u30BB\u3099\u30A4\u30ED\u0000\u30AF\u30ED\u30FC\u30CD"d~ +"\u0000\u30B1\u0000\u30B1\u3099\u0000\u30B1\u30FC\u30B9\u0000\u30B3\u0000\u30B3\u3099\u0000\u30B3\u30B3\u0000\u30B3"d~ +"\u30C8\u0000\u30B3\u30EB\u30CA\u0000\u30B3\u30FC\u30DB\u309A\u0000\u30B5\u0000\u30B5\u3099\u0000\u30B5\u30A4\u30AF"d~ +"\u30EB\u0000\u30B5\u30F3\u30C1\u30FC\u30E0\u0000\u30B7\u0000\u30B7\u3099\u0000\u30B7\u30EA\u30F3\u30AF\u3099\u0000"d~ +"\u30B9\u0000\u30B9\u3099\u0000\u30BB\u0000\u30BB\u3099\u0000\u30BB\u30F3\u30C1\u0000\u30BB\u30F3\u30C8\u0000\u30BD"d~ +"\u0000\u30BD\u3099\u0000\u30BF\u0000\u30BF\u3099\u0000\u30BF\u3099\u30FC\u30B9\u0000\u30C1\u0000\u30C1\u3099\u0000"d~ +"\u30C3\u0000\u30C4\u0000\u30C4\u3099\u0000\u30C6\u0000\u30C6\u3099\u0000\u30C6\u3099\u30B7\u0000\u30C8\u0000\u30C8"d~ +"\u3099\u0000\u30C8\u3099\u30EB\u0000\u30C8\u30F3\u0000\u30CA\u0000\u30CA\u30CE\u0000\u30CB\u0000\u30CC\u0000\u30CD"d~ +"\u0000\u30CE\u0000\u30CE\u30C3\u30C8\u0000\u30CF\u0000\u30CF\u3099\u0000\u30CF\u3099\u30FC\u30EC\u30EB\u0000\u30CF"d~ +"\u309A\u0000\u30CF\u309A\u30FC\u30BB\u30F3\u30C8\u0000\u30CF\u309A\u30FC\u30C4\u0000\u30CF\u30A4\u30C4\u0000\u30D2"d~ +"\u0000\u30D2\u3099\u0000\u30D2\u3099\u30EB\u0000\u30D2\u309A\u0000\u30D2\u309A\u30A2\u30B9\u30C8\u30EB\u0000\u30D2"d~ +"\u309A\u30AF\u30EB\u0000\u30D2\u309A\u30B3\u0000\u30D5\u0000\u30D5\u3099\u0000\u30D5\u3099\u30C3\u30B7\u30A7\u30EB"d~ +"\u0000\u30D5\u309A\u0000\u30D5\u30A1\u30E9\u30C3\u30C8\u3099\u0000\u30D5\u30A3\u30FC\u30C8\u0000\u30D5\u30E9\u30F3"d~ +"\u0000\u30D8\u0000\u30D8\u3099\u0000\u30D8\u3099\u30FC\u30BF\u0000\u30D8\u309A\u0000\u30D8\u309A\u30BD\u0000\u30D8"d~ +"\u309A\u30CB\u30D2\u0000\u30D8\u309A\u30F3\u30B9\u0000\u30D8\u309A\u30FC\u30B7\u3099\u0000\u30D8\u30AF\u30BF\u30FC"d~ +"\u30EB\u0000\u30D8\u30EB\u30C4\u0000\u30DB\u0000\u30DB\u3099\u0000\u30DB\u3099\u30EB\u30C8\u0000\u30DB\u309A\u0000"d~ +"\u30DB\u309A\u30A4\u30F3\u30C8\u0000\u30DB\u309A\u30F3\u30C8\u3099\u0000\u30DB\u30F3\u0000\u30DB\u30FC\u30EB\u0000"d~ +"\u30DB\u30FC\u30F3\u0000\u30DE\u0000\u30DE\u30A4\u30AF\u30ED\u0000\u30DE\u30A4\u30EB\u0000\u30DE\u30C3\u30CF\u0000"d~ +"\u30DE\u30EB\u30AF\u0000\u30DE\u30F3\u30B7\u30E7\u30F3\u0000\u30DF\u0000\u30DF\u30AF\u30ED\u30F3\u0000\u30DF\u30EA"d~ +"\u0000\u30DF\u30EA\u30CF\u3099\u30FC\u30EB\u0000\u30E0\u0000\u30E1\u0000\u30E1\u30AB\u3099\u0000\u30E1\u30AB\u3099"d~ +"\u30C8\u30F3\u0000\u30E1\u30FC\u30C8\u30EB\u0000\u30E2\u0000\u30E3\u0000\u30E4\u0000\u30E4\u30FC\u30C8\u3099\u0000"d~ +"\u30E4\u30FC\u30EB\u0000\u30E5\u0000\u30E6\u0000\u30E6\u30A2\u30F3\u0000\u30E7\u0000\u30E8\u0000\u30E9\u0000\u30EA"d~ +"\u0000\u30EA\u30C3\u30C8\u30EB\u0000\u30EA\u30E9\u0000\u30EB\u0000\u30EB\u30D2\u309A\u30FC\u0000\u30EB\u30FC\u30D5"d~ +"\u3099\u30EB\u0000\u30EC\u0000\u30EC\u30E0\u0000\u30EC\u30F3\u30C8\u30B1\u3099\u30F3\u0000\u30ED\u0000\u30EF\u0000"d~ +"\u30EF\u3099\u0000\u30EF\u30C3\u30C8\u0000\u30F0\u0000\u30F0\u3099\u0000\u30F1\u0000\u30F1\u3099\u0000\u30F2\u0000"d~ +"\u30F2\u3099\u0000\u30F3\u0000\u30FB\u0000\u30FC\u0000\u30FD\u3099\u0000\u349E\u0000\u34B9\u0000\u34BB\u0000\u34DF"d~ +"\u0000\u3515\u0000\u36EE\u0000\u36FC\u0000\u3781\u0000\u382F\u0000\u3862\u0000\u387C\u0000\u38C7\u0000\u38E3\u0000"d~ +"\u391C\u0000\u393A\u0000\u3A2E\u0000\u3A6C\u0000\u3AE4\u0000\u3B08\u0000\u3B19\u0000\u3B49\u0000\u3B9D\u0000\u3C18"d~ +"\u0000\u3C4E\u0000\u3D33\u0000\u3D96\u0000\u3EAC\u0000\u3EB8\u0000\u3F1B\u0000\u3FFC\u0000\u4008\u0000\u4018\u0000"d~ +"\u4039\u0000\u4046\u0000\u4096\u0000\u40E3\u0000\u412F\u0000\u4202\u0000\u4227\u0000\u42A0\u0000\u4301\u0000\u4334"d~ +"\u0000\u4359\u0000\u43D5\u0000\u43D9\u0000\u440B\u0000\u446B\u0000\u452B\u0000\u455D\u0000\u4561\u0000\u456B\u0000"d~ +"\u45D7\u0000\u45F9\u0000\u4635\u0000\u46BE\u0000\u46C7\u0000\u4995\u0000\u49E6\u0000\u4A6E\u0000\u4A76\u0000\u4AB2"d~ +"\u0000\u4B33\u0000\u4BCE\u0000\u4CCE\u0000\u4CED\u0000\u4CF8\u0000\u4D56\u0000\u4E00\u0000\u4E01\u0000\u4E03\u0000"d~ +"\u4E09\u0000\u4E0A\u0000\u4E0B\u0000\u4E0D\u0000\u4E19\u0000\u4E26\u0000\u4E28\u0000\u4E2D\u0000\u4E32\u0000\u4E36"d~ +"\u0000\u4E38\u0000\u4E39\u0000\u4E3D\u0000\u4E3F\u0000\u4E41\u0000\u4E59\u0000\u4E5D\u0000\u4E82\u0000\u4E85\u0000"d~ +"\u4E86\u0000\u4E8C\u0000\u4E94\u0000\u4EA0\u0000\u4EA4\u0000\u4EAE\u0000\u4EBA\u0000\u4EC0\u0000\u4ECC\u0000\u4EE4"d~ +"\u0000\u4EE4\u548C\u0000\u4F01\u0000\u4F11\u0000\u4F60\u0000\u4F80\u0000\u4F86\u0000\u4F8B\u0000\u4FAE\u0000\u4FBB"d~ +"\u0000\u4FBF\u0000\u5002\u0000\u502B\u0000\u507A\u0000\u5099\u0000\u50CF\u0000\u50DA\u0000\u50E7\u0000\u512A\u0000"d~ +"\u513F\u0000\u5140\u0000\u5145\u0000\u514D\u0000\u5154\u0000\u5164\u0000\u5165\u0000\u5167\u0000\u5168\u0000\u5169"d~ +"\u0000\u516B\u0000\u516D\u0000\u5177\u0000\u5180\u0000\u5182\u0000\u518D\u0000\u5192\u0000\u5195\u0000\u5196\u0000"d~ +"\u5197\u0000\u5199\u0000\u51A4\u0000\u51AB\u0000\u51AC\u0000\u51B5\u0000\u51B7\u0000\u51C9\u0000\u51CC\u0000\u51DC"d~ +"\u0000\u51DE\u0000\u51E0\u0000\u51F5\u0000\u5200\u0000\u5203\u0000\u5207\u0000\u5217\u0000\u521D\u0000\u5229\u0000"d~ +"\u523A\u0000\u523B\u0000\u5246\u0000\u524D\u0000\u5272\u0000\u5277\u0000\u5289\u0000\u529B\u0000\u52A3\u0000\u52B3"d~ +"\u0000\u52B4\u0000\u52C7\u0000\u52C9\u0000\u52D2\u0000\u52DE\u0000\u52E4\u0000\u52F5\u0000\u52F9\u0000\u52FA\u0000"d~ +"\u5305\u0000\u5306\u0000\u5315\u0000\u5317\u0000\u531A\u0000\u5338\u0000\u533B\u0000\u533F\u0000\u5341\u0000\u5344"d~ +"\u0000\u5345\u0000\u5349\u0000\u5351\u0000\u5354\u0000\u535A\u0000\u535C\u0000\u5369\u0000\u5370\u0000\u5373\u0000"d~ +"\u5375\u0000\u537D\u0000\u537F\u0000\u5382\u0000\u53B6\u0000\u53C3\u0000\u53C8\u0000\u53CA\u0000\u53CC\u0000\u53DF"d~ +"\u0000\u53E3\u0000\u53E5\u0000\u53EB\u0000\u53EF\u0000\u53F1\u0000\u53F3\u0000\u5406\u0000\u5408\u0000\u540D\u0000"d~ +"\u540F\u0000\u541D\u0000\u5438\u0000\u5439\u0000\u5442\u0000\u5448\u0000\u5468\u0000\u549E\u0000\u54A2\u0000\u54BD"d~ +"\u0000\u54F6\u0000\u5510\u0000\u554F\u0000\u5553\u0000\u5555\u0000\u5563\u0000\u5584\u0000\u5587\u0000\u5599\u0000"d~ +"\u559D\u0000\u55AB\u0000\u55B3\u0000\u55B6\u0000\u55C0\u0000\u55C2\u0000\u55E2\u0000\u5606\u0000\u5651\u0000\u5668"d~ +"\u0000\u5674\u0000\u56D7\u0000\u56DB\u0000\u56F9\u0000\u5716\u0000\u5717\u0000\u571F\u0000\u5730\u0000\u578B\u0000"d~ +"\u57CE\u0000\u57F4\u0000\u580D\u0000\u5831\u0000\u5832\u0000\u5840\u0000\u585A\u0000\u585E\u0000\u58A8\u0000\u58AC"d~ +"\u0000\u58B3\u0000\u58D8\u0000\u58DF\u0000\u58EB\u0000\u58EE\u0000\u58F0\u0000\u58F2\u0000\u58F7\u0000\u5902\u0000"d~ +"\u5906\u0000\u590A\u0000\u5915\u0000\u591A\u0000\u591C\u0000\u5922\u0000\u5927\u0000\u5927\u6B63\u0000\u5929\u0000"d~ +"\u5944\u0000\u5948\u0000\u5951\u0000\u5954\u0000\u5962\u0000\u5973\u0000\u59D8\u0000\u59EC\u0000\u5A1B\u0000\u5A27"d~ +"\u0000\u5A62\u0000\u5A66\u0000\u5AB5\u0000\u5B08\u0000\u5B28\u0000\u5B3E\u0000\u5B50\u0000\u5B57\u0000\u5B66\u0000"d~ +"\u5B80\u0000\u5B85\u0000\u5B97\u0000\u5BC3\u0000\u5BD8\u0000\u5BE7\u0000\u5BEE\u0000\u5BF3\u0000\u5BF8\u0000\u5BFF"d~ +"\u0000\u5C06\u0000\u5C0F\u0000\u5C22\u0000\u5C38\u0000\u5C3F\u0000\u5C60\u0000\u5C62\u0000\u5C64\u0000\u5C65\u0000"d~ +"\u5C6E\u0000\u5C71\u0000\u5C8D\u0000\u5CC0\u0000\u5D19\u0000\u5D43\u0000\u5D50\u0000\u5D6B\u0000\u5D6E\u0000\u5D7C"d~ +"\u0000\u5DB2\u0000\u5DBA\u0000\u5DDB\u0000\u5DE1\u0000\u5DE2\u0000\u5DE5\u0000\u5DE6\u0000\u5DF1\u0000\u5DFD\u0000"d~ +"\u5DFE\u0000\u5E28\u0000\u5E3D\u0000\u5E69\u0000\u5E72\u0000\u5E73\u6210\u0000\u5E74\u0000\u5E7A\u0000\u5E7C\u0000"d~ +"\u5E7F\u0000\u5EA6\u0000\u5EB0\u0000\u5EB3\u0000\u5EB6\u0000\u5EC9\u0000\u5ECA\u0000\u5ED2\u0000\u5ED3\u0000\u5ED9"d~ +"\u0000\u5EEC\u0000\u5EF4\u0000\u5EFE\u0000\u5F04\u0000\u5F0B\u0000\u5F13\u0000\u5F22\u0000\u5F50\u0000\u5F53\u0000"d~ +"\u5F61\u0000\u5F62\u0000\u5F69\u0000\u5F6B\u0000\u5F73\u0000\u5F8B\u0000\u5F8C\u0000\u5F97\u0000\u5F9A\u0000\u5FA9"d~ +"\u0000\u5FAD\u0000\u5FC3\u0000\u5FCD\u0000\u5FD7\u0000\u5FF5\u0000\u5FF9\u0000\u6012\u0000\u601C\u0000\u6075\u0000"d~ +"\u6081\u0000\u6094\u0000\u60C7\u0000\u60D8\u0000\u60E1\u0000\u6108\u0000\u6144\u0000\u6148\u0000\u614C\u0000\u614E"d~ +"\u0000\u6160\u0000\u6168\u0000\u617A\u0000\u618E\u0000\u6190\u0000\u61A4\u0000\u61AF\u0000\u61B2\u0000\u61DE\u0000"d~ +"\u61F2\u0000\u61F6\u0000\u6200\u0000\u6208\u0000\u6210\u0000\u621B\u0000\u622E\u0000\u6234\u0000\u6236\u0000\u624B"d~ +"\u0000\u6253\u0000\u625D\u0000\u6295\u0000\u62B1\u0000\u62C9\u0000\u62CF\u0000\u62D3\u0000\u62D4\u0000\u62FC\u0000"d~ +"\u62FE\u0000\u6307\u0000\u633D\u0000\u6350\u0000\u6355\u0000\u6368\u0000\u637B\u0000\u6383\u0000\u63A0\u0000\u63A9"d~ +"\u0000\u63C4\u0000\u63C5\u0000\u63E4\u0000\u641C\u0000\u6422\u0000\u6452\u0000\u6469\u0000\u6477\u0000\u647E\u0000"d~ +"\u649A\u0000\u649D\u0000\u64C4\u0000\u652F\u0000\u6534\u0000\u654F\u0000\u6556\u0000\u656C\u0000\u6578\u0000\u6587"d~ +"\u0000\u6597\u0000\u6599\u0000\u65A4\u0000\u65B0\u0000\u65B9\u0000\u65C5\u0000\u65E0\u0000\u65E2\u0000\u65E3\u0000"d~ +"\u65E5\u0000\u660E\u6CBB\u0000\u6613\u0000\u6620\u0000\u662D\u548C\u0000\u6649\u0000\u6674\u0000\u6688\u0000\u6691"d~ +"\u0000\u669C\u0000\u66B4\u0000\u66C6\u0000\u66F0\u0000\u66F4\u0000\u66F8\u0000\u6700\u0000\u6708\u0000\u6709\u0000"d~ +"\u6717\u0000\u671B\u0000\u6721\u0000\u6728\u0000\u674E\u0000\u6753\u0000\u6756\u0000\u675E\u0000\u677B\u0000\u6785"d~ +"\u0000\u6797\u0000\u67F3\u0000\u67FA\u0000\u6817\u0000\u681F\u0000\u682A\u0000\u682A\u5F0F\u4F1A\u793E\u0000\u6852"d~ +"\u0000\u6881\u0000\u6885\u0000\u688E\u0000\u68A8\u0000\u6914\u0000\u6942\u0000\u69A3\u0000\u69EA\u0000\u6A02\u0000"d~ +"\u6A13\u0000\u6AA8\u0000\u6AD3\u0000\u6ADB\u0000\u6B04\u0000\u6B20\u0000\u6B21\u0000\u6B54\u0000\u6B62\u0000\u6B63"d~ +"\u0000\u6B72\u0000\u6B77\u0000\u6B79\u0000\u6B9F\u0000\u6BAE\u0000\u6BB3\u0000\u6BBA\u0000\u6BBB\u0000\u6BCB\u0000"d~ +"\u6BCD\u0000\u6BD4\u0000\u6BDB\u0000\u6C0F\u0000\u6C14\u0000\u6C34\u0000\u6C4E\u0000\u6C67\u0000\u6C88\u0000\u6CBF"d~ +"\u0000\u6CCC\u0000\u6CCD\u0000\u6CE5\u0000\u6CE8\u0000\u6D16\u0000\u6D1B\u0000\u6D1E\u0000\u6D34\u0000\u6D3E\u0000"d~ +"\u6D41\u0000\u6D69\u0000\u6D6A\u0000\u6D77\u0000\u6D78\u0000\u6D85\u0000\u6DCB\u0000\u6DDA\u0000\u6DEA\u0000\u6DF9"d~ +"\u0000\u6E1A\u0000\u6E2F\u0000\u6E6E\u0000\u6E80\u0000\u6E9C\u0000\u6EBA\u0000\u6EC7\u0000\u6ECB\u0000\u6ED1\u0000"d~ +"\u6EDB\u0000\u6F0F\u0000\u6F14\u0000\u6F22\u0000\u6F23\u0000\u6F6E\u0000\u6FC6\u0000\u6FEB\u0000\u6FFE\u0000\u701B"d~ +"\u0000\u701E\u0000\u7039\u0000\u704A\u0000\u706B\u0000\u7070\u0000\u7077\u0000\u707D\u0000\u7099\u0000\u70AD\u0000"d~ +"\u70C8\u0000\u70D9\u0000\u7121\u0000\u7145\u0000\u7149\u0000\u716E\u0000\u719C\u0000\u71CE\u0000\u71D0\u0000\u7210"d~ +"\u0000\u721B\u0000\u7228\u0000\u722A\u0000\u722B\u0000\u7235\u0000\u7236\u0000\u723B\u0000\u723F\u0000\u7247\u0000"d~ +"\u7250\u0000\u7259\u0000\u725B\u0000\u7262\u0000\u7279\u0000\u7280\u0000\u7295\u0000\u72AC\u0000\u72AF\u0000\u72C0"d~ +"\u0000\u72FC\u0000\u732A\u0000\u7375\u0000\u737A\u0000\u7384\u0000\u7387\u0000\u7389\u0000\u738B\u0000\u73A5\u0000"d~ +"\u73B2\u0000\u73DE\u0000\u7406\u0000\u7409\u0000\u7422\u0000\u7447\u0000\u745C\u0000\u7469\u0000\u7471\u0000\u7485"d~ +"\u0000\u7489\u0000\u7498\u0000\u74CA\u0000\u74DC\u0000\u74E6\u0000\u7506\u0000\u7518\u0000\u751F\u0000\u7524\u0000"d~ +"\u7528\u0000\u7530\u0000\u7532\u0000\u7533\u0000\u7537\u0000\u753B\u0000\u753E\u0000\u7559\u0000\u7565\u0000\u7570"d~ +"\u0000\u758B\u0000\u7592\u0000\u75E2\u0000\u7610\u0000\u761D\u0000\u761F\u0000\u7642\u0000\u7669\u0000\u7676\u0000"d~ +"\u767D\u0000\u76AE\u0000\u76BF\u0000\u76CA\u0000\u76DB\u0000\u76E3\u0000\u76E7\u0000\u76EE\u0000\u76F4\u0000\u7701"d~ +"\u0000\u771E\u0000\u771F\u0000\u7740\u0000\u774A\u0000\u778B\u0000\u77A7\u0000\u77DB\u0000\u77E2\u0000\u77F3\u0000"d~ +"\u784E\u0000\u786B\u0000\u788C\u0000\u7891\u0000\u78CA\u0000\u78CC\u0000\u78FB\u0000\u792A\u0000\u793A\u0000\u793C"d~ +"\u0000\u793E\u0000\u7948\u0000\u7949\u0000\u7950\u0000\u7956\u0000\u795D\u0000\u795E\u0000\u7965\u0000\u797F\u0000"d~ +"\u7981\u0000\u798D\u0000\u798E\u0000\u798F\u0000\u79AE\u0000\u79B8\u0000\u79BE\u0000\u79CA\u0000\u79D8\u0000\u79EB"d~ +"\u0000\u7A1C\u0000\u7A40\u0000\u7A4A\u0000\u7A4F\u0000\u7A74\u0000\u7A7A\u0000\u7A81\u0000\u7AB1\u0000\u7ACB\u0000"d~ +"\u7AEE\u0000\u7AF9\u0000\u7B20\u0000\u7B8F\u0000\u7BC0\u0000\u7BC6\u0000\u7BC9\u0000\u7C3E\u0000\u7C60\u0000\u7C73"d~ +"\u0000\u7C7B\u0000\u7C92\u0000\u7CBE\u0000\u7CD2\u0000\u7CD6\u0000\u7CE3\u0000\u7CE7\u0000\u7CE8\u0000\u7CF8\u0000"d~ +"\u7D00\u0000\u7D10\u0000\u7D22\u0000\u7D2F\u0000\u7D42\u0000\u7D5B\u0000\u7D63\u0000\u7DA0\u0000\u7DBE\u0000\u7DC7"d~ +"\u0000\u7DF4\u0000\u7E02\u0000\u7E09\u0000\u7E37\u0000\u7E41\u0000\u7E45\u0000\u7F36\u0000\u7F3E\u0000\u7F51\u0000"d~ +"\u7F72\u0000\u7F79\u0000\u7F7A\u0000\u7F85\u0000\u7F8A\u0000\u7F95\u0000\u7F9A\u0000\u7FBD\u0000\u7FFA\u0000\u8001"d~ +"\u0000\u8005\u0000\u800C\u0000\u8012\u0000\u8033\u0000\u8046\u0000\u8060\u0000\u806F\u0000\u8070\u0000\u807E\u0000"d~ +"\u807F\u0000\u8089\u0000\u808B\u0000\u80AD\u0000\u80B2\u0000\u8103\u0000\u813E\u0000\u81D8\u0000\u81E3\u0000\u81E8"d~ +"\u0000\u81EA\u0000\u81ED\u0000\u81F3\u0000\u81FC\u0000\u8201\u0000\u8204\u0000\u820C\u0000\u8218\u0000\u821B\u0000"d~ +"\u821F\u0000\u826E\u0000\u826F\u0000\u8272\u0000\u8278\u0000\u8279\u0000\u828B\u0000\u8291\u0000\u829D\u0000\u82B1"d~ +"\u0000\u82B3\u0000\u82BD\u0000\u82E5\u0000\u82E6\u0000\u831D\u0000\u8323\u0000\u8336\u0000\u8352\u0000\u8353\u0000"d~ +"\u8363\u0000\u83AD\u0000\u83BD\u0000\u83C9\u0000\u83CA\u0000\u83CC\u0000\u83DC\u0000\u83E7\u0000\u83EF\u0000\u83F1"d~ +"\u0000\u843D\u0000\u8449\u0000\u8457\u0000\u84EE\u0000\u84F1\u0000\u84F3\u0000\u84FC\u0000\u8516\u0000\u8564\u0000"d~ +"\u85CD\u0000\u85FA\u0000\u8606\u0000\u8612\u0000\u862D\u0000\u863F\u0000\u864D\u0000\u8650\u0000\u865C\u0000\u8667"d~ +"\u0000\u8669\u0000\u866B\u0000\u8688\u0000\u86A9\u0000\u86E2\u0000\u870E\u0000\u8728\u0000\u876B\u0000\u8779\u0000"d~ +"\u8786\u0000\u87BA\u0000\u87E1\u0000\u8801\u0000\u881F\u0000\u8840\u0000\u884C\u0000\u8860\u0000\u8863\u0000\u88C2"d~ +"\u0000\u88CF\u0000\u88D7\u0000\u88DE\u0000\u88E1\u0000\u88F8\u0000\u88FA\u0000\u8910\u0000\u8941\u0000\u8964\u0000"d~ +"\u897E\u0000\u8986\u0000\u898B\u0000\u8996\u0000\u89D2\u0000\u89E3\u0000\u8A00\u0000\u8AA0\u0000\u8AAA\u0000\u8ABF"d~ +"\u0000\u8ACB\u0000\u8AD2\u0000\u8AD6\u0000\u8AED\u0000\u8AF8\u0000\u8AFE\u0000\u8B01\u0000\u8B39\u0000\u8B58\u0000"d~ +"\u8B80\u0000\u8B8A\u0000\u8C37\u0000\u8C46\u0000\u8C48\u0000\u8C55\u0000\u8C78\u0000\u8C9D\u0000\u8CA1\u0000\u8CA9"d~ +"\u0000\u8CAB\u0000\u8CC1\u0000\u8CC2\u0000\u8CC7\u0000\u8CC8\u0000\u8CD3\u0000\u8D08\u0000\u8D1B\u0000\u8D64\u0000"d~ +"\u8D70\u0000\u8D77\u0000\u8DB3\u0000\u8DBC\u0000\u8DCB\u0000\u8DEF\u0000\u8DF0\u0000\u8EAB\u0000\u8ECA\u0000\u8ED4"d~ +"\u0000\u8F26\u0000\u8F2A\u0000\u8F38\u0000\u8F3B\u0000\u8F62\u0000\u8F9B\u0000\u8F9E\u0000\u8FB0\u0000\u8FB5\u0000"d~ +"\u8FB6\u0000\u9023\u0000\u9038\u0000\u904A\u0000\u9069\u0000\u9072\u0000\u907C\u0000\u908F\u0000\u9091\u0000\u9094"d~ +"\u0000\u90CE\u0000\u90DE\u0000\u90F1\u0000\u90FD\u0000\u9111\u0000\u911B\u0000\u9149\u0000\u914D\u0000\u916A\u0000"d~ +"\u9199\u0000\u91B4\u0000\u91C6\u0000\u91CC\u0000\u91CF\u0000\u91D1\u0000\u9234\u0000\u9238\u0000\u9276\u0000\u927C"d~ +"\u0000\u92D7\u0000\u92D8\u0000\u9304\u0000\u934A\u0000\u93F9\u0000\u9415\u0000\u9577\u0000\u9580\u0000\u958B\u0000"d~ +"\u95AD\u0000\u95B7\u0000\u961C\u0000\u962E\u0000\u964B\u0000\u964D\u0000\u9675\u0000\u9678\u0000\u967C\u0000\u9686"d~ +"\u0000\u96A3\u0000\u96B6\u0000\u96B7\u0000\u96B8\u0000\u96B9\u0000\u96C3\u0000\u96E2\u0000\u96E3\u0000\u96E8\u0000"d~ +"\u96F6\u0000\u96F7\u0000\u9723\u0000\u9732\u0000\u9748\u0000\u9751\u0000\u9756\u0000\u975E\u0000\u9762\u0000\u9769"d~ +"\u0000\u97CB\u0000\u97DB\u0000\u97E0\u0000\u97ED\u0000\u97F3\u0000\u97FF\u0000\u9801\u0000\u9805\u0000\u980B\u0000"d~ +"\u9818\u0000\u9829\u0000\u983B\u0000\u985E\u0000\u98A8\u0000\u98DB\u0000\u98DF\u0000\u98E2\u0000\u98EF\u0000\u98FC"d~ +"\u0000\u9928\u0000\u9929\u0000\u9996\u0000\u9999\u0000\u99A7\u0000\u99AC\u0000\u99C2\u0000\u99F1\u0000\u99FE\u0000"d~ +"\u9A6A\u0000\u9AA8\u0000\u9AD8\u0000\u9ADF\u0000\u9B12\u0000\u9B25\u0000\u9B2F\u0000\u9B32\u0000\u9B3C\u0000\u9B5A"d~ +"\u0000\u9B6F\u0000\u9C40\u0000\u9C57\u0000\u9CE5\u0000\u9CFD\u0000\u9D67\u0000\u9DB4\u0000\u9DFA\u0000\u9E1E\u0000"d~ +"\u9E75\u0000\u9E7F\u0000\u9E97\u0000\u9E9F\u0000\u9EA5\u0000\u9EBB\u0000\u9EC3\u0000\u9ECD\u0000\u9ECE\u0000\u9ED1"d~ +"\u0000\u9EF9\u0000\u9EFD\u0000\u9EFE\u0000\u9F05\u0000\u9F0E\u0000\u9F0F\u0000\u9F13\u0000\u9F16\u0000\u9F20\u0000"d~ +"\u9F3B\u0000\u9F43\u0000\u9F4A\u0000\u9F52\u0000\u9F8D\u0000\u9F8E\u0000\u9F9C\u0000\u9F9F\u0000\u9FA0\u0000\uA651"d~ +"\u0000\uA689\u0000\uA727\u0000\uA76F\u0000\uA78E\u0000\uAB37\u0000\uAB52\u0000\uAB66\u0000\uAB67\u0000\U000105D2"d~ +"\u0307\u0000\U000105DA\u0307\u0000\U00011099\U000110BA\u0000\U0001109B\U000110BA\u0000\U000110A5\U000110BA\u0000"d~ +"\U00011131\U00011127\u0000\U00011132\U00011127\u0000\U00011347\U0001133E\u0000\U00011347\U00011357\u0000\U00011382"d~ +"\U000113C9\u0000\U00011384\U000113BB\u0000\U0001138B\U000113C2\u0000\U00011390\U000113C9\u0000\U000113C2\U000113B8"d~ +"\u0000\U000113C2\U000113C2\u0000\U000113C2\U000113C9\u0000\U000114B9\U000114B0\u0000\U000114B9\U000114BA\u0000"d~ +"\U000114B9\U000114BD\u0000\U000115B8\U000115AF\u0000\U000115B9\U000115AF\u0000\U00011935\U00011930\u0000\U0001611E"d~ +"\U0001611E\u0000\U0001611E\U0001611E\U0001611F\u0000\U0001611E\U0001611E\U00016120\u0000\U0001611E\U0001611F\u0000"d~ +"\U0001611E\U00016120\u0000\U0001611E\U00016129\u0000\U0001611E\U00016129\U0001611F\u0000\U00016129\U0001611F\u0000"d~ +"\U00016D63\U00016D67\u0000\U00016D63\U00016D67\U00016D67\u0000\U00016D67\U00016D67\u0000\U0001D157\U0001D165\u0000"d~ +"\U0001D158\U0001D165\u0000\U0001D158\U0001D165\U0001D16E\u0000\U0001D158\U0001D165\U0001D16F\u0000\U0001D158\U0001D165"d~ +"\U0001D170\u0000\U0001D158\U0001D165\U0001D171\u0000\U0001D158\U0001D165\U0001D172\u0000\U0001D1B9\U0001D165\u0000"d~ +"\U0001D1B9\U0001D165\U0001D16E\u0000\U0001D1B9\U0001D165\U0001D16F\u0000\U0001D1BA\U0001D165\u0000\U0001D1BA\U0001D165"d~ +"\U0001D16E\u0000\U0001D1BA\U0001D165\U0001D16F\u0000\U0001DF04\u0000\U0001DF05\u0000\U0001DF06\u0000\U0001DF08"d~ +"\u0000\U0001DF0A\u0000\U0001DF1E\u0000\U00020122\u0000\U0002051C\u0000\U00020525\u0000\U0002054B\u0000\U0002063A"d~ +"\u0000\U00020804\u0000\U000208DE\u0000\U00020A2C\u0000\U00020B63\u0000\U000214E4\u0000\U000216A8\u0000\U000216EA"d~ +"\u0000\U000219C8\u0000\U00021B18\u0000\U00021D0B\u0000\U00021DE4\u0000\U00021DE6\u0000\U00022183\u0000\U0002219F"d~ +"\u0000\U00022331\u0000\U000226D4\u0000\U00022844\u0000\U0002284A\u0000\U00022B0C\u0000\U00022BF1\u0000\U0002300A"d~ +"\u0000\U000232B8\u0000\U0002335F\u0000\U00023393\u0000\U0002339C\u0000\U000233C3\u0000\U000233D5\u0000\U0002346D"d~ +"\u0000\U000236A3\u0000\U000238A7\u0000\U00023A8D\u0000\U00023AFA\u0000\U00023CBC\u0000\U00023D1E\u0000\U00023ED1"d~ +"\u0000\U00023F5E\u0000\U00023F8E\u0000\U00024263\u0000\U000242EE\u0000\U000243AB\u0000\U00024608\u0000\U00024735"d~ +"\u0000\U00024814\u0000\U00024C36\u0000\U00024C92\u0000\U00024FA1\u0000\U00024FB8\u0000\U00025044\u0000\U000250F2"d~ +"\u0000\U000250F3\u0000\U00025119\u0000\U00025133\u0000\U00025249\u0000\U0002541D\u0000\U00025626\u0000\U0002569A"d~ +"\u0000\U000256C5\u0000\U0002597C\u0000\U00025AA7\u0000\U00025BAB\u0000\U00025C80\u0000\U00025CD0\u0000\U00025F86"d~ +"\u0000\U000261DA\u0000\U00026228\u0000\U00026247\u0000\U000262D9\u0000\U0002633E\u0000\U000264DA\u0000\U00026523"d~ +"\u0000\U000265A8\u0000\U000267A7\u0000\U000267B5\u0000\U00026B3C\u0000\U00026C36\u0000\U00026CD5\u0000\U00026D6B"d~ +"\u0000\U00026F2C\u0000\U00026FB1\u0000\U000270D2\u0000\U000273CA\u0000\U00027667\u0000\U000278AE\u0000\U00027966"d~ +"\u0000\U00027CA8\u0000\U00027ED3\u0000\U00027F2F\u0000\U000285D2\u0000\U000285ED\u0000\U0002872E\u0000\U00028BFA"d~ +"\u0000\U00028D77\u0000\U00029145\u0000\U000291DF\u0000\U0002921A\u0000\U0002940A\u0000\U00029496\u0000\U000295B6"d~ +"\u0000\U00029B30\u0000\U0002A0CE\u0000\U0002A105\u0000\U0002A20E\u0000\U0002A291\u0000\U0002A392\u0000\U0002A600"d~ +"\u0000"d; +return t[]; } } @@ -34,15 +1684,1665 @@ _IDCA decompCompatTable() @safe pure nothrow { static _IDCA t = [ 0x0, 0x20, 0 static if (size_t.sizeof == 8) { -//23488 bytes -enum compatMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)([ 0x0, 0x20, 0x2a0], [ 0x100, 0xa00, 0x2360], [ 0x402030202020100, 0x706020202020205, 0x802020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0xa000900080000, 0xc000b, 0xf000e000d0000, 0x11001000000000, 0x15001400130012, 0x19001800170016, 0x1b001a00000000, 0x0, 0x1c, 0x1e0000001d0000, 0x1f00000000, 0x0, 0x0, 0x0, 0x0, 0x2100200000, 0x2200000000, 0x2400230000, 0x0, 0x2500000000, 0x2700000026, 0x2800000000, 0x2900000000, 0x2a00000000, 0x2b00000000, 0x2c0000, 0x2e002d0000, 0x3100300000002f, 0x330032, 0x340000, 0x35000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3800370036, 0x0, 0x0, 0x0, 0x3b003a00390000, 0x3d003c, 0x410040003f003e, 0x45004400430042, 0x49004800470046, 0x4d004c004b004a, 0x510050004f004e, 0x530052, 0x57005600550054, 0x5a00590058, 0x5e005d005c005b, 0x6100000060005f, 0x620000, 0x0, 0x63000000000000, 0x67006600650064, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x69000000000068, 0x6a00000000, 0x0, 0x0, 0x6b000000000000, 0x0, 0x6c000000000000, 0x0, 0x0, 0x6e00000000006d, 0x7200710070006f, 0x7500740073, 0x79007800770076, 0x7d007c007b007a, 0x80007f007e0000, 0x81, 0x85008400830082, 0x89008800870086, 0x8d008c008b008a, 0x910090008f008e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92, 0x93000000000000, 0x94000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x96009500000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9a009900980097, 0x9e009d009c009b, 0xa200a100a0009f, 0xa500a400a3, 0xa900a800a700a6, 0xad00ac00ab00aa, 0xb100b000af00ae, 0xb500b400b300b2, 0xb900b800b700b6, 0xbd00bc00bb00ba, 0xc100c000bf00be, 0xc500c400c300c2, 0xc900c800c700c6, 0xcd00cc00cb00ca, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf00ce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd100d0, 0xd20000, 0x0, 0x0, 0x0, 0xd300000000, 0x0, 0x0, 0xd40000, 0x0, 0xd50000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd60000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd800d700000000, 0xda00d90000, 0x0, 0x0, 0x0, 0x0, 0xde00dd00dc00db, 0xe200e100e000df, 0xe600e500e400e3, 0xe800dc00db00e7, 0xeb00ea00e900de, 0xee00ed00ec00e2, 0xf200f100f000ef, 0xf600f500f400f3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf900f800f70000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfd00fc00fb00fa, 0xff00fe, 0x0, 0x0, 0x0, 0x0, 0x103010201010100, 0x104, 0x10701060105, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x108000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10c010b010a0109, 0x110010f010e010d, 0x114011301120111, 0x118011701160115, 0x119, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x69200000015, 0x9000000000000, 0x30f034300000000, 0x120f0003, 0x78a03140048, 0x49403c603ce, 0x58605730570056d, 0x5f8000005b005a6, 0x6580631062e062b, 0x6f906ea06e706e4, 0x7ac07a907920000, 0x7e607c207af, 0x8ba08b708b40000, 0x96208ce, 0x9c509b209af09ac, 0xa4a000009ef09e5, 0xab60a8f0a8c0a89, 0xb580b4c0b490b46, 0xc610c5e0c440000, 0xc9b0c770c64, 0xd710d6e0d6b0000, 0xe1e00000e0f0d85, 0x9cb058c09c80589, 0xa3e05ec0a0d05ce, 0xa4405f20a4105ef, 0xa71061a0a4705f5, 0xaa5064700000000, 0xab306550ab00652, 0xabc065e0ad30675, 0xb0406a00afe069a, 0xb0d06a90b0706a3, 0xb1906ba, 0xb5206f00b4f06ed, 0xb6e070f0b5506f3, 0xb3a06d8000006f6, 0xbb1072e0b760717, 0x7500bcf07430000, 0x7400bd207460bdc, 0x78f000000000bcc, 0x7980c50079e0c41, 0xf300c4a, 0xc9107dc0c8607d1, 0xca507f0, 0xd20085b0d0a0845, 0xd2e086f0d10084b, 0xd4c088d0d350876, 0xd6008a90d3b087c, 0xd5708a0, 0xd7b08c40d7408bd, 0xd9b08e40d8208cb, 0xdc709100d9e08e7, 0xe1209650dec0942, 0x9820e2c097c0971, 0x8430614060d0e32, 0xcb107fc, 0x0, 0x0, 0x8f3000000000000, 0xdaa, 0x0, 0x0, 0x0, 0x0, 0x7360a6a0613060c, 0x78607830bbc073d, 0x70309f605b70c35, 0x8ea0ca807f30b62, 0x8d50d9008d90da1, 0x8d10d9408dd0d8c, 0x9e805a900000d88, 0xe680e5d09e105a2, 0xb0a06a600000000, 0xccf081a0bab0728, 0xf070e820cd2081d, 0xa67061006090b79, 0xafb0697, 0x9f205b30c3e078c, 0xe6f0e600e650e5a, 0x9fc05bd09f905ba, 0xac206640abf0661, 0xb6807090b650706, 0xcae07f90cab07f6, 0xd1608510d13084e, 0xda708f00da408ed, 0xd5d08a60d49088a, 0xb2206c300000000, 0x0, 0x9de059f00000000, 0xc9e07e90acc066e, 0xc9407df0c7e07c9, 0xe18096b0c9707e2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa14073e0eb70b10, 0xde40ee90ee10edd, 0x695, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4b00240012000f, 0x270006, 0xb4408430a2b0eb1, 0xf0a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b00000004001a, 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2e, 0x5400000000, 0x54600000000, 0x0, 0x7410f45001c0003, 0x10110fc00fa0, 0x109910730000104a, 0x11e2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x107c101a00000000, 0x11d21176115210ec, 0x1270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x126911db00000000, 0x12a812601232, 0x1073106e11cb1147, 0x124b1299107c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1255124d120b, 0x114d100a, 0x106a0000, 0x0, 0x130a00001313130d, 0x1301000000000000, 0x0, 0x1334131f132b, 0x0, 0x0, 0x13250000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13790000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x135400001361135b, 0x13c6000000000000, 0x0, 0x139c13731381, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13d013cd00000000, 0x0, 0x0, 0x136613160000, 0x0, 0x0, 0x0, 0x134b130713481304, 0x135e131000000000, 0x13e213dd00000000, 0x136e131c13691319, 0x1376132200000000, 0x138c132e137c1328, 0x13ea13e500000000, 0x1399133113bd1343, 0x13a2133a139f1337, 0x13ad133d, 0x13b61340, 0x0, 0x0, 0x13ed000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1494149100000000, 0x18751497183a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1906183d149a0000, 0x18bc, 0x0, 0x18fd00001918, 0x0, 0x0, 0x0, 0x1915000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x192d0000, 0x0, 0x19360000, 0x1939, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19241921191e191b, 0x19331930192a1927, 0x0, 0x0, 0x1945000000000000, 0x1948, 0x0, 0x0, 0x0, 0x19420000193f193c, 0x0, 0x0, 0x0, 0x0, 0x1957000000000000, 0x195a00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1951194e194b0000, 0x195400000000, 0x0, 0x0, 0x1963000000001966, 0x1969, 0x0, 0x0, 0x0, 0x1960195d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x196c, 0x0, 0x0, 0x0, 0x0, 0x1975196f00000000, 0x1972, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1978, 0x0, 0x0, 0x0, 0x0, 0x0, 0x197b, 0x1985000000000000, 0x1981197e00001988, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1991198b00000000, 0x198e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x199400000000, 0x199e199a1997, 0x0, 0x0, 0x0, 0x0, 0x19a1000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19aa000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19a719a4, 0x0, 0x0, 0x0, 0x19ad, 0x0, 0x0, 0x0, 0x0, 0x19b2000000000000, 0x0, 0x0, 0x19b50000, 0x19b800000000, 0x19bb000000000000, 0x0, 0x19be, 0x0, 0x0, 0x19af0000, 0x0, 0x19c1000000000000, 0x19dc19e019c40000, 0x19e319e7, 0x0, 0x19c70000, 0x0, 0x0, 0x0, 0x19cd000000000000, 0x0, 0x0, 0x19d00000, 0x19d300000000, 0x19d6000000000000, 0x0, 0x19d9, 0x0, 0x0, 0x19ca0000, 0x0, 0x0, 0x19ea00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19ed, 0x0, 0x1ae300000000, 0x1ae900001ae6, 0x1aef00001aec, 0x1af200000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1af5000000000000, 0x1af80000, 0x1b0100001afe1afb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5d50e580568, 0x6870e7c062905e6, 0x71a060706cf06ac, 0x78107230734, 0x76d06af0e8b07a7, 0x6920773056b0890, 0x93a1b040e910e8f, 0xea30ea10a800a31, 0xb7c000006020ea5, 0xe97078a0e7805d3, 0xba60cd61b081b06, 0x86d0ec91b0c0a27, 0x114b114911471b0e, 0xa140ae3129b1299, 0x11491147086d0a27, 0x129b1299124d, 0x0, 0x0, 0x0, 0x1388, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe93000000000000, 0xea50e6b0e9909a3, 0xeb50ead0ea90adc, 0x1b100ebf0ebd0ebb, 0xf161b120ec50f14, 0xed10ecf0ecb0ecd, 0xeeb0edb0ed50ed3, 0xef50ef30e800eed, 0x6110ef90ef71b0a, 0x11cb0f050f030f01, 0xa1605da0a0a05cb, 0xa1c05e00a1905dd, 0xa6e06170a4d05fb, 0xa7d06260a74061d, 0xa7a06230a770620, 0xaac064e0aa8064a, 0xad9067b0ad60678, 0xaf206840acf0671, 0xb1c06bd0b01069d, 0xb1f06c00b2506c6, 0xb2b06cc0b2806c9, 0xb5b06fc0b710712, 0xbae072b0ba80725, 0xbd507490bb40731, 0xbe207560bd8074c, 0xc1507750bdf0753, 0xc1b077b0c180778, 0xc4d079b0c470795, 0xc5307a10c5607a4, 0xc8207cd0c7a07c5, 0xc8d07d80c8907d4, 0xcf2083b0cef0838, 0xd1908540d0d0848, 0xd23085e0d1c0857, 0xd4208830d380879, 0xd3e087f0d310872, 0xd51089d0d450886, 0xd6608af0d5a08a3, 0xdc4090d0d6308ac, 0xdca09130dcd0916, 0xd7e08c70d7708c0, 0xde1092a0dde0927, 0xde9093f0de6093c, 0xdef09450df20948, 0xe0409570df8094b, 0xe1b096e0e07095a, 0xe3809880e2f097f, 0xd540b2e0e3b098b, 0xd3809a90e240df5, 0x0, 0x9ec05ad09ff05c0, 0x9b5057609b9057a, 0x9bd057e09c10582, 0x9d205930a0205c3, 0x9da059b09ce058f, 0xa0605c709d60597, 0xab9065b0ac50667, 0xa9606380aa20644, 0xa9e06400a920634, 0xac8066a0a9a063c, 0xb6b070c0b5f0700, 0xca207ed0cc80813, 0xc6707b20c6b07b6, 0xc6f07ba0c7307be, 0xcb808030ccb0816, 0xcc0080b0cb407ff, 0xcc4080f0cbc0807, 0xd9808e10dc1090a, 0xdad08f60db108fa, 0xdb508fe0db90902, 0xe0c095f0dbd0906, 0xe2109740e270977, 0xe150968, 0x0, 0x111e10fc111b10f9, 0x1130110e11271105, 0xf730f510f700f4e, 0xf850f630f7c0f5a, 0x1163115811601155, 0x1167115c, 0xfb10fa60fae0fa3, 0xfb50faa, 0x11a21180119f117d, 0x11b4119211ab1189, 0xfe80fc60fe50fc3, 0xffa0fd80ff10fcf, 0x11fc11ed11f911ea, 0x120411f5120011f1, 0x102f1020102c101d, 0x1037102810331024, 0x1243123812401235, 0x1247123c, 0x105b10501058104d, 0x105f1054, 0x128a127b12871278, 0x12921283128e127f, 0x10820000107f0000, 0x108a000010860000, 0x12d412b212d112af, 0x12e612c412dd12bb, 0x10c1109f10be109c, 0x10d310b110ca10a8, 0x1152114f10ec10e5, 0x11d211cf1176116f, 0x1260125d1232122f, 0x12a812a1, 0x1122110011391117, 0x11341112112b1109, 0xf770f550f8e0f6c, 0xf890f670f800f5e, 0x11a6118411bd119b, 0x11b8119611af118d, 0xfec0fca10030fe1, 0xffe0fdc0ff50fd3, 0x12d812b612ef12cd, 0x12ea12c812e112bf, 0x10c510a310dc10ba, 0x10d710b510ce10ac, 0x114410e810f310f6, 0x1140113d000010ef, 0xf450f420f480f4b, 0x2a11cd002a0f92, 0x11c8117200200051, 0x11c411c100001179, 0xfc00fbd0fa00f9d, 0x350031002d1007, 0x11e211de11d511d8, 0x11e6120800000000, 0x1011100e10141017, 0x440040003c0000, 0x1270126c12631266, 0x127412961252124f, 0x1073107010761079, 0x998001c00181067, 0x12fa12a400000000, 0x12f612f3000012ab, 0x10991096104a1047, 0x39000310e0, 0x1000100010001, 0x1000100010001, 0x100010001, 0x0, 0x1b160000, 0x4e000000000000, 0x0, 0x0, 0x0, 0x2ff02fc02fa, 0x0, 0x1000000000000, 0x1b1c000000000000, 0x1b2b1b2800001b1f, 0x0, 0xc0000008f, 0x0, 0x563000000000000, 0x920560, 0x0, 0x0, 0x1b23000000000000, 0x0, 0x1000000000000, 0x0, 0x0, 0x0, 0x0, 0xae30305, 0x392038303740365, 0x1b5a02f403b003a1, 0xb3e00a500a10544, 0x30f034303140305, 0x392038303740365, 0x1b5a02f403b003a1, 0xa500a10544, 0xb44078a0a800692, 0xa2b0b7c0b100ea1, 0x8430cd60b3e05d3, 0xba6, 0x0, 0x0, 0x842, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe5005e309a509a1, 0xe7e0a250a210000, 0x6ac06020e530000, 0xe740b1006ac06ac, 0xa2b073406cf06cf, 0x78907810000, 0x76d083e06af0000, 0x76d076d, 0x89a08920866, 0x77f0000060a, 0x5b0071a0000060a, 0xa80000005e305d5, 0x7230000067e0629, 0x1415140d13ff078a, 0x68000000ae3141a, 0x10630f971149124b, 0x1b58, 0xa800a3105e60000, 0x73e0ae3, 0x0, 0x3ca03c103e203da, 0x498045903d20455, 0x3de04e703d604cf, 0x3be051104eb049c, 0x6de06d406d106cf, 0x922091e091b06b2, 0x9530950068206e1, 0x72305e605e30734, 0xb400b360b330ae3, 0xdd90dd50dd2086d, 0xe000dfd0b440b43, 0x5d30a3109a30a2b, 0x0, 0x0, 0x30d0000, 0x0, 0x0, 0x0, 0x1b3a1b3300000000, 0x0, 0x0, 0x0, 0x0, 0x1b3f00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b451b481b420000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b4d, 0x1b520000, 0x1b55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b5f00001b5c, 0x0, 0x1b6e00001b651b62, 0x1b71, 0x0, 0x0, 0x0, 0x1b750000, 0x1b7b000000001b78, 0x1b7e0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b8400000556, 0x0, 0x0, 0x55b054a1b810000, 0x1b8a1b87, 0x1b901b8d, 0x1b961b93, 0x0, 0x1b9c1b99, 0x1ba81ba5, 0x1bae1bab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bc01bbd1bba1bb7, 0x0, 0x0, 0x0, 0x0, 0x1bb41bb11ba21b9f, 0x0, 0x1bc61bc300000000, 0x1bcc1bc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1be61be40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x365030f03430314, 0x3a1039203830374, 0x342032f031c03b0, 0x382037303640355, 0x3f703af03a00391, 0xe600e200d900a3, 0xf600f200ee00ea, 0xb100ac00a700fa, 0xc500c000bb00b6, 0xdd00d400cf00ca, 0x368035903460319, 0x3a4039503860377, 0x3450332031f03b3, 0x385037603670358, 0x3fa03b203a30394, 0x172016e016a0166, 0x182017e017a0176, 0x192018e018a0186, 0x1a2019e019a0196, 0x1b201ae01aa01a6, 0x1c201be01ba01b6, 0x5d5056801ca01c6, 0x67e062905e605e3, 0x60706cf06ac0687, 0x78107230734071a, 0x76d083e06af07a7, 0x6b2056b08900861, 0x60a095d06820773, 0xa3109a3093a0692, 0xb1006020adc0a80, 0xa2b0b7c073e0ae3, 0xcd6078a0b3e05d3, 0xba608430a1405d8, 0xb440de4086d0a27, 0x30506110695, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x552054f0542, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b2073e, 0x0, 0x0, 0x0, 0x1bde000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x232e000000000000, 0x0, 0x0, 0x0, 0x0, 0x2764000000000000, 0x0, 0x0, 0x0, 0x1fb81fb01faa1f98, 0x1fca1fc61fc21fbc, 0x201120091ffd1fd0, 0x2039202920212019, 0x206b2057203d203b, 0x207f207920772073, 0x209d209b208f208d, 0x210120f720a920a1, 0x2131212f212b2121, 0x21662160214a2139, 0x2180217e217c2176, 0x21aa21a4218e218c, 0x21c121ba21b221ae, 0x21e121dd21db21c5, 0x21f321eb21e721e3, 0x22492247223d2201, 0x22972295228b2289, 0x32522a3229f229b, 0x231222d5032922c3, 0x232c232623202318, 0x2336233423322330, 0x23be23b823942338, 0x23c823c423c223c0, 0x23e623e223d423ca, 0x240e240c24082406, 0x2428242624142412, 0x243c243a24382436, 0x245c245a24582446, 0x24a02490248e246e, 0x24ce24bc24ac24a8, 0x250424fe24f424f0, 0x2510250e250c2508, 0x2530252c251e251c, 0x2540253c25362534, 0x254a254825442542, 0x25c025be25a4259a, 0x25e225de25da25c4, 0x260a2606260425e6, 0x26262624260e260c, 0x264426362634262a, 0x266c265c264a2648, 0x2692267c26782676, 0x26b426ae269c2694, 0x26ce26cc26c826bc, 0x26da26d826d226d0, 0x26f026ee26ec26de, 0x270c270226fe26fc, 0x271627142710270e, 0x2724271c271a2718, 0x273a273827322730, 0x27442742273e273c, 0x27542750274c2746, 0x275e275c275a2756, 0x27662762, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1bf800000000, 0x20832081207f, 0x0, 0x0, 0x0, 0x0, 0x1c3000001c2d, 0x1c3600001c33, 0x1c3c00001c39, 0x1c4200001c3f, 0x1c4800001c45, 0x1c4e00001c4b, 0x1c5400001c510000, 0x1c570000, 0x0, 0x1c6000001c5d1c5a, 0x1c691c6600001c63, 0x1c6f1c6c0000, 0x1c781c75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c2a, 0x87000000000000, 0x1c7b1c820000008a, 0x0, 0x0, 0x0, 0x1cf200001cd5, 0x1d4100001ca5, 0x1d5e00001d4a, 0x1d7900001d6e, 0x1d8b00001d7e, 0x1d9a00001d90, 0x1da600001da10000, 0x1cbf0000, 0x0, 0x1dea00001dd51dcc, 0x1e101e0600001df1, 0x1e2d1e250000, 0x1d591e50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ef3000000001cb0, 0x1f061f011efc, 0x1d501f0f00000000, 0x0, 0x0, 0x0, 0x0, 0x1abb19f419ef0000, 0x19fb1abf1abd19f6, 0x1ac31ac11a021a00, 0x1acb1ac91ac71ac5, 0x1a111a0c1a071a51, 0x1a1a1a181a131a5b, 0x1a391a2e1a2c1a22, 0x19f21a481a431a3e, 0x1a891a871a851a83, 0x1a371a8f1a8d1a8b, 0x1a991a971a951a93, 0x1aa11a9f1a9d1a20, 0x1aa91a2a1aa51aa3, 0x1acd1a4f1a4d1a7f, 0x1ad51ad31ad11acf, 0x1adb1a531ad91ad7, 0x1a591a571a551add, 0x1a631a611a5f1a5d, 0x1a6b1a691a671a65, 0x1a731a711a6f1a6d, 0x1ae11adf1a771a75, 0x1aab1a7d1a7b1a79, 0x1ab31ab11aaf1aad, 0x1ab91ab71ab5, 0x1fc61f9800000000, 0x1fac1fa020f91f9e, 0x1fa61fbc24161fa2, 0x1fd02103213e1f9a, 0x1e901e001d701ce, 0x20d020401fb01f2, 0x245023c02330225, 0x1db01d20257024e, 0x1ff01f601ed01e4, 0x237022902110208, 0x25b025202490240, 0x21e0216022e, 0x2a0026802700260, 0x284026402880274, 0x2c402b00290026c, 0x2a402ec02b802c0, 0x2d002b402bc02ac, 0x2d402e402c80298, 0x2a8029c0278028c, 0x29402e8027c02cc, 0x2e002dc028002d8, 0x24b0229521c320d3, 0x0, 0x0, 0x41c041104060831, 0x440043904320427, 0x475046e044e0447, 0x4850482047f047c, 0x1a0219fb19f619ef, 0x1a1a1a131a0c1a07, 0x1a3e1a391a2e1a22, 0x19f819f11a481a43, 0x1a0e1a091a0419fd, 0x1a301a241a1c1a15, 0x1a4a1a451a401a3b, 0x1a1f1a271a33, 0x20f91f9e1fc61f98, 0x20111f9c20131fc8, 0x23940329207f1fbe, 0x2101267c22d52338, 0x22f222cd22ed0325, 0x247c261023ce20b9, 0x214a241a2494205d, 0x234820911ffb2654, 0x213c20251fdd26e0, 0x21ac1fa21fac1fa0, 0x2164216a207b20b3, 0x2089261a1fdb2442, 0x48e048b04882135, 0x4b704b404b10491, 0x4c304c004bd04ba, 0x4e404cc04c904c6, 0x4d604a3034e033b, 0x5290518050304f2, 0x34d033a0327053a, 0x7390a820a8506b4, 0x1cb91cae1ca01c87, 0x1d221cf01cd31cc9, 0x1d6c1d5c1d481d3f, 0x1d8e1d891d7c1ccd, 0x1c8d1da41d9f1caa, 0x1d3d1dc01dbe1d55, 0x1e041de81dca1dbc, 0x1e8b1ce01e4e1e23, 0x1eb31eaf1e9e1cd1, 0x1ce41eca1ec81ec0, 0x1ef11d0c1ee31c9c, 0x1fd81f041eff1efa, 0x1c9a1c941c8f1c89, 0x1cbb1cb31ca81ca2, 0x1ce21ccf1ccb1cc2, 0x1cdd1cd81ceb1ce6, 0x1cff1d061cfa1cf5, 0x1d1c1d151d0e1d0b, 0x1d3a1d331d2c1d10, 0x1d611d571d531d44, 0x1d851d811d711d66, 0x1d301db21da91d93, 0x1dd81de41dc61dbb, 0x1dfb1df41dcf1ddf, 0x1e1a1e131ded1e00, 0x1e301e441e1f1e09, 0x1e3e1e391e4a1e34, 0x1e671e531e5b1e28, 0x1e741e6e1e6a1e61, 0x1e851e811e7d1e79, 0x1ea01e951e921e8d, 0x1eba1eb51d171ea4, 0x1ed81ed31ece1ec2, 0x1d1e1ee81ee51edd, 0x3610352033f0311, 0x39d038e037f0370, 0x33e032b03bb03ac, 0x37e036f03600351, 0x3ba03ab039c038d, 0x4230418040d0402, 0x56a0a560b12042e, 0xa5c0ce90c5b0a12, 0x21bc06db0a630a5f, 0x22ef22ab213b22b2, 0xbed12110c290cdd, 0x689075b071c0b7e, 0xc2c0ce00b8f0a29, 0x6010bf9121d1214, 0x68c07640b81068d, 0xa590c0012200896, 0x12230c380aef0b97, 0xc060b9a0a330c03, 0xc0a0b9d0a370a36, 0xc1e0ba10a3b0a3a, 0x7680b8506910c22, 0xd030cfd0cf90690, 0xc1212260c3b0cec, 0xbf012170c2f0ce3, 0xc320ce6076f0b89, 0x7720b8c0bf3121a, 0x5d7099c077e0bb7, 0x5e805ff0a300a2d, 0x6ae0b1606940a53, 0xba50722071f0b3d, 0xbc90bc50bc20bbf, 0x8230c0e0bfc0bf6, 0xd28082e08260cd8, 0x5d1092d0939086c, 0x36c035d034a0337, 0x3a80399038a037b, 0x3490336032303b7, 0x389037a036b035c, 0x3fe03b603a70398, 0x42a041f04140409, 0x44a0443043c0435, 0xaf7047804710451, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13b913b2, 0x0, 0x0, 0x0, 0x0, 0x276e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x67e05e300000000, 0x83e, 0xe7a0e72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27740ec12772276c, 0x0, 0x0, 0xefb0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x261c263622c52608, 0x276220ab1fae2378, 0x20dd267c21442762, 0x24fc243422392142, 0x265a25d025b62598, 0x23ee23a2234c2306, 0x1fc027062670257c, 0x259623b423102095, 0x258e23882198272e, 0x25bc252a225325d8, 0x23da235822cf21d1, 0x2065202f1fe32660, 0x244423b2230c2287, 0x2630259e25922508, 0x2462272c271e26c4, 0x268a256e24de2482, 0x21df211f25f22732, 0x246623cc251a24ba, 0x2186211d26c02618, 0x24d6237c23622308, 0x2520206326a024ea, 0x24e0249820332035, 0x2255260026a4257a, 0x21701fb425f82306, 0x2075242423e4220b, 0x1fa421fd1feb246a, 0x209f24d422932342, 0x25ea257e244a2115, 0x225d233e26482328, 0x1fce2422226d255a, 0x24ca22f62031200f, 0x2069267a25f02546, 0x22a121d9214a20c3, 0x270a2698246c238a, 0x22c1205727402734, 0x222d21bf2642231e, 0x23a823822283223b, 0x251624e424922400, 0x268c264e2582263a, 0x23a020cd20592043, 0x220721cf25ea25c6, 0x23de24b823242269, 0x21a2217020fb1fd6, 0x250223fa23ec220d, 0x26c626be267e2512, 0x2674248c1fe526e4, 0x1ff71fc4221926b2, 0x2306229921822172, 0x26582588243223ae, 0x2055269e22b9275e, 0x2370235422e522df, 0x24d22460242023f2, 0x26a62243201326ea, 0x263c236421941fef, 0x23e422e9221d21f5, 0x218a20bb204726aa, 0x234622fc22d722ae, 0x25c824f8242a23f0, 0x207d26b8267825ce, 0x240223b020bd2372, 0x2736272226ac2590, 0x24a8252e236022e3, 0x239c23d824c024ae, 0x204925621fd225fe, 0x24c6225721c72041, 0x264022bf234e2168, 0x21d525de26a225c0, 0x20e91fff, 0x22b700002113, 0x243e23dc20370000, 0x248a2480247e2470, 0x250424c226ca, 0x25f600002594, 0x266626500000, 0x26f626f400000000, 0x26b02662272a26f8, 0x206120031ff91fe7, 0x20ef20e120872067, 0x21882117211120f3, 0x222b22272213218c, 0x22bb22a5228d2237, 0x23802368235a22f8, 0x246423f423ba23aa, 0x24782474247622f2, 0x24882486247c247a, 0x24e424b224a4249a, 0x250a24f624ec24e8, 0x2580254c254c2532, 0x25fc25fa25e025d4, 0x2650264c2620261e, 0x220f26e826dc26ba, 0x253e2833, 0x1fe1200d202d1fa8, 0x206d205f20172001, 0x20ed20df20d720e1, 0x21462140211b2113, 0x21d721d3215c2154, 0x2223221721ff21ef, 0x22372225222b221b, 0x227b227722712245, 0x22d122cf22b7228f, 0x23542328232022db, 0x238e23802376237a, 0x23d623bc245623aa, 0x241c240a23fc23dc, 0x2440243e2430242e, 0x2468245024522448, 0x24da24be24b224a6, 0x2564250a24f224e4, 0x25dc25d625b22578, 0x25ee25f625ec25e0, 0x25fc25f425f825fa, 0x2656263e26202602, 0x26ba26a826822672, 0x26e226dc26d426ca, 0x28092762271226e8, 0x1f501f3c281b2807, 0x28912861284f1f52, 0x27602758, 0x0, 0xae10ae60ae20ade, 0xd2b0d2b0ae5, 0x0, 0x0, 0x13f9000000000000, 0x13f613fc13f313f0, 0x0, 0x147d000014300000, 0x141f141a13ff1451, 0x14621446140b1439, 0x1475147202f41478, 0x14041401146e146a, 0x141c1417140f1407, 0x142a14271421, 0x143b14361433142d, 0x144800001443, 0x14530000144e144b, 0x145f145c00001456, 0x1424147a14671464, 0x140a1459143e1412, 0x18c918c918c318c3, 0x18cb18cb18c918c9, 0x18cf18cf18cb18cb, 0x18c718c718cf18cf, 0x18cd18cd18c718c7, 0x18c518c518cd18cd, 0x18e718e718c518c5, 0x18e918e918e718e7, 0x18d318d318e918e9, 0x18d118d118d318d3, 0x18d518d518d118d1, 0x18d718d718d518d5, 0x18dd18dd18d718d7, 0x18df18df18db18db, 0x18e318e318d918d9, 0x18eb18eb18e118e1, 0x18ef18ef18eb18eb, 0x18f318f318ef18ef, 0x18f118f118f318f3, 0x18f518f518f118f1, 0x18f718f718f718f7, 0x18fb18fb19181918, 0x18f918f918fb18fb, 0x163c163c18f918f9, 0x19151915, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18ed000000000000, 0x18ae18ed18ed18ed, 0x18b218aa18aa18ae, 0x190d190d190618b2, 0x190b190b19001900, 0x18b618b618b618b6, 0x1878187814c014c0, 0x189c189c18b818b8, 0x18a818a818ac18ac, 0x18b418b418b018b0, 0x18a018a018a018b4, 0x190f190f190f190f, 0x18a018901880187c, 0x14a914a2149f18a4, 0x14c914c214bf14b6, 0x151514f814e314d8, 0x152f1526151d1518, 0x14dc14cd15371532, 0x14e7157f157c14e0, 0x15c515b715b015a5, 0x1650164d163e160d, 0x167316701665165b, 0x16b21620168f168a, 0x16f016ed16ea16b5, 0x1706170116fe16f7, 0x1724171f171c170d, 0x1730172d172a1727, 0x17551741173e1733, 0x1624163717731764, 0x1504150014fc178b, 0x17d8150c150815d1, 0x1814180317fa17eb, 0x182a181f181c1817, 0x1855184e1847182d, 0x158f1872186f185e, 0x64005d18421599, 0x8000790072006b, 0x18941890188c1888, 0x14b3148618a418a0, 0x14c214bf14b914b6, 0x150f14f814f514f2, 0x1523152015181515, 0x1532152f15291526, 0x171f171c170116fe, 0x173e173317301724, 0x178b162416371741, 0x180017fd15d11790, 0x18171814180e1803, 0x185e185b18581842, 0x187c1872186f1869, 0x1898189018841880, 0x14b614a914a2149f, 0x14e314d814c914bc, 0x15371526151214f8, 0x157c14e014dc14cd, 0x15b715b015a514e7, 0x163e1618160d15c5, 0x1665165b1650164d, 0x1620168f168a1670, 0x16ed16ea16b516b2, 0x170d170616f716f0, 0x1730172d172a1727, 0x1773176417551733, 0x150014fc148b1637, 0x17eb17d815d11504, 0x181c1811180317fa, 0x184e18471830181f, 0x18901698185e1855, 0x14f814bc14b61898, 0x15c5152c15261512, 0x1730160215f715d4, 0x1811180316371733, 0x16d716d01698185e, 0x16aa1685168216de, 0x15d716c716c416ad, 0x153b1608160515da, 0x14eb14d514d114a6, 0x16681648164514ad, 0x15f115e615df166b, 0x161b15c215f415f7, 0x16aa168516821662, 0x15d716c716c416ad, 0x153b1608160515da, 0x14eb14d514d114a6, 0x16681648164514ad, 0x15f115e615df166b, 0x161b15c215f415f7, 0x15f115e615df1662, 0x1673160215d415f7, 0x15df15b715b015a5, 0x168a167315f115e6, 0x148e148e, 0x0, 0x0, 0x0, 0x0, 0x14df14db14db14cc, 0x150314ff14fb14e6, 0x156c1570154e154e, 0x15cc15ac15a815b3, 0x15d015d015c815cc, 0x15e9164116101610, 0x15fa15fa15e215e9, 0x165e165315fe15fe, 0x167a16761676165e, 0x169e169e1692167e, 0x16bc16c016b816a2, 0x1714171016f316f3, 0x1758176b176f1767, 0x177d177617761758, 0x17b617ad17a9177d, 0x17c117bd179e1796, 0x1822179a00000000, 0x17df17f217ee1826, 0x1806180a17e317df, 0x14d414ac18611861, 0x150b14ea14ee14d0, 0x1552153a15561507, 0x165715ed161415ba, 0x184a185117811760, 0x17f6171817cc1865, 0x173a16a617671710, 0x1736175c17c517db, 0x1565153e17db175c, 0x173614a516fa17a2, 0x17e715be16411692, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x148414891709163a, 0x16961594161e17b1, 0x1542162716231635, 0x159c, 0x0, 0x0, 0x0, 0x0, 0x5401be21be002f6, 0x1c260093008d0546, 0x2ff1c28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9961b181b1a02fc, 0xe3e00a500a10996, 0x1bf41bfe1bfa0e42, 0x1be41bea1be81bf6, 0x1bf01bee1bec1be6, 0x98e000000001bf2, 0xc000c000c0992, 0x99609960996000c, 0x2fa1be002f6, 0x8d009305400546, 0xe3e00a500a11b1a, 0x971bfe1bfa0e42, 0x2f802f402f2009d, 0x54405590548, 0x566009b00990990, 0x0, 0x5a16ca0057, 0x16cd006800000061, 0x16db007616d4006f, 0x16e5008416e2007d, 0x1494149114911480, 0x1497183a183a1494, 0x1875187518751497, 0x149d148214821875, 0x14c5149d149d149d, 0x14c714c714c714c5, 0x151b151b151b14c7, 0x14a014a014a0151b, 0x14a314a314a314a0, 0x14aa14aa14aa14a3, 0x158d158b158b14aa, 0x14b414871487158d, 0x15a315a315a314b4, 0x15dd15dd15dd15a3, 0x160b160b160b15dd, 0x164b164b164b160b, 0x166e166e166e164b, 0x168816881688166e, 0x168d168d168d1688, 0x16b016b016b0168d, 0x16e816e816e816b0, 0x17041704170416e8, 0x1722172217221704, 0x1597159715971722, 0x14b714b714b71597, 0x14ba14ba14ba14b7, 0x148c148c148c14ba, 0x14c018331833148c, 0x14a714a714a714c0, 0x174d1749174914a7, 0x174617511751174d, 0x1746, 0x970095008d0000, 0x9f009d009b0099, 0x2f402f200a500a1, 0x30302fa02f802f6, 0x30f034303140305, 0x392038303740365, 0x546054003b003a1, 0x93055905440548, 0x5e305d505680566, 0x687067e062905e6, 0x71a060706cf06ac, 0x7a7078107230734, 0x861076d083e06af, 0x77306b2056b0890, 0x98e060a095d0682, 0x996099409920990, 0x9a3093a06920998, 0x6020adc0a800a31, 0xb7c073e0ae30b10, 0x78a0b3e05d30a2b, 0x8430a1405d80cd6, 0xde4086d0a270ba6, 0xe3e061106950b44, 0x1bd50e440e420e40, 0x1bee1bec1be21bd7, 0x1c851f041f0b1be0, 0x1cc71cb71cac1c9e, 0x1d9d1ec61ebe1eb1, 0x1cae1ca01c871cc5, 0x1cf01cd31cc91cb9, 0x1d5c1d481d3f1d22, 0x1d891d7c1ccd1d6c, 0x1da41d9f1caa1d8e, 0x1dc01dbe1d551c8d, 0x1de81dca1dbc1d3d, 0x1ce01e4e1e231e04, 0x1eaf1e9e1cd11e8b, 0x1eca1ec81ec01eb3, 0x1d0c1ee31c9c1ce4, 0x8b00881cb51ef1, 0x1abb19f419ef1a7f, 0x19fb1abf1abd19f6, 0x1ac31ac11a021a00, 0x1acb1ac91ac71ac5, 0x1a111a0c1a071a51, 0x1a1a1a181a131a5b, 0x1a391a2e1a2c1a22, 0x1a481a431a3e, 0x1a8319f200000000, 0x1a8b1a891a871a85, 0x1a8f1a8d00000000, 0x1a971a951a931a37, 0x1a201a9900000000, 0x1aa31aa11a9f1a9d, 0x1a2a1aa500000000, 0x1aa9, 0x90e4e0e480e46, 0x1b2f0e4a0e4c, 0x1b381b361b311bcf, 0x1bd31bd11b3d, 0x0, 0x0, 0x0, 0x0, 0xe630f350f330000, 0xf1c00000e950f0e, 0xe9b0f1e0f202776, 0xea70e9f1b140e9d, 0xeab0eaf0eb30f28, 0xeb90f120e740f10, 0xec30f2c0f2a0eef, 0x27d30ec7277027d1, 0xed70e6d27d50efd, 0x27d70edf05d80ed9, 0xf260ee70ee50ee3, 0xef10f2427780f22, 0xf180eff00001bdc, 0xe870e850f0c0f1a, 0x27db27d90e89, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x277a00000000, 0x277d, 0x0, 0x0, 0x2780000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2786278300000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2789000000000000, 0x278c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2792000000000000, 0x27950000278f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x279b279800000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x279e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27a427a100000000, 0x27b327af27ab27a7, 0x27b7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27bb000000000000, 0x27c227c927be27c6, 0x27cd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae300000602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e300000568, 0x68700000000, 0x71a06070000, 0x6af07a707810000, 0x89008610000083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc00000a3109a3, 0x73e0ae30b100000, 0xb3e05d30a2b0b7c, 0xa1405d80cd60000, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e6000005d50568, 0x687067e0629, 0x734071a06070000, 0x6af07a707810723, 0x89008610000083e, 0x682077306b2056b, 0x93a06920000095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e6000005d50568, 0x687067e0629, 0x734071a060706cf, 0x7a700000723, 0x890086100000000, 0x682077306b2056b, 0x93a06920000095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x93a0692060a095d, 0xadc0a800a3109a3, 0x73e0ae30b100602, 0xb3e05d30a2b0b7c, 0xa1405d80cd6078a, 0x86d0a270ba60843, 0x61106950b440de4, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x61106950b440de4, 0xe8d0e76, 0xf990f970f950f40, 0x100a0fbb0fb90f9b, 0x103f103d103b100c, 0x1063104510431041, 0x106c106a100a1065, 0x10921090108e106e, 0x114710e31b50077f, 0x116b114d114b1149, 0x120b11cd11cb116d, 0x122b1229120f120d, 0x1255124d124b122d, 0x1299125b12591257, 0x1b4b129f129d129b, 0x1299120b11cb114d, 0xf950f40124b124d, 0xfb90f9b0f990f97, 0x103b100c100a0fbb, 0x10431041103f103d, 0x100a106510631045, 0x108e106e106c106a, 0x1b50077f10921090, 0x114b1149114710e3, 0x11cb116d116b114d, 0x120f120d120b11cd, 0x124b122d122b1229, 0x125912571255124d, 0x129d129b1299125b, 0x11cb114d1b4b129f, 0x124b124d1299120b, 0xf990f970f950f40, 0x100a0fbb0fb90f9b, 0x103f103d103b100c, 0x1063104510431041, 0x106c106a100a1065, 0x10921090108e106e, 0x114710e31b50077f, 0x116b114d114b1149, 0x120b11cd11cb116d, 0x122b1229120f120d, 0x1255124d124b122d, 0x1299125b12591257, 0x1b4b129f129d129b, 0x1299120b11cb114d, 0xf950f40124b124d, 0xfb90f9b0f990f97, 0x103b100c100a0fbb, 0x10431041103f103d, 0x100a106510631045, 0x108e106e106c106a, 0x1b50077f10921090, 0x114b1149114710e3, 0x11cb116d116b114d, 0x120f120d120b11cd, 0x124b122d122b1229, 0x125912571255124d, 0x129d129b1299125b, 0x11cb114d1b4b129f, 0x124b124d1299120b, 0xf990f970f950f40, 0x100a0fbb0fb90f9b, 0x103f103d103b100c, 0x1063104510431041, 0x106c106a100a1065, 0x10921090108e106e, 0x114710e31b50077f, 0x116b114d114b1149, 0x120b11cd11cb116d, 0x122b1229120f120d, 0x1255124d124b122d, 0x1299125b12591257, 0x1b4b129f129d129b, 0x1299120b11cb114d, 0x12ff12fd124b124d, 0x314030500000000, 0x3740365030f0343, 0x3b003a103920383, 0x30f034303140305, 0x392038303740365, 0x314030503b003a1, 0x3740365030f0343, 0x3b003a103920383, 0x30f034303140305, 0x392038303740365, 0x314030503b003a1, 0x3740365030f0343, 0x3b003a103920383, 0x0, 0x0, 0x0, 0x0, 0x13521350134e1346, 0x136c136413591357, 0x13861384137f1371, 0x13931391138f138a, 0x13a713a513971395, 0x13b413b013ab13a9, 0x13e0276a13c013bb, 0x13d713e813c913c4, 0x1350134e134613db, 0x1364135913571352, 0x1384137f1371136c, 0x13971393138f138a, 0x13ab13a913a713a5, 0x13d313b413b213b0, 0x13d513cb13c213c4, 0x13d92768, 0x0, 0x0, 0x0, 0x0, 0x158b14a0149d1482, 0x14a314b418330000, 0x1597172214a7166e, 0x168d15a314ba14b7, 0x14871704160b16e8, 0x14aa151b14c715dd, 0x16b01688164b158d, 0x18c118e518f518bf, 0x14a0149d0000, 0x14a300000000148c, 0x1597172214a70000, 0x168d15a314ba14b7, 0x1704160b16e8, 0x14aa151b14c715dd, 0x16b00000164b0000, 0x0, 0x14a000000000, 0x14a3000000000000, 0x1597000014a70000, 0x168d15a314ba0000, 0x1704160b0000, 0x14aa0000000015dd, 0x16b00000164b0000, 0x18c1000018f50000, 0x14a0149d0000, 0x14a300000000148c, 0x172214a7166e, 0x168d15a314ba14b7, 0x1704160b16e8, 0x14aa151b14c715dd, 0x16b01688164b0000, 0x18e5000018bf, 0x158b14a0149d1482, 0x14a314b41833148c, 0x1597000014a7166e, 0x168d15a314ba14b7, 0x14871704160b16e8, 0x14aa151b14c715dd, 0x16b01688164b158d, 0x0, 0x158b14a0149d0000, 0x14a314b418330000, 0x1597000014a7166e, 0x168d15a314ba14b7, 0x14871704160b16e8, 0x14aa151b14c715dd, 0x16b01688164b158d, 0x0, 0x3f103160307030a, 0x4fa04de04ab0468, 0x5310520050b, 0x0, 0x10a0106010200fe, 0x11a01160112010e, 0x12a01260122011e, 0x13a01360132012e, 0x14a01460142013e, 0x15a01560152014e, 0x5e31bfc0162015e, 0x93605e5076d, 0x5e605e305d50568, 0x6ac0687067e0629, 0x734071a060706cf, 0x6af07a707810723, 0x8900861076d083e, 0x682077306b2056b, 0x76f06b1060a095d, 0x933082a08690863, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x761075e00000000, 0x76c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x606, 0x0, 0x0, 0x0, 0x1d5c1d4d1c72, 0x0, 0x0, 0x0, 0x1da620a521622249, 0x213e25e421331fc6, 0x229923a422b01fcc, 0x229d201b21f7204f, 0x2612240e24d82045, 0x224f237e20c12125, 0x26521f9e1f982265, 0x225f20b31fac21ac, 0x24a22484224b2626, 0x32922cd236e20b7, 0x266e20e720512418, 0x0, 0x1c0c1c041c001c18, 0x1c081c201c101c1c, 0x1c14, 0x0, 0x20af21f9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30f034303140305, 0x392038303740365, 0x3b003a1, 0x0, 0x27dd1fba1fb21fb6, 0x1fed1fe91fe71fdf, 0x1ff51ff91ff31ff1, 0x2005200327e51f12, 0x1f1427df20152007, 0x202327e3201b200b, 0x202d202b1fd42027, 0x1f18203f203b28a1, 0x20532051204d204b, 0x20672061205f1f1a, 0x20752071206f206d, 0x2093208b20872085, 0x2099209920992097, 0x20a720a3239627eb, 0x20b520b120ad27ed, 0x20c720c520bf20c9, 0x20d520d120cf20cb, 0x20df20db20db20d9, 0x20fd20eb20e520e3, 0x20f520f120ff20ef, 0x2109210721232041, 0x210d210f2105210b, 0x2129212727ef2119, 0x214821372133212d, 0x2150214e27f327f1, 0x1f1c2156214c2152, 0x215e215e215a1f1e, 0x2170216e216c27f5, 0x217a217827f72174, 0x21841f20217e21e9, 0x27fb21902192218c, 0x219a219c27fd2196, 0x1f2221a821a6219e, 0x21b821b621b421b0, 0x21c91f2627ff1f24, 0x28b521d121cd21cb, 0x25382803280321dd, 0x28111f2821e521e5, 0x1f2a21f121ed2865, 0x22092205220321fb, 0x22131f2c1f2e2211, 0x2221221f22152805, 0x222b222922212223, 0x22352231222f2233, 0x224121bd22392237, 0x226322592251224d, 0x2267225b2261280b, 0x2279280d2275226b, 0x227d1f30226f2273, 0x1f32227f22852281, 0x22a7280f2291228d, 0x22bb1f3822b522c7, 0x201f201d1f341f36, 0x1f6a252222bd22c9, 0x22dd22d322d122cf, 0x22e71f3a281922d9, 0x281d22f822f422e1, 0x1f3c22fe22eb22fa, 0x230a230423022300, 0x23141f3e230e281f, 0x231c1f4023162821, 0x2823232a23282322, 0x2827233a282527f9, 0x234a233c23442340, 0x23562354235a2352, 0x23502829235e235c, 0x23761f42236c236a, 0x23842366282b2374, 0x23902386282f282d, 0x23921f44238c238e, 0x27e1239e2398239a, 0x283523ac283123a6, 0x283723c623bc23b6, 0x283b283923d223d0, 0x23ea1f4623e823e0, 0x23f823f61f481f48, 0x1f4a240423fe23fc, 0x283f241e283d2410, 0x2841242c28012424, 0x1f4e1f4c28452843, 0x284b284728492448, 0x244e244e244c284d, 0x1f5424541f522452, 0x2462245e28511f56, 0x247a28531f582468, 0x2496248a28572855, 0x249e249c249a1f5a, 0x24aa285b285b2859, 0x24b624b4285d1f5c, 0x1f6024c4285f1f5e, 0x286324d024c824cc, 0x24e624e21f6224dc, 0x286928671f6424ee, 0x286d24fa286b1f66, 0x286f250a25062500, 0x2518287325142871, 0x252625241f682813, 0x2875215825281f6c, 0x2538281728152877, 0x25501f6e2646253a, 0x2554205b2552254e, 0x2879255c25582556, 0x256a2568255e255a, 0x25802576256c2560, 0x2574257225702566, 0x1f70287d287f287b, 0x2887258a25862584, 0x1f741f722881258c, 0x259c1f7628852883, 0x25a825a225a0259e, 0x25b225aa25ac25a6, 0x1f7825b425b025ae, 0x25c21f7a25ba25b8, 0x25cc25ca288925c4, 0x288b1f1625d21f7c, 0x25e81f801f7e288d, 0x288f260a260225f4, 0x2628262226162614, 0x262c262e27e72893, 0x263e263827e92632, 0x2664265e28972895, 0x2680266a28992668, 0x268e268426882686, 0x1f822696289b2690, 0x26b61f84289d269a, 0x28a3289f26c221a0, 0x28a526d61f881f86, 0x26e226e228a71f8a, 0x1f8c26f228a926e6, 0x27082704270026fa, 0x2720271228ab1f8e, 0x27281f921f902726, 0x28b128af1f9428ad, 0x27441f96273a28b3, 0x2752274e274a2748, 0x28b72756, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//12544 bytes -enum canonMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)([ 0x0, 0x20, 0x220], [ 0x100, 0x800, 0x1000], [ 0x302020202020100, 0x205020202020204, 0x602020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000100000000, 0x6000500040003, 0x9000800070000, 0xb000a, 0x0, 0xd000c00000000, 0x10000f000e, 0x14001300120011, 0x16001500000000, 0x0, 0x0, 0x170000, 0x1800000000, 0x0, 0x0, 0x0, 0x0, 0x1a00190000, 0x1b00000000, 0x1d001c0000, 0x0, 0x1e00000000, 0x200000001f, 0x2100000000, 0x2200000000, 0x2300000000, 0x2400000000, 0x0, 0x0, 0x26002500000000, 0x280027, 0x290000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c002b002a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30002f002e002d, 0x34003300320031, 0x38003700360035, 0x3c003b003a0039, 0x3d, 0x0, 0x3e0000, 0x410040003f, 0x45004400430042, 0x48000000470046, 0x490000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c004b00000000, 0x50004f004e004d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x54005300520051, 0x58005700560055, 0x5c005b005a0059, 0x5f005e005d, 0x6200610060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x640063, 0x650000, 0x0, 0x0, 0x0, 0x6600000000, 0x0, 0x0, 0x670000, 0x0, 0x680000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x690000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b006a00000000, 0x6d006c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x710070006f006e, 0x75007400730072, 0x79007800770076, 0x7d007c007b007a, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x250012000f000c, 0x850000004f0045, 0xcb00a400a1009e, 0x13301240121011e, 0x1a0019d01880000, 0x1da01b601a3, 0x2730270026d0000, 0x2f30287, 0x33803250322031f, 0x398000003620358, 0x3de03b703b403b1, 0x446043a04370434, 0x4b404b1049c0000, 0x4ee04ca04b7, 0x58a058705840000, 0x61c0000060d059e, 0x33e002b033b0028, 0x38c00790380006d, 0x392007f038f007c, 0x3a2008f03950082, 0x3cd00ba00000000, 0x3db00c803d800c5, 0x3e400d103fb00e8, 0x41000fd040a00f7, 0x419010604130100, 0x41c0109, 0x440012a043d0127, 0x45c01490443012d, 0x130, 0x471015d0462014f, 0x170047701630000, 0x47a01660484, 0x185000000000000, 0x18e04a801940499, 0x4a2, 0x4e401d004d901c5, 0x4f801e4, 0x5450231052f021b, 0x54b023705350221, 0x56902550552023e, 0x57b026405580244, 0x572025b, 0x594027d058d0276, 0x5b4029d059b0284, 0x5e002c905b702a0, 0x61002f605f502de, 0x3110628030b0302, 0x6310314062e, 0x50401f0, 0x0, 0x0, 0x2ac000000000000, 0x5c3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13d036900560000, 0x2a304fb01e70450, 0x28e05a9029205ba, 0x28a05ad029605a5, 0x35b0048000005a1, 0x653064a03540041, 0x416010300000000, 0x522020e046b0157, 0x65f065c05250211, 0x465, 0x40700f4, 0x365005204960182, 0x656064d06500647, 0x36f005c036c0059, 0x3ea00d703e700d4, 0x456014304530140, 0x50101ed04fe01ea, 0x53b022705380224, 0x5c002a905bd02a6, 0x578026105660252, 0x425011200000000, 0x0, 0x351003e00000000, 0x4f101dd03f400e1, 0x4e701d304d101bd, 0x61602fc04ea01d6, 0x0, 0x0, 0x0, 0x66b00000010000d, 0x137, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x662, 0x0, 0x100000000, 0x0, 0x6450670063d0000, 0x72c06df06c3, 0x798077800000759, 0x8d1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x781073500000000, 0x8c10867084707e9, 0x92f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x92808ca00000000, 0x95f091f08fd, 0x9b4000000000000, 0x9b7, 0x0, 0x0, 0x9c3000009cc09c6, 0x9ba000000000000, 0x0, 0x9ed09d809e4, 0x0, 0x0, 0x9de0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa200000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0500000a0e0a08, 0xa41000000000000, 0x0, 0xa2f0a1a0a26, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa470a4400000000, 0x0, 0x0, 0xa1109cf0000, 0x0, 0x0, 0x0, 0xa0209c009ff09bd, 0xa0b09c900000000, 0xa4d0a4a00000000, 0xa1709d50a1409d2, 0xa1d09db00000000, 0xa2909e70a2309e1, 0xa530a5000000000, 0xa2c09ea0a3e09fc, 0xa3509f30a3209f0, 0xa3809f6, 0xa3b09f9, 0x0, 0xac10abe00000000, 0xaca0ac40ac7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xacd00000ad3, 0x0, 0x0, 0x0, 0xad0000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xae80000, 0x0, 0xaf10000, 0xaf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xadf0adc0ad90ad6, 0xaee0aeb0ae50ae2, 0x0, 0x0, 0xb00000000000000, 0xb03, 0x0, 0x0, 0x0, 0xafd00000afa0af7, 0x0, 0x0, 0x0, 0x0, 0xb12000000000000, 0xb1500000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb0c0b090b060000, 0xb0f00000000, 0x0, 0x0, 0xb1e000000000b21, 0xb24, 0x0, 0x0, 0x0, 0xb1b0b18, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb27, 0x0, 0x0, 0x0, 0x0, 0xb300b2a00000000, 0xb2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb36, 0xb40000000000000, 0xb3c0b3900000b43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb4c0b4600000000, 0xb49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb4f00000000, 0xb590b550b52, 0xb5f000000000000, 0x0, 0x0, 0xb620000, 0xb6500000000, 0xb68000000000000, 0x0, 0xb6b, 0x0, 0x0, 0xb5c0000, 0x0, 0xb6e000000000000, 0xb890b710000, 0xb8c, 0x0, 0xb740000, 0x0, 0x0, 0x0, 0xb7a000000000000, 0x0, 0x0, 0xb7d0000, 0xb8000000000, 0xb83000000000000, 0x0, 0xb86, 0x0, 0x0, 0xb770000, 0x0, 0x0, 0xb8f00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb9200000000, 0xb9800000b95, 0xb9e00000b9b, 0xba100000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba4000000000000, 0xba70000, 0xbb000000bad0baa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3830070037d006a, 0x389007603860073, 0x39f008c039b0088, 0x3ae009b03a50092, 0x3ab009803a80095, 0x3d400c103d000bd, 0x40100ee03fe00eb, 0x40400f103f700e4, 0x41f010c040d00fa, 0x422010f04280115, 0x42e011b042b0118, 0x4490136045f014c, 0x46e015a04680154, 0x47d016904740160, 0x48a01760480016c, 0x48d017904870173, 0x493017f0490017c, 0x4a50191049f018b, 0x4ab019704ae019a, 0x4d501c104cd01b9, 0x4e001cc04dc01c8, 0x52c021805290215, 0x53e022a0532021e, 0x54802340541022d, 0x55f024b05550241, 0x55b0247054e023a, 0x56c02580562024e, 0x581026a0575025e, 0x5dd02c6057e0267, 0x5e302cc05e602cf, 0x597028005900279, 0x5ec02d505e902d2, 0x5f202db05ef02d8, 0x5f802e105fb02e4, 0x60402ea060102e7, 0x61902ff060702ed, 0x6340317062b030e, 0x56f04310637031a, 0x6590000062205fe, 0x0, 0x35f004c0372005f, 0x3280015032c0019, 0x330001d03340021, 0x345003203750062, 0x34d003a0341002e, 0x379006603490036, 0x3e100ce03ed00da, 0x3be00ab03ca00b7, 0x3c600b303ba00a7, 0x3f000dd03c200af, 0x4590146044d013a, 0x4f501e1051b0207, 0x4ba01a604be01aa, 0x4c201ae04c601b2, 0x50b01f7051e020a, 0x51301ff050701f3, 0x5170203050f01fb, 0x5b1029a05da02c3, 0x5c602af05ca02b3, 0x5ce02b705d202bb, 0x60a02f005d602bf, 0x61f030506250308, 0x61302f9, 0x0, 0x81b07f9081807f6, 0x82d080b08240802, 0x69e067c069b0679, 0x6b0068e06a70685, 0x858084d0855084a, 0x85c0851, 0x6d406c906d106c6, 0x6d806cd, 0x89308710890086e, 0x8a50883089c087a, 0x70706e5070406e2, 0x71906f7071006ee, 0x8eb08dc08e808d9, 0x8f308e408ef08e0, 0x74a073b07470738, 0x7520743074e073f, 0x90e0903090b0900, 0x9120907, 0x76a075f0767075c, 0x76e0763, 0x949093a09460937, 0x9510942094d093e, 0x787000007840000, 0x78f0000078b0000, 0x98b096909880966, 0x99d097b09940972, 0x7c0079e07bd079b, 0x7d207b007c907a7, 0x847084407e907e2, 0x8c108be08670860, 0x91f091c08fd08fa, 0x95f0958, 0x81f07fd08360814, 0x831080f08280806, 0x6a2068006b90697, 0x6b4069206ab0689, 0x897087508ae088c, 0x8a9088708a0087e, 0x70b06e907220700, 0x71d06fb071406f2, 0x98f096d09a60984, 0x9a1097f09980976, 0x7c407a207db07b9, 0x7d607b407cd07ab, 0x84107e507f007f3, 0x83d083a000007ec, 0x670066d06730676, 0x8bc000006bd, 0x8b9086306400000, 0x8b508b20000086a, 0x6df06dc06c306c0, 0xbb90bb60bb30726, 0x8d108cd08c408c7, 0x8d508f700000000, 0x72c0729072f0732, 0xbc20bbf0bbc0000, 0x92f092b09220925, 0x933095509190916, 0x7780775077b077e, 0x31d063d063a0772, 0x9b1095b00000000, 0x9ad09aa00000962, 0x798079507590756, 0x64307df, 0xbc70bc5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x79300000000, 0x4f015200000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbcc0bc900000000, 0x0, 0x0, 0x0, 0x0, 0xbcf00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbd50bd80bd20000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbdb, 0xbde0000, 0xbe1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe700000be4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbea0000, 0xbf0000000000bed, 0xbf30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf900000006, 0x0, 0x0, 0x900030bf60000, 0xbff0bfc, 0xc050c02, 0xc0b0c08, 0x0, 0xc110c0e, 0xc1d0c1a, 0xc230c20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc350c320c2f0c2c, 0x0, 0x0, 0x0, 0x0, 0xc290c260c170c14, 0x0, 0xc3b0c3800000000, 0xc410c3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc490c470000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc44, 0x0, 0x0, 0x0, 0xc5100000c4e, 0xc5700000c54, 0xc5d00000c5a, 0xc6300000c60, 0xc6900000c66, 0xc6f00000c6c, 0xc7500000c720000, 0xc780000, 0x0, 0xc8100000c7e0c7b, 0xc8a0c8700000c84, 0xc900c8d0000, 0xc960c93, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4b, 0x0, 0xc9900000000, 0x0, 0x0, 0x0, 0xca200000c9f, 0xca800000ca5, 0xcae00000cab, 0xcb400000cb1, 0xcba00000cb7, 0xcc000000cbd, 0xcc600000cc30000, 0xcc90000, 0x0, 0xcd200000ccf0ccc, 0xcdb0cd800000cd5, 0xce10cde0000, 0xce70ce4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcea000000000c9c, 0xcf30cf00ced, 0xcf600000000, 0x124b125d0fb71241, 0x13270e290d831043, 0xe4f12930e991327, 0x116710cd0f550e97, 0x1279121511fd11e3, 0x109d106910190feb, 0xd8d12f3128911c7, 0x11e110790ff50e1d, 0x11d910510edb1309, 0x120311890f65121d, 0x108d10250fbd0eff, 0xe050dd90d9d127d, 0x10d310770ff10f95, 0x125911e711dd1171, 0x10e9130712fb12cf, 0x12a111b9114d1107, 0xf0b0e87122f130b, 0x10ed1083117d112f, 0xecb0e8512cb1249, 0x11471047102f0fed, 0x117f0e0312b11159, 0x114f11150ddd0ddf, 0xf67123d12b511c5, 0xebb0d8712350feb, 0xe1110c110950f27, 0xd7f0f1b0da510f1, 0xe2311450f9d1011, 0x122711c910d70e7d, 0xf6f100d126d1005, 0xd9110bf0f7b11a5, 0x113d0fdb0ddb0dc3, 0xe091291122d1195, 0xfa10f070e9f0e37, 0x12f712ab10f31053, 0xfb50df91313130d, 0xf490ef312690ffd, 0x106d104b0f910f57, 0x11791153111110af, 0x12a3127111cd1261, 0x10670e410dfb0de9, 0xf230efd1227120b, 0x1091112d10030f77, 0xee50ebb0e670d97, 0x116b10a9109b0f29, 0x12d112c912951175, 0x128d110f0d9f12dd, 0xdb10d8f0f3512c1, 0xfeb0f9f0ec70ebd, 0x127711d310cb1073, 0xdf712af0fad1323, 0x103b10210fd10fcb, 0x114310e710bd10a1, 0x12b70f5d0dc512e3, 0x126310310ed70da9, 0x10950fd50f390f17, 0xecf0e310deb12bb, 0x10150fe10fc30fa7, 0x120d116310c3109f, 0xe1312c5128f1213, 0x10b110750e33103d, 0x130f12ff12bd11db, 0x1121118b102d0fcf, 0x1063108b11331125, 0xded11ad0d93123b, 0x11390f690ef50de7, 0x12670fb3101b0eb5, 0xf03122112b31205, 0xe590db5, 0xfab00000e7b, 0x10cf108f0de10000, 0x110d1105110310f5, 0x116d113512d3, 0x1233000011df, 0x128312730000, 0x12e912e700000000, 0x12bf127f130512eb, 0xe010db90db30da1, 0xe5f0e530e170e07, 0xecd0e7f0e790e63, 0xf470f430f2f0ed1, 0xfaf0fa30f970f53, 0x1049103510270fdd, 0x10eb10a3107d106f, 0x10fd10f910fb10f7, 0x110b1109110110ff, 0x11531127111d1117, 0x11731161115b1157, 0x11cb11971197118d, 0x1239123712231219, 0x1273126f124f124d, 0xf2b12e112d912c7, 0x119313d6, 0xd9b0dc10dd70d81, 0xe0b0dff0dc90db7, 0xe5d0e510e490e53, 0xe9b0e950e830e7b, 0xf050f010eb10ea9, 0xf3f0f330f1d0f13, 0xf530f410f470f37, 0xf890f850f7f0f5f, 0xfbf0fbd0fab0f99, 0x102110050fff0fc7, 0x1057104910411045, 0x1089107f10e3106f, 0x10b910b510ab108f, 0x10d110cf10c910c7, 0x10ef10dd10df10d5, 0x114911311127111f, 0x11af1173115f1153, 0x121f121b11f911c3, 0x122b123312291223, 0x1239123112351237, 0x12751265124f123f, 0x12c712b91299128b, 0x12db12d912d512d3, 0x13ac132712f912e1, 0xd370d2313be13aa, 0x1434140413f20d39, 0x13251321, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xabb00000a7a0000, 0x0, 0x0, 0xab50ab200000000, 0xa590a560aae0aaa, 0xa680a650a5f0a5c, 0xa740a710a6b, 0xa830a800a7d0a77, 0xa8c00000a89, 0xa9500000a920a8f, 0xaa10a9e00000a98, 0xa6e0ab80aa70aa4, 0xa9b0a860a62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x132900000000, 0x132c, 0x0, 0x0, 0x132f000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1335133200000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1338000000000000, 0x133b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1341000000000000, 0x13440000133e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x134a134700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x134d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1353135000000000, 0x1362135e135a1356, 0x1366, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x136a000000000000, 0x13711378136d1375, 0x137c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13800d8b0d850d89, 0xda70da30da10d99, 0xdaf0db30dad0dab, 0xdbb0db913880cf9, 0xcfb13820dc70dbd, 0xdd113860dcb0dbf, 0xdd70dd50d950dd3, 0xcff0de50de31444, 0xdf50df30df10def, 0xe070e010dff0d01, 0xe110e0f0e0d0e0b, 0xe1b0e190e170e15, 0xe210e210e210e1f, 0xe270e25105d138e, 0xe2f0e2d0e2b1390, 0xe3b0e390e350e3d, 0xe470e450e430e3f, 0xe510e4d0e4d0e4b, 0xe690e5b0e570e55, 0xe650e610e6b0e5f, 0xe710e6f0e890de7, 0xe750e770e6d0e73, 0xe8d0e8b13920e81, 0xe9d0e930e910e8f, 0xea50ea313961394, 0xd030eab0ea10ea7, 0xeb30eb30eaf0d05, 0xebb0eb90eb71398, 0xec30ec1139a0ebf, 0xec90d070ec50f0f, 0x139e0ed30ed50ed1, 0xedd0edf13a00ed9, 0xd090ee90ee70ee1, 0xef10eef0eed0eeb, 0xef70d0d13a20d0b, 0x14580eff0efb0ef9, 0x118f13a613a60f09, 0x13b40d0f0f0d0f0d, 0xd110f150f111408, 0xf250f210f1f0f19, 0xf2f0d130d150f2d, 0xf3d0f3b0f3113a8, 0xf470f450f3d0f3f, 0xf510f4d0f4b0f4f, 0xf5b0f590f550f53, 0xf730f6b0f630f61, 0xf750f6d0f7113ae, 0xf8713b00f830f79, 0xf8b0d170f7d0f81, 0xd190f8d0f930f8f, 0xfa513b20f9b0f97, 0xfaf0d1f0fa90fb9, 0xdcf0dcd0d1b0d1d, 0xd5111810fb10fbb, 0xfc90fc10fbf0fbd, 0xfd30d2113bc0fc5, 0x13c00fdd0fd90fcd, 0xd230fe30fd70fdf, 0xfef0fe90fe70fe5, 0xff70d250ff313c2, 0xffb0d270ff913c4, 0x13c6100710051001, 0x13ca100913c8139c, 0x1017100b1013100f, 0x102310211027101f, 0x101d13cc102b1029, 0x10410d2910391037, 0x104d103313ce103f, 0x1059104f13d213d0, 0x105b0d2b10551057, 0x13841065105f1061, 0x13d8107113d4106b, 0x13da1081107f107b, 0x13de13dc10871085, 0x10990d2d10971093, 0x10a710a50d2f0d2f, 0xd3110b310ad10ab, 0x13e210bb13e010b7, 0x13e410c513a410c1, 0xd350d3313e813e6, 0x13ee13ea13ec10d5, 0x10db10db10d913f0, 0xd3b10e10d3910df, 0x10e910e513f40d3d, 0x10ff13f60d3f10ef, 0x1113110d13fa13f8, 0x111b111911170d41, 0x112313fe13fe13fc, 0x112b112914000d43, 0xd47113714020d45, 0x14061141113b113f, 0x115511510d49114b, 0x140c140a0d4b115d, 0x14101165140e0d4d, 0x14121173116f1169, 0x117b141611771414, 0x118511830d4f13b6, 0x14180ead11870d53, 0x118f13ba13b8141a, 0x119b0d55126b1191, 0x119f0dfd119d1199, 0x141c11a711a311a1, 0x11b511b311a911a5, 0x11cb11c111b711ab, 0x11bf11bd11bb11b1, 0xd5714201422141e, 0x142a11d511d111cf, 0xd5b0d59142411d7, 0x11e50d5d14281426, 0x11ef11eb11e911e7, 0x11f911f111f311ed, 0xd5f11fb11f711f5, 0x12070d61120111ff, 0x1211120f142c1209, 0x142e0cfd12170d63, 0x12250d670d651430, 0x14321243123f1231, 0x1253125112471245, 0x12551257138a1436, 0x1265125f138c125b, 0x1281127b143a1438, 0x12971287143c1285, 0x12a5129b129f129d, 0xd6912a9143e12a7, 0x12c30d6b144012ad, 0x1446144212cd0ee3, 0x144812d70d6f0d6d, 0x12db12db144a0d71, 0xd7312e5144c12df, 0x12f512f112ef12ed, 0x12fd12f9144e0d75, 0x13030d790d771301, 0x145414520d7b1450, 0x13150d7d13111456, 0x131d131b13191317, 0x145a131f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -@property -{ -private alias _IDCA = immutable(dchar[]); -_IDCA decompCanonTable() @safe pure nothrow { static _IDCA t = [ 0x0, 0x3b, 0x0, 0x3c, 0x338, 0x0, 0x3d, 0x338, 0x0, 0x3e, 0x338, 0x0, 0x41, 0x300, 0x0, 0x41, 0x301, 0x0, 0x41, 0x302, 0x0, 0x41, 0x302, 0x300, 0x0, 0x41, 0x302, 0x301, 0x0, 0x41, 0x302, 0x303, 0x0, 0x41, 0x302, 0x309, 0x0, 0x41, 0x303, 0x0, 0x41, 0x304, 0x0, 0x41, 0x306, 0x0, 0x41, 0x306, 0x300, 0x0, 0x41, 0x306, 0x301, 0x0, 0x41, 0x306, 0x303, 0x0, 0x41, 0x306, 0x309, 0x0, 0x41, 0x307, 0x0, 0x41, 0x307, 0x304, 0x0, 0x41, 0x308, 0x0, 0x41, 0x308, 0x304, 0x0, 0x41, 0x309, 0x0, 0x41, 0x30a, 0x0, 0x41, 0x30a, 0x301, 0x0, 0x41, 0x30c, 0x0, 0x41, 0x30f, 0x0, 0x41, 0x311, 0x0, 0x41, 0x323, 0x0, 0x41, 0x323, 0x302, 0x0, 0x41, 0x323, 0x306, 0x0, 0x41, 0x325, 0x0, 0x41, 0x328, 0x0, 0x42, 0x307, 0x0, 0x42, 0x323, 0x0, 0x42, 0x331, 0x0, 0x43, 0x301, 0x0, 0x43, 0x302, 0x0, 0x43, 0x307, 0x0, 0x43, 0x30c, 0x0, 0x43, 0x327, 0x0, 0x43, 0x327, 0x301, 0x0, 0x44, 0x307, 0x0, 0x44, 0x30c, 0x0, 0x44, 0x323, 0x0, 0x44, 0x327, 0x0, 0x44, 0x32d, 0x0, 0x44, 0x331, 0x0, 0x45, 0x300, 0x0, 0x45, 0x301, 0x0, 0x45, 0x302, 0x0, 0x45, 0x302, 0x300, 0x0, 0x45, 0x302, 0x301, 0x0, 0x45, 0x302, 0x303, 0x0, 0x45, 0x302, 0x309, 0x0, 0x45, 0x303, 0x0, 0x45, 0x304, 0x0, 0x45, 0x304, 0x300, 0x0, 0x45, 0x304, 0x301, 0x0, 0x45, 0x306, 0x0, 0x45, 0x307, 0x0, 0x45, 0x308, 0x0, 0x45, 0x309, 0x0, 0x45, 0x30c, 0x0, 0x45, 0x30f, 0x0, 0x45, 0x311, 0x0, 0x45, 0x323, 0x0, 0x45, 0x323, 0x302, 0x0, 0x45, 0x327, 0x0, 0x45, 0x327, 0x306, 0x0, 0x45, 0x328, 0x0, 0x45, 0x32d, 0x0, 0x45, 0x330, 0x0, 0x46, 0x307, 0x0, 0x47, 0x301, 0x0, 0x47, 0x302, 0x0, 0x47, 0x304, 0x0, 0x47, 0x306, 0x0, 0x47, 0x307, 0x0, 0x47, 0x30c, 0x0, 0x47, 0x327, 0x0, 0x48, 0x302, 0x0, 0x48, 0x307, 0x0, 0x48, 0x308, 0x0, 0x48, 0x30c, 0x0, 0x48, 0x323, 0x0, 0x48, 0x327, 0x0, 0x48, 0x32e, 0x0, 0x49, 0x300, 0x0, 0x49, 0x301, 0x0, 0x49, 0x302, 0x0, 0x49, 0x303, 0x0, 0x49, 0x304, 0x0, 0x49, 0x306, 0x0, 0x49, 0x307, 0x0, 0x49, 0x308, 0x0, 0x49, 0x308, 0x301, 0x0, 0x49, 0x309, 0x0, 0x49, 0x30c, 0x0, 0x49, 0x30f, 0x0, 0x49, 0x311, 0x0, 0x49, 0x323, 0x0, 0x49, 0x328, 0x0, 0x49, 0x330, 0x0, 0x4a, 0x302, 0x0, 0x4b, 0x0, 0x4b, 0x301, 0x0, 0x4b, 0x30c, 0x0, 0x4b, 0x323, 0x0, 0x4b, 0x327, 0x0, 0x4b, 0x331, 0x0, 0x4c, 0x301, 0x0, 0x4c, 0x30c, 0x0, 0x4c, 0x323, 0x0, 0x4c, 0x323, 0x304, 0x0, 0x4c, 0x327, 0x0, 0x4c, 0x32d, 0x0, 0x4c, 0x331, 0x0, 0x4d, 0x301, 0x0, 0x4d, 0x307, 0x0, 0x4d, 0x323, 0x0, 0x4e, 0x300, 0x0, 0x4e, 0x301, 0x0, 0x4e, 0x303, 0x0, 0x4e, 0x307, 0x0, 0x4e, 0x30c, 0x0, 0x4e, 0x323, 0x0, 0x4e, 0x327, 0x0, 0x4e, 0x32d, 0x0, 0x4e, 0x331, 0x0, 0x4f, 0x300, 0x0, 0x4f, 0x301, 0x0, 0x4f, 0x302, 0x0, 0x4f, 0x302, 0x300, 0x0, 0x4f, 0x302, 0x301, 0x0, 0x4f, 0x302, 0x303, 0x0, 0x4f, 0x302, 0x309, 0x0, 0x4f, 0x303, 0x0, 0x4f, 0x303, 0x301, 0x0, 0x4f, 0x303, 0x304, 0x0, 0x4f, 0x303, 0x308, 0x0, 0x4f, 0x304, 0x0, 0x4f, 0x304, 0x300, 0x0, 0x4f, 0x304, 0x301, 0x0, 0x4f, 0x306, 0x0, 0x4f, 0x307, 0x0, 0x4f, 0x307, 0x304, 0x0, 0x4f, 0x308, 0x0, 0x4f, 0x308, 0x304, 0x0, 0x4f, 0x309, 0x0, 0x4f, 0x30b, 0x0, 0x4f, 0x30c, 0x0, 0x4f, 0x30f, 0x0, 0x4f, 0x311, 0x0, 0x4f, 0x31b, 0x0, 0x4f, 0x31b, 0x300, 0x0, 0x4f, 0x31b, 0x301, 0x0, 0x4f, 0x31b, 0x303, 0x0, 0x4f, 0x31b, 0x309, 0x0, 0x4f, 0x31b, 0x323, 0x0, 0x4f, 0x323, 0x0, 0x4f, 0x323, 0x302, 0x0, 0x4f, 0x328, 0x0, 0x4f, 0x328, 0x304, 0x0, 0x50, 0x301, 0x0, 0x50, 0x307, 0x0, 0x52, 0x301, 0x0, 0x52, 0x307, 0x0, 0x52, 0x30c, 0x0, 0x52, 0x30f, 0x0, 0x52, 0x311, 0x0, 0x52, 0x323, 0x0, 0x52, 0x323, 0x304, 0x0, 0x52, 0x327, 0x0, 0x52, 0x331, 0x0, 0x53, 0x301, 0x0, 0x53, 0x301, 0x307, 0x0, 0x53, 0x302, 0x0, 0x53, 0x307, 0x0, 0x53, 0x30c, 0x0, 0x53, 0x30c, 0x307, 0x0, 0x53, 0x323, 0x0, 0x53, 0x323, 0x307, 0x0, 0x53, 0x326, 0x0, 0x53, 0x327, 0x0, 0x54, 0x307, 0x0, 0x54, 0x30c, 0x0, 0x54, 0x323, 0x0, 0x54, 0x326, 0x0, 0x54, 0x327, 0x0, 0x54, 0x32d, 0x0, 0x54, 0x331, 0x0, 0x55, 0x300, 0x0, 0x55, 0x301, 0x0, 0x55, 0x302, 0x0, 0x55, 0x303, 0x0, 0x55, 0x303, 0x301, 0x0, 0x55, 0x304, 0x0, 0x55, 0x304, 0x308, 0x0, 0x55, 0x306, 0x0, 0x55, 0x308, 0x0, 0x55, 0x308, 0x300, 0x0, 0x55, 0x308, 0x301, 0x0, 0x55, 0x308, 0x304, 0x0, 0x55, 0x308, 0x30c, 0x0, 0x55, 0x309, 0x0, 0x55, 0x30a, 0x0, 0x55, 0x30b, 0x0, 0x55, 0x30c, 0x0, 0x55, 0x30f, 0x0, 0x55, 0x311, 0x0, 0x55, 0x31b, 0x0, 0x55, 0x31b, 0x300, 0x0, 0x55, 0x31b, 0x301, 0x0, 0x55, 0x31b, 0x303, 0x0, 0x55, 0x31b, 0x309, 0x0, 0x55, 0x31b, 0x323, 0x0, 0x55, 0x323, 0x0, 0x55, 0x324, 0x0, 0x55, 0x328, 0x0, 0x55, 0x32d, 0x0, 0x55, 0x330, 0x0, 0x56, 0x303, 0x0, 0x56, 0x323, 0x0, 0x57, 0x300, 0x0, 0x57, 0x301, 0x0, 0x57, 0x302, 0x0, 0x57, 0x307, 0x0, 0x57, 0x308, 0x0, 0x57, 0x323, 0x0, 0x58, 0x307, 0x0, 0x58, 0x308, 0x0, 0x59, 0x300, 0x0, 0x59, 0x301, 0x0, 0x59, 0x302, 0x0, 0x59, 0x303, 0x0, 0x59, 0x304, 0x0, 0x59, 0x307, 0x0, 0x59, 0x308, 0x0, 0x59, 0x309, 0x0, 0x59, 0x323, 0x0, 0x5a, 0x301, 0x0, 0x5a, 0x302, 0x0, 0x5a, 0x307, 0x0, 0x5a, 0x30c, 0x0, 0x5a, 0x323, 0x0, 0x5a, 0x331, 0x0, 0x60, 0x0, 0x61, 0x300, 0x0, 0x61, 0x301, 0x0, 0x61, 0x302, 0x0, 0x61, 0x302, 0x300, 0x0, 0x61, 0x302, 0x301, 0x0, 0x61, 0x302, 0x303, 0x0, 0x61, 0x302, 0x309, 0x0, 0x61, 0x303, 0x0, 0x61, 0x304, 0x0, 0x61, 0x306, 0x0, 0x61, 0x306, 0x300, 0x0, 0x61, 0x306, 0x301, 0x0, 0x61, 0x306, 0x303, 0x0, 0x61, 0x306, 0x309, 0x0, 0x61, 0x307, 0x0, 0x61, 0x307, 0x304, 0x0, 0x61, 0x308, 0x0, 0x61, 0x308, 0x304, 0x0, 0x61, 0x309, 0x0, 0x61, 0x30a, 0x0, 0x61, 0x30a, 0x301, 0x0, 0x61, 0x30c, 0x0, 0x61, 0x30f, 0x0, 0x61, 0x311, 0x0, 0x61, 0x323, 0x0, 0x61, 0x323, 0x302, 0x0, 0x61, 0x323, 0x306, 0x0, 0x61, 0x325, 0x0, 0x61, 0x328, 0x0, 0x62, 0x307, 0x0, 0x62, 0x323, 0x0, 0x62, 0x331, 0x0, 0x63, 0x301, 0x0, 0x63, 0x302, 0x0, 0x63, 0x307, 0x0, 0x63, 0x30c, 0x0, 0x63, 0x327, 0x0, 0x63, 0x327, 0x301, 0x0, 0x64, 0x307, 0x0, 0x64, 0x30c, 0x0, 0x64, 0x323, 0x0, 0x64, 0x327, 0x0, 0x64, 0x32d, 0x0, 0x64, 0x331, 0x0, 0x65, 0x300, 0x0, 0x65, 0x301, 0x0, 0x65, 0x302, 0x0, 0x65, 0x302, 0x300, 0x0, 0x65, 0x302, 0x301, 0x0, 0x65, 0x302, 0x303, 0x0, 0x65, 0x302, 0x309, 0x0, 0x65, 0x303, 0x0, 0x65, 0x304, 0x0, 0x65, 0x304, 0x300, 0x0, 0x65, 0x304, 0x301, 0x0, 0x65, 0x306, 0x0, 0x65, 0x307, 0x0, 0x65, 0x308, 0x0, 0x65, 0x309, 0x0, 0x65, 0x30c, 0x0, 0x65, 0x30f, 0x0, 0x65, 0x311, 0x0, 0x65, 0x323, 0x0, 0x65, 0x323, 0x302, 0x0, 0x65, 0x327, 0x0, 0x65, 0x327, 0x306, 0x0, 0x65, 0x328, 0x0, 0x65, 0x32d, 0x0, 0x65, 0x330, 0x0, 0x66, 0x307, 0x0, 0x67, 0x301, 0x0, 0x67, 0x302, 0x0, 0x67, 0x304, 0x0, 0x67, 0x306, 0x0, 0x67, 0x307, 0x0, 0x67, 0x30c, 0x0, 0x67, 0x327, 0x0, 0x68, 0x302, 0x0, 0x68, 0x307, 0x0, 0x68, 0x308, 0x0, 0x68, 0x30c, 0x0, 0x68, 0x323, 0x0, 0x68, 0x327, 0x0, 0x68, 0x32e, 0x0, 0x68, 0x331, 0x0, 0x69, 0x300, 0x0, 0x69, 0x301, 0x0, 0x69, 0x302, 0x0, 0x69, 0x303, 0x0, 0x69, 0x304, 0x0, 0x69, 0x306, 0x0, 0x69, 0x308, 0x0, 0x69, 0x308, 0x301, 0x0, 0x69, 0x309, 0x0, 0x69, 0x30c, 0x0, 0x69, 0x30f, 0x0, 0x69, 0x311, 0x0, 0x69, 0x323, 0x0, 0x69, 0x328, 0x0, 0x69, 0x330, 0x0, 0x6a, 0x302, 0x0, 0x6a, 0x30c, 0x0, 0x6b, 0x301, 0x0, 0x6b, 0x30c, 0x0, 0x6b, 0x323, 0x0, 0x6b, 0x327, 0x0, 0x6b, 0x331, 0x0, 0x6c, 0x301, 0x0, 0x6c, 0x30c, 0x0, 0x6c, 0x323, 0x0, 0x6c, 0x323, 0x304, 0x0, 0x6c, 0x327, 0x0, 0x6c, 0x32d, 0x0, 0x6c, 0x331, 0x0, 0x6d, 0x301, 0x0, 0x6d, 0x307, 0x0, 0x6d, 0x323, 0x0, 0x6e, 0x300, 0x0, 0x6e, 0x301, 0x0, 0x6e, 0x303, 0x0, 0x6e, 0x307, 0x0, 0x6e, 0x30c, 0x0, 0x6e, 0x323, 0x0, 0x6e, 0x327, 0x0, 0x6e, 0x32d, 0x0, 0x6e, 0x331, 0x0, 0x6f, 0x300, 0x0, 0x6f, 0x301, 0x0, 0x6f, 0x302, 0x0, 0x6f, 0x302, 0x300, 0x0, 0x6f, 0x302, 0x301, 0x0, 0x6f, 0x302, 0x303, 0x0, 0x6f, 0x302, 0x309, 0x0, 0x6f, 0x303, 0x0, 0x6f, 0x303, 0x301, 0x0, 0x6f, 0x303, 0x304, 0x0, 0x6f, 0x303, 0x308, 0x0, 0x6f, 0x304, 0x0, 0x6f, 0x304, 0x300, 0x0, 0x6f, 0x304, 0x301, 0x0, 0x6f, 0x306, 0x0, 0x6f, 0x307, 0x0, 0x6f, 0x307, 0x304, 0x0, 0x6f, 0x308, 0x0, 0x6f, 0x308, 0x304, 0x0, 0x6f, 0x309, 0x0, 0x6f, 0x30b, 0x0, 0x6f, 0x30c, 0x0, 0x6f, 0x30f, 0x0, 0x6f, 0x311, 0x0, 0x6f, 0x31b, 0x0, 0x6f, 0x31b, 0x300, 0x0, 0x6f, 0x31b, 0x301, 0x0, 0x6f, 0x31b, 0x303, 0x0, 0x6f, 0x31b, 0x309, 0x0, 0x6f, 0x31b, 0x323, 0x0, 0x6f, 0x323, 0x0, 0x6f, 0x323, 0x302, 0x0, 0x6f, 0x328, 0x0, 0x6f, 0x328, 0x304, 0x0, 0x70, 0x301, 0x0, 0x70, 0x307, 0x0, 0x72, 0x301, 0x0, 0x72, 0x307, 0x0, 0x72, 0x30c, 0x0, 0x72, 0x30f, 0x0, 0x72, 0x311, 0x0, 0x72, 0x323, 0x0, 0x72, 0x323, 0x304, 0x0, 0x72, 0x327, 0x0, 0x72, 0x331, 0x0, 0x73, 0x301, 0x0, 0x73, 0x301, 0x307, 0x0, 0x73, 0x302, 0x0, 0x73, 0x307, 0x0, 0x73, 0x30c, 0x0, 0x73, 0x30c, 0x307, 0x0, 0x73, 0x323, 0x0, 0x73, 0x323, 0x307, 0x0, 0x73, 0x326, 0x0, 0x73, 0x327, 0x0, 0x74, 0x307, 0x0, 0x74, 0x308, 0x0, 0x74, 0x30c, 0x0, 0x74, 0x323, 0x0, 0x74, 0x326, 0x0, 0x74, 0x327, 0x0, 0x74, 0x32d, 0x0, 0x74, 0x331, 0x0, 0x75, 0x300, 0x0, 0x75, 0x301, 0x0, 0x75, 0x302, 0x0, 0x75, 0x303, 0x0, 0x75, 0x303, 0x301, 0x0, 0x75, 0x304, 0x0, 0x75, 0x304, 0x308, 0x0, 0x75, 0x306, 0x0, 0x75, 0x308, 0x0, 0x75, 0x308, 0x300, 0x0, 0x75, 0x308, 0x301, 0x0, 0x75, 0x308, 0x304, 0x0, 0x75, 0x308, 0x30c, 0x0, 0x75, 0x309, 0x0, 0x75, 0x30a, 0x0, 0x75, 0x30b, 0x0, 0x75, 0x30c, 0x0, 0x75, 0x30f, 0x0, 0x75, 0x311, 0x0, 0x75, 0x31b, 0x0, 0x75, 0x31b, 0x300, 0x0, 0x75, 0x31b, 0x301, 0x0, 0x75, 0x31b, 0x303, 0x0, 0x75, 0x31b, 0x309, 0x0, 0x75, 0x31b, 0x323, 0x0, 0x75, 0x323, 0x0, 0x75, 0x324, 0x0, 0x75, 0x328, 0x0, 0x75, 0x32d, 0x0, 0x75, 0x330, 0x0, 0x76, 0x303, 0x0, 0x76, 0x323, 0x0, 0x77, 0x300, 0x0, 0x77, 0x301, 0x0, 0x77, 0x302, 0x0, 0x77, 0x307, 0x0, 0x77, 0x308, 0x0, 0x77, 0x30a, 0x0, 0x77, 0x323, 0x0, 0x78, 0x307, 0x0, 0x78, 0x308, 0x0, 0x79, 0x300, 0x0, 0x79, 0x301, 0x0, 0x79, 0x302, 0x0, 0x79, 0x303, 0x0, 0x79, 0x304, 0x0, 0x79, 0x307, 0x0, 0x79, 0x308, 0x0, 0x79, 0x309, 0x0, 0x79, 0x30a, 0x0, 0x79, 0x323, 0x0, 0x7a, 0x301, 0x0, 0x7a, 0x302, 0x0, 0x7a, 0x307, 0x0, 0x7a, 0x30c, 0x0, 0x7a, 0x323, 0x0, 0x7a, 0x331, 0x0, 0xa8, 0x300, 0x0, 0xa8, 0x301, 0x0, 0xa8, 0x342, 0x0, 0xb4, 0x0, 0xb7, 0x0, 0xc6, 0x301, 0x0, 0xc6, 0x304, 0x0, 0xd8, 0x301, 0x0, 0xe6, 0x301, 0x0, 0xe6, 0x304, 0x0, 0xf8, 0x301, 0x0, 0x17f, 0x307, 0x0, 0x1b7, 0x30c, 0x0, 0x292, 0x30c, 0x0, 0x2b9, 0x0, 0x300, 0x0, 0x301, 0x0, 0x308, 0x301, 0x0, 0x313, 0x0, 0x391, 0x300, 0x0, 0x391, 0x301, 0x0, 0x391, 0x304, 0x0, 0x391, 0x306, 0x0, 0x391, 0x313, 0x0, 0x391, 0x313, 0x300, 0x0, 0x391, 0x313, 0x300, 0x345, 0x0, 0x391, 0x313, 0x301, 0x0, 0x391, 0x313, 0x301, 0x345, 0x0, 0x391, 0x313, 0x342, 0x0, 0x391, 0x313, 0x342, 0x345, 0x0, 0x391, 0x313, 0x345, 0x0, 0x391, 0x314, 0x0, 0x391, 0x314, 0x300, 0x0, 0x391, 0x314, 0x300, 0x345, 0x0, 0x391, 0x314, 0x301, 0x0, 0x391, 0x314, 0x301, 0x345, 0x0, 0x391, 0x314, 0x342, 0x0, 0x391, 0x314, 0x342, 0x345, 0x0, 0x391, 0x314, 0x345, 0x0, 0x391, 0x345, 0x0, 0x395, 0x300, 0x0, 0x395, 0x301, 0x0, 0x395, 0x313, 0x0, 0x395, 0x313, 0x300, 0x0, 0x395, 0x313, 0x301, 0x0, 0x395, 0x314, 0x0, 0x395, 0x314, 0x300, 0x0, 0x395, 0x314, 0x301, 0x0, 0x397, 0x300, 0x0, 0x397, 0x301, 0x0, 0x397, 0x313, 0x0, 0x397, 0x313, 0x300, 0x0, 0x397, 0x313, 0x300, 0x345, 0x0, 0x397, 0x313, 0x301, 0x0, 0x397, 0x313, 0x301, 0x345, 0x0, 0x397, 0x313, 0x342, 0x0, 0x397, 0x313, 0x342, 0x345, 0x0, 0x397, 0x313, 0x345, 0x0, 0x397, 0x314, 0x0, 0x397, 0x314, 0x300, 0x0, 0x397, 0x314, 0x300, 0x345, 0x0, 0x397, 0x314, 0x301, 0x0, 0x397, 0x314, 0x301, 0x345, 0x0, 0x397, 0x314, 0x342, 0x0, 0x397, 0x314, 0x342, 0x345, 0x0, 0x397, 0x314, 0x345, 0x0, 0x397, 0x345, 0x0, 0x399, 0x300, 0x0, 0x399, 0x301, 0x0, 0x399, 0x304, 0x0, 0x399, 0x306, 0x0, 0x399, 0x308, 0x0, 0x399, 0x313, 0x0, 0x399, 0x313, 0x300, 0x0, 0x399, 0x313, 0x301, 0x0, 0x399, 0x313, 0x342, 0x0, 0x399, 0x314, 0x0, 0x399, 0x314, 0x300, 0x0, 0x399, 0x314, 0x301, 0x0, 0x399, 0x314, 0x342, 0x0, 0x39f, 0x300, 0x0, 0x39f, 0x301, 0x0, 0x39f, 0x313, 0x0, 0x39f, 0x313, 0x300, 0x0, 0x39f, 0x313, 0x301, 0x0, 0x39f, 0x314, 0x0, 0x39f, 0x314, 0x300, 0x0, 0x39f, 0x314, 0x301, 0x0, 0x3a1, 0x314, 0x0, 0x3a5, 0x300, 0x0, 0x3a5, 0x301, 0x0, 0x3a5, 0x304, 0x0, 0x3a5, 0x306, 0x0, 0x3a5, 0x308, 0x0, 0x3a5, 0x314, 0x0, 0x3a5, 0x314, 0x300, 0x0, 0x3a5, 0x314, 0x301, 0x0, 0x3a5, 0x314, 0x342, 0x0, 0x3a9, 0x0, 0x3a9, 0x300, 0x0, 0x3a9, 0x301, 0x0, 0x3a9, 0x313, 0x0, 0x3a9, 0x313, 0x300, 0x0, 0x3a9, 0x313, 0x300, 0x345, 0x0, 0x3a9, 0x313, 0x301, 0x0, 0x3a9, 0x313, 0x301, 0x345, 0x0, 0x3a9, 0x313, 0x342, 0x0, 0x3a9, 0x313, 0x342, 0x345, 0x0, 0x3a9, 0x313, 0x345, 0x0, 0x3a9, 0x314, 0x0, 0x3a9, 0x314, 0x300, 0x0, 0x3a9, 0x314, 0x300, 0x345, 0x0, 0x3a9, 0x314, 0x301, 0x0, 0x3a9, 0x314, 0x301, 0x345, 0x0, 0x3a9, 0x314, 0x342, 0x0, 0x3a9, 0x314, 0x342, 0x345, 0x0, 0x3a9, 0x314, 0x345, 0x0, 0x3a9, 0x345, 0x0, 0x3b1, 0x300, 0x0, 0x3b1, 0x300, 0x345, 0x0, 0x3b1, 0x301, 0x0, 0x3b1, 0x301, 0x345, 0x0, 0x3b1, 0x304, 0x0, 0x3b1, 0x306, 0x0, 0x3b1, 0x313, 0x0, 0x3b1, 0x313, 0x300, 0x0, 0x3b1, 0x313, 0x300, 0x345, 0x0, 0x3b1, 0x313, 0x301, 0x0, 0x3b1, 0x313, 0x301, 0x345, 0x0, 0x3b1, 0x313, 0x342, 0x0, 0x3b1, 0x313, 0x342, 0x345, 0x0, 0x3b1, 0x313, 0x345, 0x0, 0x3b1, 0x314, 0x0, 0x3b1, 0x314, 0x300, 0x0, 0x3b1, 0x314, 0x300, 0x345, 0x0, 0x3b1, 0x314, 0x301, 0x0, 0x3b1, 0x314, 0x301, 0x345, 0x0, 0x3b1, 0x314, 0x342, 0x0, 0x3b1, 0x314, 0x342, 0x345, 0x0, 0x3b1, 0x314, 0x345, 0x0, 0x3b1, 0x342, 0x0, 0x3b1, 0x342, 0x345, 0x0, 0x3b1, 0x345, 0x0, 0x3b5, 0x300, 0x0, 0x3b5, 0x301, 0x0, 0x3b5, 0x313, 0x0, 0x3b5, 0x313, 0x300, 0x0, 0x3b5, 0x313, 0x301, 0x0, 0x3b5, 0x314, 0x0, 0x3b5, 0x314, 0x300, 0x0, 0x3b5, 0x314, 0x301, 0x0, 0x3b7, 0x300, 0x0, 0x3b7, 0x300, 0x345, 0x0, 0x3b7, 0x301, 0x0, 0x3b7, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x0, 0x3b7, 0x313, 0x300, 0x0, 0x3b7, 0x313, 0x300, 0x345, 0x0, 0x3b7, 0x313, 0x301, 0x0, 0x3b7, 0x313, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x342, 0x0, 0x3b7, 0x313, 0x342, 0x345, 0x0, 0x3b7, 0x313, 0x345, 0x0, 0x3b7, 0x314, 0x0, 0x3b7, 0x314, 0x300, 0x0, 0x3b7, 0x314, 0x300, 0x345, 0x0, 0x3b7, 0x314, 0x301, 0x0, 0x3b7, 0x314, 0x301, 0x345, 0x0, 0x3b7, 0x314, 0x342, 0x0, 0x3b7, 0x314, 0x342, 0x345, 0x0, 0x3b7, 0x314, 0x345, 0x0, 0x3b7, 0x342, 0x0, 0x3b7, 0x342, 0x345, 0x0, 0x3b7, 0x345, 0x0, 0x3b9, 0x0, 0x3b9, 0x300, 0x0, 0x3b9, 0x301, 0x0, 0x3b9, 0x304, 0x0, 0x3b9, 0x306, 0x0, 0x3b9, 0x308, 0x0, 0x3b9, 0x308, 0x300, 0x0, 0x3b9, 0x308, 0x301, 0x0, 0x3b9, 0x308, 0x342, 0x0, 0x3b9, 0x313, 0x0, 0x3b9, 0x313, 0x300, 0x0, 0x3b9, 0x313, 0x301, 0x0, 0x3b9, 0x313, 0x342, 0x0, 0x3b9, 0x314, 0x0, 0x3b9, 0x314, 0x300, 0x0, 0x3b9, 0x314, 0x301, 0x0, 0x3b9, 0x314, 0x342, 0x0, 0x3b9, 0x342, 0x0, 0x3bf, 0x300, 0x0, 0x3bf, 0x301, 0x0, 0x3bf, 0x313, 0x0, 0x3bf, 0x313, 0x300, 0x0, 0x3bf, 0x313, 0x301, 0x0, 0x3bf, 0x314, 0x0, 0x3bf, 0x314, 0x300, 0x0, 0x3bf, 0x314, 0x301, 0x0, 0x3c1, 0x313, 0x0, 0x3c1, 0x314, 0x0, 0x3c5, 0x300, 0x0, 0x3c5, 0x301, 0x0, 0x3c5, 0x304, 0x0, 0x3c5, 0x306, 0x0, 0x3c5, 0x308, 0x0, 0x3c5, 0x308, 0x300, 0x0, 0x3c5, 0x308, 0x301, 0x0, 0x3c5, 0x308, 0x342, 0x0, 0x3c5, 0x313, 0x0, 0x3c5, 0x313, 0x300, 0x0, 0x3c5, 0x313, 0x301, 0x0, 0x3c5, 0x313, 0x342, 0x0, 0x3c5, 0x314, 0x0, 0x3c5, 0x314, 0x300, 0x0, 0x3c5, 0x314, 0x301, 0x0, 0x3c5, 0x314, 0x342, 0x0, 0x3c5, 0x342, 0x0, 0x3c9, 0x300, 0x0, 0x3c9, 0x300, 0x345, 0x0, 0x3c9, 0x301, 0x0, 0x3c9, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x0, 0x3c9, 0x313, 0x300, 0x0, 0x3c9, 0x313, 0x300, 0x345, 0x0, 0x3c9, 0x313, 0x301, 0x0, 0x3c9, 0x313, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x342, 0x0, 0x3c9, 0x313, 0x342, 0x345, 0x0, 0x3c9, 0x313, 0x345, 0x0, 0x3c9, 0x314, 0x0, 0x3c9, 0x314, 0x300, 0x0, 0x3c9, 0x314, 0x300, 0x345, 0x0, 0x3c9, 0x314, 0x301, 0x0, 0x3c9, 0x314, 0x301, 0x345, 0x0, 0x3c9, 0x314, 0x342, 0x0, 0x3c9, 0x314, 0x342, 0x345, 0x0, 0x3c9, 0x314, 0x345, 0x0, 0x3c9, 0x342, 0x0, 0x3c9, 0x342, 0x345, 0x0, 0x3c9, 0x345, 0x0, 0x3d2, 0x301, 0x0, 0x3d2, 0x308, 0x0, 0x406, 0x308, 0x0, 0x410, 0x306, 0x0, 0x410, 0x308, 0x0, 0x413, 0x301, 0x0, 0x415, 0x300, 0x0, 0x415, 0x306, 0x0, 0x415, 0x308, 0x0, 0x416, 0x306, 0x0, 0x416, 0x308, 0x0, 0x417, 0x308, 0x0, 0x418, 0x300, 0x0, 0x418, 0x304, 0x0, 0x418, 0x306, 0x0, 0x418, 0x308, 0x0, 0x41a, 0x301, 0x0, 0x41e, 0x308, 0x0, 0x423, 0x304, 0x0, 0x423, 0x306, 0x0, 0x423, 0x308, 0x0, 0x423, 0x30b, 0x0, 0x427, 0x308, 0x0, 0x42b, 0x308, 0x0, 0x42d, 0x308, 0x0, 0x430, 0x306, 0x0, 0x430, 0x308, 0x0, 0x433, 0x301, 0x0, 0x435, 0x300, 0x0, 0x435, 0x306, 0x0, 0x435, 0x308, 0x0, 0x436, 0x306, 0x0, 0x436, 0x308, 0x0, 0x437, 0x308, 0x0, 0x438, 0x300, 0x0, 0x438, 0x304, 0x0, 0x438, 0x306, 0x0, 0x438, 0x308, 0x0, 0x43a, 0x301, 0x0, 0x43e, 0x308, 0x0, 0x443, 0x304, 0x0, 0x443, 0x306, 0x0, 0x443, 0x308, 0x0, 0x443, 0x30b, 0x0, 0x447, 0x308, 0x0, 0x44b, 0x308, 0x0, 0x44d, 0x308, 0x0, 0x456, 0x308, 0x0, 0x474, 0x30f, 0x0, 0x475, 0x30f, 0x0, 0x4d8, 0x308, 0x0, 0x4d9, 0x308, 0x0, 0x4e8, 0x308, 0x0, 0x4e9, 0x308, 0x0, 0x5d0, 0x5b7, 0x0, 0x5d0, 0x5b8, 0x0, 0x5d0, 0x5bc, 0x0, 0x5d1, 0x5bc, 0x0, 0x5d1, 0x5bf, 0x0, 0x5d2, 0x5bc, 0x0, 0x5d3, 0x5bc, 0x0, 0x5d4, 0x5bc, 0x0, 0x5d5, 0x5b9, 0x0, 0x5d5, 0x5bc, 0x0, 0x5d6, 0x5bc, 0x0, 0x5d8, 0x5bc, 0x0, 0x5d9, 0x5b4, 0x0, 0x5d9, 0x5bc, 0x0, 0x5da, 0x5bc, 0x0, 0x5db, 0x5bc, 0x0, 0x5db, 0x5bf, 0x0, 0x5dc, 0x5bc, 0x0, 0x5de, 0x5bc, 0x0, 0x5e0, 0x5bc, 0x0, 0x5e1, 0x5bc, 0x0, 0x5e3, 0x5bc, 0x0, 0x5e4, 0x5bc, 0x0, 0x5e4, 0x5bf, 0x0, 0x5e6, 0x5bc, 0x0, 0x5e7, 0x5bc, 0x0, 0x5e8, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x5c1, 0x0, 0x5e9, 0x5bc, 0x5c2, 0x0, 0x5e9, 0x5c1, 0x0, 0x5e9, 0x5c2, 0x0, 0x5ea, 0x5bc, 0x0, 0x5f2, 0x5b7, 0x0, 0x627, 0x653, 0x0, 0x627, 0x654, 0x0, 0x627, 0x655, 0x0, 0x648, 0x654, 0x0, 0x64a, 0x654, 0x0, 0x6c1, 0x654, 0x0, 0x6d2, 0x654, 0x0, 0x6d5, 0x654, 0x0, 0x915, 0x93c, 0x0, 0x916, 0x93c, 0x0, 0x917, 0x93c, 0x0, 0x91c, 0x93c, 0x0, 0x921, 0x93c, 0x0, 0x922, 0x93c, 0x0, 0x928, 0x93c, 0x0, 0x92b, 0x93c, 0x0, 0x92f, 0x93c, 0x0, 0x930, 0x93c, 0x0, 0x933, 0x93c, 0x0, 0x9a1, 0x9bc, 0x0, 0x9a2, 0x9bc, 0x0, 0x9af, 0x9bc, 0x0, 0x9c7, 0x9be, 0x0, 0x9c7, 0x9d7, 0x0, 0xa16, 0xa3c, 0x0, 0xa17, 0xa3c, 0x0, 0xa1c, 0xa3c, 0x0, 0xa2b, 0xa3c, 0x0, 0xa32, 0xa3c, 0x0, 0xa38, 0xa3c, 0x0, 0xb21, 0xb3c, 0x0, 0xb22, 0xb3c, 0x0, 0xb47, 0xb3e, 0x0, 0xb47, 0xb56, 0x0, 0xb47, 0xb57, 0x0, 0xb92, 0xbd7, 0x0, 0xbc6, 0xbbe, 0x0, 0xbc6, 0xbd7, 0x0, 0xbc7, 0xbbe, 0x0, 0xc46, 0xc56, 0x0, 0xcbf, 0xcd5, 0x0, 0xcc6, 0xcc2, 0x0, 0xcc6, 0xcc2, 0xcd5, 0x0, 0xcc6, 0xcd5, 0x0, 0xcc6, 0xcd6, 0x0, 0xd46, 0xd3e, 0x0, 0xd46, 0xd57, 0x0, 0xd47, 0xd3e, 0x0, 0xdd9, 0xdca, 0x0, 0xdd9, 0xdcf, 0x0, 0xdd9, 0xdcf, 0xdca, 0x0, 0xdd9, 0xddf, 0x0, 0xf40, 0xfb5, 0x0, 0xf42, 0xfb7, 0x0, 0xf4c, 0xfb7, 0x0, 0xf51, 0xfb7, 0x0, 0xf56, 0xfb7, 0x0, 0xf5b, 0xfb7, 0x0, 0xf71, 0xf72, 0x0, 0xf71, 0xf74, 0x0, 0xf71, 0xf80, 0x0, 0xf90, 0xfb5, 0x0, 0xf92, 0xfb7, 0x0, 0xf9c, 0xfb7, 0x0, 0xfa1, 0xfb7, 0x0, 0xfa6, 0xfb7, 0x0, 0xfab, 0xfb7, 0x0, 0xfb2, 0xf80, 0x0, 0xfb3, 0xf80, 0x0, 0x1025, 0x102e, 0x0, 0x1b05, 0x1b35, 0x0, 0x1b07, 0x1b35, 0x0, 0x1b09, 0x1b35, 0x0, 0x1b0b, 0x1b35, 0x0, 0x1b0d, 0x1b35, 0x0, 0x1b11, 0x1b35, 0x0, 0x1b3a, 0x1b35, 0x0, 0x1b3c, 0x1b35, 0x0, 0x1b3e, 0x1b35, 0x0, 0x1b3f, 0x1b35, 0x0, 0x1b42, 0x1b35, 0x0, 0x1fbf, 0x300, 0x0, 0x1fbf, 0x301, 0x0, 0x1fbf, 0x342, 0x0, 0x1ffe, 0x300, 0x0, 0x1ffe, 0x301, 0x0, 0x1ffe, 0x342, 0x0, 0x2002, 0x0, 0x2003, 0x0, 0x2190, 0x338, 0x0, 0x2192, 0x338, 0x0, 0x2194, 0x338, 0x0, 0x21d0, 0x338, 0x0, 0x21d2, 0x338, 0x0, 0x21d4, 0x338, 0x0, 0x2203, 0x338, 0x0, 0x2208, 0x338, 0x0, 0x220b, 0x338, 0x0, 0x2223, 0x338, 0x0, 0x2225, 0x338, 0x0, 0x223c, 0x338, 0x0, 0x2243, 0x338, 0x0, 0x2245, 0x338, 0x0, 0x2248, 0x338, 0x0, 0x224d, 0x338, 0x0, 0x2261, 0x338, 0x0, 0x2264, 0x338, 0x0, 0x2265, 0x338, 0x0, 0x2272, 0x338, 0x0, 0x2273, 0x338, 0x0, 0x2276, 0x338, 0x0, 0x2277, 0x338, 0x0, 0x227a, 0x338, 0x0, 0x227b, 0x338, 0x0, 0x227c, 0x338, 0x0, 0x227d, 0x338, 0x0, 0x2282, 0x338, 0x0, 0x2283, 0x338, 0x0, 0x2286, 0x338, 0x0, 0x2287, 0x338, 0x0, 0x2291, 0x338, 0x0, 0x2292, 0x338, 0x0, 0x22a2, 0x338, 0x0, 0x22a8, 0x338, 0x0, 0x22a9, 0x338, 0x0, 0x22ab, 0x338, 0x0, 0x22b2, 0x338, 0x0, 0x22b3, 0x338, 0x0, 0x22b4, 0x338, 0x0, 0x22b5, 0x338, 0x0, 0x2add, 0x338, 0x0, 0x3008, 0x0, 0x3009, 0x0, 0x3046, 0x3099, 0x0, 0x304b, 0x3099, 0x0, 0x304d, 0x3099, 0x0, 0x304f, 0x3099, 0x0, 0x3051, 0x3099, 0x0, 0x3053, 0x3099, 0x0, 0x3055, 0x3099, 0x0, 0x3057, 0x3099, 0x0, 0x3059, 0x3099, 0x0, 0x305b, 0x3099, 0x0, 0x305d, 0x3099, 0x0, 0x305f, 0x3099, 0x0, 0x3061, 0x3099, 0x0, 0x3064, 0x3099, 0x0, 0x3066, 0x3099, 0x0, 0x3068, 0x3099, 0x0, 0x306f, 0x3099, 0x0, 0x306f, 0x309a, 0x0, 0x3072, 0x3099, 0x0, 0x3072, 0x309a, 0x0, 0x3075, 0x3099, 0x0, 0x3075, 0x309a, 0x0, 0x3078, 0x3099, 0x0, 0x3078, 0x309a, 0x0, 0x307b, 0x3099, 0x0, 0x307b, 0x309a, 0x0, 0x309d, 0x3099, 0x0, 0x30a6, 0x3099, 0x0, 0x30ab, 0x3099, 0x0, 0x30ad, 0x3099, 0x0, 0x30af, 0x3099, 0x0, 0x30b1, 0x3099, 0x0, 0x30b3, 0x3099, 0x0, 0x30b5, 0x3099, 0x0, 0x30b7, 0x3099, 0x0, 0x30b9, 0x3099, 0x0, 0x30bb, 0x3099, 0x0, 0x30bd, 0x3099, 0x0, 0x30bf, 0x3099, 0x0, 0x30c1, 0x3099, 0x0, 0x30c4, 0x3099, 0x0, 0x30c6, 0x3099, 0x0, 0x30c8, 0x3099, 0x0, 0x30cf, 0x3099, 0x0, 0x30cf, 0x309a, 0x0, 0x30d2, 0x3099, 0x0, 0x30d2, 0x309a, 0x0, 0x30d5, 0x3099, 0x0, 0x30d5, 0x309a, 0x0, 0x30d8, 0x3099, 0x0, 0x30d8, 0x309a, 0x0, 0x30db, 0x3099, 0x0, 0x30db, 0x309a, 0x0, 0x30ef, 0x3099, 0x0, 0x30f0, 0x3099, 0x0, 0x30f1, 0x3099, 0x0, 0x30f2, 0x3099, 0x0, 0x30fd, 0x3099, 0x0, 0x349e, 0x0, 0x34b9, 0x0, 0x34bb, 0x0, 0x34df, 0x0, 0x3515, 0x0, 0x36ee, 0x0, 0x36fc, 0x0, 0x3781, 0x0, 0x382f, 0x0, 0x3862, 0x0, 0x387c, 0x0, 0x38c7, 0x0, 0x38e3, 0x0, 0x391c, 0x0, 0x393a, 0x0, 0x3a2e, 0x0, 0x3a6c, 0x0, 0x3ae4, 0x0, 0x3b08, 0x0, 0x3b19, 0x0, 0x3b49, 0x0, 0x3b9d, 0x0, 0x3c18, 0x0, 0x3c4e, 0x0, 0x3d33, 0x0, 0x3d96, 0x0, 0x3eac, 0x0, 0x3eb8, 0x0, 0x3f1b, 0x0, 0x3ffc, 0x0, 0x4008, 0x0, 0x4018, 0x0, 0x4039, 0x0, 0x4046, 0x0, 0x4096, 0x0, 0x40e3, 0x0, 0x412f, 0x0, 0x4202, 0x0, 0x4227, 0x0, 0x42a0, 0x0, 0x4301, 0x0, 0x4334, 0x0, 0x4359, 0x0, 0x43d5, 0x0, 0x43d9, 0x0, 0x440b, 0x0, 0x446b, 0x0, 0x452b, 0x0, 0x455d, 0x0, 0x4561, 0x0, 0x456b, 0x0, 0x45d7, 0x0, 0x45f9, 0x0, 0x4635, 0x0, 0x46be, 0x0, 0x46c7, 0x0, 0x4995, 0x0, 0x49e6, 0x0, 0x4a6e, 0x0, 0x4a76, 0x0, 0x4ab2, 0x0, 0x4b33, 0x0, 0x4bce, 0x0, 0x4cce, 0x0, 0x4ced, 0x0, 0x4cf8, 0x0, 0x4d56, 0x0, 0x4e0d, 0x0, 0x4e26, 0x0, 0x4e32, 0x0, 0x4e38, 0x0, 0x4e39, 0x0, 0x4e3d, 0x0, 0x4e41, 0x0, 0x4e82, 0x0, 0x4e86, 0x0, 0x4eae, 0x0, 0x4ec0, 0x0, 0x4ecc, 0x0, 0x4ee4, 0x0, 0x4f60, 0x0, 0x4f80, 0x0, 0x4f86, 0x0, 0x4f8b, 0x0, 0x4fae, 0x0, 0x4fbb, 0x0, 0x4fbf, 0x0, 0x5002, 0x0, 0x502b, 0x0, 0x507a, 0x0, 0x5099, 0x0, 0x50cf, 0x0, 0x50da, 0x0, 0x50e7, 0x0, 0x5140, 0x0, 0x5145, 0x0, 0x514d, 0x0, 0x5154, 0x0, 0x5164, 0x0, 0x5167, 0x0, 0x5168, 0x0, 0x5169, 0x0, 0x516d, 0x0, 0x5177, 0x0, 0x5180, 0x0, 0x518d, 0x0, 0x5192, 0x0, 0x5195, 0x0, 0x5197, 0x0, 0x51a4, 0x0, 0x51ac, 0x0, 0x51b5, 0x0, 0x51b7, 0x0, 0x51c9, 0x0, 0x51cc, 0x0, 0x51dc, 0x0, 0x51de, 0x0, 0x51f5, 0x0, 0x5203, 0x0, 0x5207, 0x0, 0x5217, 0x0, 0x5229, 0x0, 0x523a, 0x0, 0x523b, 0x0, 0x5246, 0x0, 0x5272, 0x0, 0x5277, 0x0, 0x5289, 0x0, 0x529b, 0x0, 0x52a3, 0x0, 0x52b3, 0x0, 0x52c7, 0x0, 0x52c9, 0x0, 0x52d2, 0x0, 0x52de, 0x0, 0x52e4, 0x0, 0x52f5, 0x0, 0x52fa, 0x0, 0x5305, 0x0, 0x5306, 0x0, 0x5317, 0x0, 0x533f, 0x0, 0x5349, 0x0, 0x5351, 0x0, 0x535a, 0x0, 0x5373, 0x0, 0x5375, 0x0, 0x537d, 0x0, 0x537f, 0x0, 0x53c3, 0x0, 0x53ca, 0x0, 0x53df, 0x0, 0x53e5, 0x0, 0x53eb, 0x0, 0x53f1, 0x0, 0x5406, 0x0, 0x540f, 0x0, 0x541d, 0x0, 0x5438, 0x0, 0x5442, 0x0, 0x5448, 0x0, 0x5468, 0x0, 0x549e, 0x0, 0x54a2, 0x0, 0x54bd, 0x0, 0x54f6, 0x0, 0x5510, 0x0, 0x5553, 0x0, 0x5555, 0x0, 0x5563, 0x0, 0x5584, 0x0, 0x5587, 0x0, 0x5599, 0x0, 0x559d, 0x0, 0x55ab, 0x0, 0x55b3, 0x0, 0x55c0, 0x0, 0x55c2, 0x0, 0x55e2, 0x0, 0x5606, 0x0, 0x5651, 0x0, 0x5668, 0x0, 0x5674, 0x0, 0x56f9, 0x0, 0x5716, 0x0, 0x5717, 0x0, 0x578b, 0x0, 0x57ce, 0x0, 0x57f4, 0x0, 0x580d, 0x0, 0x5831, 0x0, 0x5832, 0x0, 0x5840, 0x0, 0x585a, 0x0, 0x585e, 0x0, 0x58a8, 0x0, 0x58ac, 0x0, 0x58b3, 0x0, 0x58d8, 0x0, 0x58df, 0x0, 0x58ee, 0x0, 0x58f2, 0x0, 0x58f7, 0x0, 0x5906, 0x0, 0x591a, 0x0, 0x5922, 0x0, 0x5944, 0x0, 0x5948, 0x0, 0x5951, 0x0, 0x5954, 0x0, 0x5962, 0x0, 0x5973, 0x0, 0x59d8, 0x0, 0x59ec, 0x0, 0x5a1b, 0x0, 0x5a27, 0x0, 0x5a62, 0x0, 0x5a66, 0x0, 0x5ab5, 0x0, 0x5b08, 0x0, 0x5b28, 0x0, 0x5b3e, 0x0, 0x5b85, 0x0, 0x5bc3, 0x0, 0x5bd8, 0x0, 0x5be7, 0x0, 0x5bee, 0x0, 0x5bf3, 0x0, 0x5bff, 0x0, 0x5c06, 0x0, 0x5c22, 0x0, 0x5c3f, 0x0, 0x5c60, 0x0, 0x5c62, 0x0, 0x5c64, 0x0, 0x5c65, 0x0, 0x5c6e, 0x0, 0x5c8d, 0x0, 0x5cc0, 0x0, 0x5d19, 0x0, 0x5d43, 0x0, 0x5d50, 0x0, 0x5d6b, 0x0, 0x5d6e, 0x0, 0x5d7c, 0x0, 0x5db2, 0x0, 0x5dba, 0x0, 0x5de1, 0x0, 0x5de2, 0x0, 0x5dfd, 0x0, 0x5e28, 0x0, 0x5e3d, 0x0, 0x5e69, 0x0, 0x5e74, 0x0, 0x5ea6, 0x0, 0x5eb0, 0x0, 0x5eb3, 0x0, 0x5eb6, 0x0, 0x5ec9, 0x0, 0x5eca, 0x0, 0x5ed2, 0x0, 0x5ed3, 0x0, 0x5ed9, 0x0, 0x5eec, 0x0, 0x5efe, 0x0, 0x5f04, 0x0, 0x5f22, 0x0, 0x5f53, 0x0, 0x5f62, 0x0, 0x5f69, 0x0, 0x5f6b, 0x0, 0x5f8b, 0x0, 0x5f9a, 0x0, 0x5fa9, 0x0, 0x5fad, 0x0, 0x5fcd, 0x0, 0x5fd7, 0x0, 0x5ff5, 0x0, 0x5ff9, 0x0, 0x6012, 0x0, 0x601c, 0x0, 0x6075, 0x0, 0x6081, 0x0, 0x6094, 0x0, 0x60c7, 0x0, 0x60d8, 0x0, 0x60e1, 0x0, 0x6108, 0x0, 0x6144, 0x0, 0x6148, 0x0, 0x614c, 0x0, 0x614e, 0x0, 0x6160, 0x0, 0x6168, 0x0, 0x617a, 0x0, 0x618e, 0x0, 0x6190, 0x0, 0x61a4, 0x0, 0x61af, 0x0, 0x61b2, 0x0, 0x61de, 0x0, 0x61f2, 0x0, 0x61f6, 0x0, 0x6200, 0x0, 0x6210, 0x0, 0x621b, 0x0, 0x622e, 0x0, 0x6234, 0x0, 0x625d, 0x0, 0x62b1, 0x0, 0x62c9, 0x0, 0x62cf, 0x0, 0x62d3, 0x0, 0x62d4, 0x0, 0x62fc, 0x0, 0x62fe, 0x0, 0x633d, 0x0, 0x6350, 0x0, 0x6368, 0x0, 0x637b, 0x0, 0x6383, 0x0, 0x63a0, 0x0, 0x63a9, 0x0, 0x63c4, 0x0, 0x63c5, 0x0, 0x63e4, 0x0, 0x641c, 0x0, 0x6422, 0x0, 0x6452, 0x0, 0x6469, 0x0, 0x6477, 0x0, 0x647e, 0x0, 0x649a, 0x0, 0x649d, 0x0, 0x64c4, 0x0, 0x654f, 0x0, 0x6556, 0x0, 0x656c, 0x0, 0x6578, 0x0, 0x6599, 0x0, 0x65c5, 0x0, 0x65e2, 0x0, 0x65e3, 0x0, 0x6613, 0x0, 0x6649, 0x0, 0x6674, 0x0, 0x6688, 0x0, 0x6691, 0x0, 0x669c, 0x0, 0x66b4, 0x0, 0x66c6, 0x0, 0x66f4, 0x0, 0x66f8, 0x0, 0x6700, 0x0, 0x6717, 0x0, 0x671b, 0x0, 0x6721, 0x0, 0x674e, 0x0, 0x6753, 0x0, 0x6756, 0x0, 0x675e, 0x0, 0x677b, 0x0, 0x6785, 0x0, 0x6797, 0x0, 0x67f3, 0x0, 0x67fa, 0x0, 0x6817, 0x0, 0x681f, 0x0, 0x6852, 0x0, 0x6881, 0x0, 0x6885, 0x0, 0x688e, 0x0, 0x68a8, 0x0, 0x6914, 0x0, 0x6942, 0x0, 0x69a3, 0x0, 0x69ea, 0x0, 0x6a02, 0x0, 0x6a13, 0x0, 0x6aa8, 0x0, 0x6ad3, 0x0, 0x6adb, 0x0, 0x6b04, 0x0, 0x6b21, 0x0, 0x6b54, 0x0, 0x6b72, 0x0, 0x6b77, 0x0, 0x6b79, 0x0, 0x6b9f, 0x0, 0x6bae, 0x0, 0x6bba, 0x0, 0x6bbb, 0x0, 0x6c4e, 0x0, 0x6c67, 0x0, 0x6c88, 0x0, 0x6cbf, 0x0, 0x6ccc, 0x0, 0x6ccd, 0x0, 0x6ce5, 0x0, 0x6d16, 0x0, 0x6d1b, 0x0, 0x6d1e, 0x0, 0x6d34, 0x0, 0x6d3e, 0x0, 0x6d41, 0x0, 0x6d69, 0x0, 0x6d6a, 0x0, 0x6d77, 0x0, 0x6d78, 0x0, 0x6d85, 0x0, 0x6dcb, 0x0, 0x6dda, 0x0, 0x6dea, 0x0, 0x6df9, 0x0, 0x6e1a, 0x0, 0x6e2f, 0x0, 0x6e6e, 0x0, 0x6e9c, 0x0, 0x6eba, 0x0, 0x6ec7, 0x0, 0x6ecb, 0x0, 0x6ed1, 0x0, 0x6edb, 0x0, 0x6f0f, 0x0, 0x6f22, 0x0, 0x6f23, 0x0, 0x6f6e, 0x0, 0x6fc6, 0x0, 0x6feb, 0x0, 0x6ffe, 0x0, 0x701b, 0x0, 0x701e, 0x0, 0x7039, 0x0, 0x704a, 0x0, 0x7070, 0x0, 0x7077, 0x0, 0x707d, 0x0, 0x7099, 0x0, 0x70ad, 0x0, 0x70c8, 0x0, 0x70d9, 0x0, 0x7145, 0x0, 0x7149, 0x0, 0x716e, 0x0, 0x719c, 0x0, 0x71ce, 0x0, 0x71d0, 0x0, 0x7210, 0x0, 0x721b, 0x0, 0x7228, 0x0, 0x722b, 0x0, 0x7235, 0x0, 0x7250, 0x0, 0x7262, 0x0, 0x7280, 0x0, 0x7295, 0x0, 0x72af, 0x0, 0x72c0, 0x0, 0x72fc, 0x0, 0x732a, 0x0, 0x7375, 0x0, 0x737a, 0x0, 0x7387, 0x0, 0x738b, 0x0, 0x73a5, 0x0, 0x73b2, 0x0, 0x73de, 0x0, 0x7406, 0x0, 0x7409, 0x0, 0x7422, 0x0, 0x7447, 0x0, 0x745c, 0x0, 0x7469, 0x0, 0x7471, 0x0, 0x7485, 0x0, 0x7489, 0x0, 0x7498, 0x0, 0x74ca, 0x0, 0x7506, 0x0, 0x7524, 0x0, 0x753b, 0x0, 0x753e, 0x0, 0x7559, 0x0, 0x7565, 0x0, 0x7570, 0x0, 0x75e2, 0x0, 0x7610, 0x0, 0x761d, 0x0, 0x761f, 0x0, 0x7642, 0x0, 0x7669, 0x0, 0x76ca, 0x0, 0x76db, 0x0, 0x76e7, 0x0, 0x76f4, 0x0, 0x7701, 0x0, 0x771e, 0x0, 0x771f, 0x0, 0x7740, 0x0, 0x774a, 0x0, 0x778b, 0x0, 0x77a7, 0x0, 0x784e, 0x0, 0x786b, 0x0, 0x788c, 0x0, 0x7891, 0x0, 0x78ca, 0x0, 0x78cc, 0x0, 0x78fb, 0x0, 0x792a, 0x0, 0x793c, 0x0, 0x793e, 0x0, 0x7948, 0x0, 0x7949, 0x0, 0x7950, 0x0, 0x7956, 0x0, 0x795d, 0x0, 0x795e, 0x0, 0x7965, 0x0, 0x797f, 0x0, 0x798d, 0x0, 0x798e, 0x0, 0x798f, 0x0, 0x79ae, 0x0, 0x79ca, 0x0, 0x79eb, 0x0, 0x7a1c, 0x0, 0x7a40, 0x0, 0x7a4a, 0x0, 0x7a4f, 0x0, 0x7a81, 0x0, 0x7ab1, 0x0, 0x7acb, 0x0, 0x7aee, 0x0, 0x7b20, 0x0, 0x7bc0, 0x0, 0x7bc6, 0x0, 0x7bc9, 0x0, 0x7c3e, 0x0, 0x7c60, 0x0, 0x7c7b, 0x0, 0x7c92, 0x0, 0x7cbe, 0x0, 0x7cd2, 0x0, 0x7cd6, 0x0, 0x7ce3, 0x0, 0x7ce7, 0x0, 0x7ce8, 0x0, 0x7d00, 0x0, 0x7d10, 0x0, 0x7d22, 0x0, 0x7d2f, 0x0, 0x7d5b, 0x0, 0x7d63, 0x0, 0x7da0, 0x0, 0x7dbe, 0x0, 0x7dc7, 0x0, 0x7df4, 0x0, 0x7e02, 0x0, 0x7e09, 0x0, 0x7e37, 0x0, 0x7e41, 0x0, 0x7e45, 0x0, 0x7f3e, 0x0, 0x7f72, 0x0, 0x7f79, 0x0, 0x7f7a, 0x0, 0x7f85, 0x0, 0x7f95, 0x0, 0x7f9a, 0x0, 0x7fbd, 0x0, 0x7ffa, 0x0, 0x8001, 0x0, 0x8005, 0x0, 0x8046, 0x0, 0x8060, 0x0, 0x806f, 0x0, 0x8070, 0x0, 0x807e, 0x0, 0x808b, 0x0, 0x80ad, 0x0, 0x80b2, 0x0, 0x8103, 0x0, 0x813e, 0x0, 0x81d8, 0x0, 0x81e8, 0x0, 0x81ed, 0x0, 0x8201, 0x0, 0x8204, 0x0, 0x8218, 0x0, 0x826f, 0x0, 0x8279, 0x0, 0x828b, 0x0, 0x8291, 0x0, 0x829d, 0x0, 0x82b1, 0x0, 0x82b3, 0x0, 0x82bd, 0x0, 0x82e5, 0x0, 0x82e6, 0x0, 0x831d, 0x0, 0x8323, 0x0, 0x8336, 0x0, 0x8352, 0x0, 0x8353, 0x0, 0x8363, 0x0, 0x83ad, 0x0, 0x83bd, 0x0, 0x83c9, 0x0, 0x83ca, 0x0, 0x83cc, 0x0, 0x83dc, 0x0, 0x83e7, 0x0, 0x83ef, 0x0, 0x83f1, 0x0, 0x843d, 0x0, 0x8449, 0x0, 0x8457, 0x0, 0x84ee, 0x0, 0x84f1, 0x0, 0x84f3, 0x0, 0x84fc, 0x0, 0x8516, 0x0, 0x8564, 0x0, 0x85cd, 0x0, 0x85fa, 0x0, 0x8606, 0x0, 0x8612, 0x0, 0x862d, 0x0, 0x863f, 0x0, 0x8650, 0x0, 0x865c, 0x0, 0x8667, 0x0, 0x8669, 0x0, 0x8688, 0x0, 0x86a9, 0x0, 0x86e2, 0x0, 0x870e, 0x0, 0x8728, 0x0, 0x876b, 0x0, 0x8779, 0x0, 0x8786, 0x0, 0x87ba, 0x0, 0x87e1, 0x0, 0x8801, 0x0, 0x881f, 0x0, 0x884c, 0x0, 0x8860, 0x0, 0x8863, 0x0, 0x88c2, 0x0, 0x88cf, 0x0, 0x88d7, 0x0, 0x88de, 0x0, 0x88e1, 0x0, 0x88f8, 0x0, 0x88fa, 0x0, 0x8910, 0x0, 0x8941, 0x0, 0x8964, 0x0, 0x8986, 0x0, 0x898b, 0x0, 0x8996, 0x0, 0x8aa0, 0x0, 0x8aaa, 0x0, 0x8abf, 0x0, 0x8acb, 0x0, 0x8ad2, 0x0, 0x8ad6, 0x0, 0x8aed, 0x0, 0x8af8, 0x0, 0x8afe, 0x0, 0x8b01, 0x0, 0x8b39, 0x0, 0x8b58, 0x0, 0x8b80, 0x0, 0x8b8a, 0x0, 0x8c48, 0x0, 0x8c55, 0x0, 0x8cab, 0x0, 0x8cc1, 0x0, 0x8cc2, 0x0, 0x8cc8, 0x0, 0x8cd3, 0x0, 0x8d08, 0x0, 0x8d1b, 0x0, 0x8d77, 0x0, 0x8dbc, 0x0, 0x8dcb, 0x0, 0x8def, 0x0, 0x8df0, 0x0, 0x8eca, 0x0, 0x8ed4, 0x0, 0x8f26, 0x0, 0x8f2a, 0x0, 0x8f38, 0x0, 0x8f3b, 0x0, 0x8f62, 0x0, 0x8f9e, 0x0, 0x8fb0, 0x0, 0x8fb6, 0x0, 0x9023, 0x0, 0x9038, 0x0, 0x9072, 0x0, 0x907c, 0x0, 0x908f, 0x0, 0x9094, 0x0, 0x90ce, 0x0, 0x90de, 0x0, 0x90f1, 0x0, 0x90fd, 0x0, 0x9111, 0x0, 0x911b, 0x0, 0x916a, 0x0, 0x9199, 0x0, 0x91b4, 0x0, 0x91cc, 0x0, 0x91cf, 0x0, 0x91d1, 0x0, 0x9234, 0x0, 0x9238, 0x0, 0x9276, 0x0, 0x927c, 0x0, 0x92d7, 0x0, 0x92d8, 0x0, 0x9304, 0x0, 0x934a, 0x0, 0x93f9, 0x0, 0x9415, 0x0, 0x958b, 0x0, 0x95ad, 0x0, 0x95b7, 0x0, 0x962e, 0x0, 0x964b, 0x0, 0x964d, 0x0, 0x9675, 0x0, 0x9678, 0x0, 0x967c, 0x0, 0x9686, 0x0, 0x96a3, 0x0, 0x96b7, 0x0, 0x96b8, 0x0, 0x96c3, 0x0, 0x96e2, 0x0, 0x96e3, 0x0, 0x96f6, 0x0, 0x96f7, 0x0, 0x9723, 0x0, 0x9732, 0x0, 0x9748, 0x0, 0x9756, 0x0, 0x97db, 0x0, 0x97e0, 0x0, 0x97ff, 0x0, 0x980b, 0x0, 0x9818, 0x0, 0x9829, 0x0, 0x983b, 0x0, 0x985e, 0x0, 0x98e2, 0x0, 0x98ef, 0x0, 0x98fc, 0x0, 0x9928, 0x0, 0x9929, 0x0, 0x99a7, 0x0, 0x99c2, 0x0, 0x99f1, 0x0, 0x99fe, 0x0, 0x9a6a, 0x0, 0x9b12, 0x0, 0x9b6f, 0x0, 0x9c40, 0x0, 0x9c57, 0x0, 0x9cfd, 0x0, 0x9d67, 0x0, 0x9db4, 0x0, 0x9dfa, 0x0, 0x9e1e, 0x0, 0x9e7f, 0x0, 0x9e97, 0x0, 0x9e9f, 0x0, 0x9ebb, 0x0, 0x9ece, 0x0, 0x9ef9, 0x0, 0x9efe, 0x0, 0x9f05, 0x0, 0x9f0f, 0x0, 0x9f16, 0x0, 0x9f3b, 0x0, 0x9f43, 0x0, 0x9f8d, 0x0, 0x9f8e, 0x0, 0x9f9c, 0x0, 0x11099, 0x110ba, 0x0, 0x1109b, 0x110ba, 0x0, 0x110a5, 0x110ba, 0x0, 0x11131, 0x11127, 0x0, 0x11132, 0x11127, 0x0, 0x11347, 0x1133e, 0x0, 0x11347, 0x11357, 0x0, 0x114b9, 0x114b0, 0x0, 0x114b9, 0x114ba, 0x0, 0x114b9, 0x114bd, 0x0, 0x115b8, 0x115af, 0x0, 0x115b9, 0x115af, 0x0, 0x11935, 0x11930, 0x0, 0x1d157, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x1d16e, 0x0, 0x1d158, 0x1d165, 0x1d16f, 0x0, 0x1d158, 0x1d165, 0x1d170, 0x0, 0x1d158, 0x1d165, 0x1d171, 0x0, 0x1d158, 0x1d165, 0x1d172, 0x0, 0x1d1b9, 0x1d165, 0x0, 0x1d1b9, 0x1d165, 0x1d16e, 0x0, 0x1d1b9, 0x1d165, 0x1d16f, 0x0, 0x1d1ba, 0x1d165, 0x0, 0x1d1ba, 0x1d165, 0x1d16e, 0x0, 0x1d1ba, 0x1d165, 0x1d16f, 0x0, 0x20122, 0x0, 0x2051c, 0x0, 0x20525, 0x0, 0x2054b, 0x0, 0x2063a, 0x0, 0x20804, 0x0, 0x208de, 0x0, 0x20a2c, 0x0, 0x20b63, 0x0, 0x214e4, 0x0, 0x216a8, 0x0, 0x216ea, 0x0, 0x219c8, 0x0, 0x21b18, 0x0, 0x21d0b, 0x0, 0x21de4, 0x0, 0x21de6, 0x0, 0x22183, 0x0, 0x2219f, 0x0, 0x22331, 0x0, 0x226d4, 0x0, 0x22844, 0x0, 0x2284a, 0x0, 0x22b0c, 0x0, 0x22bf1, 0x0, 0x2300a, 0x0, 0x232b8, 0x0, 0x2335f, 0x0, 0x23393, 0x0, 0x2339c, 0x0, 0x233c3, 0x0, 0x233d5, 0x0, 0x2346d, 0x0, 0x236a3, 0x0, 0x238a7, 0x0, 0x23a8d, 0x0, 0x23afa, 0x0, 0x23cbc, 0x0, 0x23d1e, 0x0, 0x23ed1, 0x0, 0x23f5e, 0x0, 0x23f8e, 0x0, 0x24263, 0x0, 0x242ee, 0x0, 0x243ab, 0x0, 0x24608, 0x0, 0x24735, 0x0, 0x24814, 0x0, 0x24c36, 0x0, 0x24c92, 0x0, 0x24fa1, 0x0, 0x24fb8, 0x0, 0x25044, 0x0, 0x250f2, 0x0, 0x250f3, 0x0, 0x25119, 0x0, 0x25133, 0x0, 0x25249, 0x0, 0x2541d, 0x0, 0x25626, 0x0, 0x2569a, 0x0, 0x256c5, 0x0, 0x2597c, 0x0, 0x25aa7, 0x0, 0x25bab, 0x0, 0x25c80, 0x0, 0x25cd0, 0x0, 0x25f86, 0x0, 0x261da, 0x0, 0x26228, 0x0, 0x26247, 0x0, 0x262d9, 0x0, 0x2633e, 0x0, 0x264da, 0x0, 0x26523, 0x0, 0x265a8, 0x0, 0x267a7, 0x0, 0x267b5, 0x0, 0x26b3c, 0x0, 0x26c36, 0x0, 0x26cd5, 0x0, 0x26d6b, 0x0, 0x26f2c, 0x0, 0x26fb1, 0x0, 0x270d2, 0x0, 0x273ca, 0x0, 0x27667, 0x0, 0x278ae, 0x0, 0x27966, 0x0, 0x27ca8, 0x0, 0x27ed3, 0x0, 0x27f2f, 0x0, 0x285d2, 0x0, 0x285ed, 0x0, 0x2872e, 0x0, 0x28bfa, 0x0, 0x28d77, 0x0, 0x29145, 0x0, 0x291df, 0x0, 0x2921a, 0x0, 0x2940a, 0x0, 0x29496, 0x0, 0x295b6, 0x0, 0x29b30, 0x0, 0x2a0ce, 0x0, 0x2a105, 0x0, 0x2a20e, 0x0, 0x2a291, 0x0, 0x2a392, 0x0, 0x2a600, 0x0]; return t; } -_IDCA decompCompatTable() @safe pure nothrow { static _IDCA t = [ 0x0, 0x20, 0x0, 0x20, 0x301, 0x0, 0x20, 0x303, 0x0, 0x20, 0x304, 0x0, 0x20, 0x305, 0x0, 0x20, 0x306, 0x0, 0x20, 0x307, 0x0, 0x20, 0x308, 0x0, 0x20, 0x308, 0x300, 0x0, 0x20, 0x308, 0x301, 0x0, 0x20, 0x308, 0x342, 0x0, 0x20, 0x30a, 0x0, 0x20, 0x30b, 0x0, 0x20, 0x313, 0x0, 0x20, 0x313, 0x300, 0x0, 0x20, 0x313, 0x301, 0x0, 0x20, 0x313, 0x342, 0x0, 0x20, 0x314, 0x0, 0x20, 0x314, 0x300, 0x0, 0x20, 0x314, 0x301, 0x0, 0x20, 0x314, 0x342, 0x0, 0x20, 0x327, 0x0, 0x20, 0x328, 0x0, 0x20, 0x333, 0x0, 0x20, 0x342, 0x0, 0x20, 0x345, 0x0, 0x20, 0x64b, 0x0, 0x20, 0x64c, 0x0, 0x20, 0x64c, 0x651, 0x0, 0x20, 0x64d, 0x0, 0x20, 0x64d, 0x651, 0x0, 0x20, 0x64e, 0x0, 0x20, 0x64e, 0x651, 0x0, 0x20, 0x64f, 0x0, 0x20, 0x64f, 0x651, 0x0, 0x20, 0x650, 0x0, 0x20, 0x650, 0x651, 0x0, 0x20, 0x651, 0x0, 0x20, 0x651, 0x670, 0x0, 0x20, 0x652, 0x0, 0x20, 0x3099, 0x0, 0x20, 0x309a, 0x0, 0x21, 0x0, 0x21, 0x21, 0x0, 0x21, 0x3f, 0x0, 0x22, 0x0, 0x23, 0x0, 0x24, 0x0, 0x25, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x28, 0x31, 0x29, 0x0, 0x28, 0x31, 0x30, 0x29, 0x0, 0x28, 0x31, 0x31, 0x29, 0x0, 0x28, 0x31, 0x32, 0x29, 0x0, 0x28, 0x31, 0x33, 0x29, 0x0, 0x28, 0x31, 0x34, 0x29, 0x0, 0x28, 0x31, 0x35, 0x29, 0x0, 0x28, 0x31, 0x36, 0x29, 0x0, 0x28, 0x31, 0x37, 0x29, 0x0, 0x28, 0x31, 0x38, 0x29, 0x0, 0x28, 0x31, 0x39, 0x29, 0x0, 0x28, 0x32, 0x29, 0x0, 0x28, 0x32, 0x30, 0x29, 0x0, 0x28, 0x33, 0x29, 0x0, 0x28, 0x34, 0x29, 0x0, 0x28, 0x35, 0x29, 0x0, 0x28, 0x36, 0x29, 0x0, 0x28, 0x37, 0x29, 0x0, 0x28, 0x38, 0x29, 0x0, 0x28, 0x39, 0x29, 0x0, 0x28, 0x41, 0x29, 0x0, 0x28, 0x42, 0x29, 0x0, 0x28, 0x43, 0x29, 0x0, 0x28, 0x44, 0x29, 0x0, 0x28, 0x45, 0x29, 0x0, 0x28, 0x46, 0x29, 0x0, 0x28, 0x47, 0x29, 0x0, 0x28, 0x48, 0x29, 0x0, 0x28, 0x49, 0x29, 0x0, 0x28, 0x4a, 0x29, 0x0, 0x28, 0x4b, 0x29, 0x0, 0x28, 0x4c, 0x29, 0x0, 0x28, 0x4d, 0x29, 0x0, 0x28, 0x4e, 0x29, 0x0, 0x28, 0x4f, 0x29, 0x0, 0x28, 0x50, 0x29, 0x0, 0x28, 0x51, 0x29, 0x0, 0x28, 0x52, 0x29, 0x0, 0x28, 0x53, 0x29, 0x0, 0x28, 0x54, 0x29, 0x0, 0x28, 0x55, 0x29, 0x0, 0x28, 0x56, 0x29, 0x0, 0x28, 0x57, 0x29, 0x0, 0x28, 0x58, 0x29, 0x0, 0x28, 0x59, 0x29, 0x0, 0x28, 0x5a, 0x29, 0x0, 0x28, 0x61, 0x29, 0x0, 0x28, 0x62, 0x29, 0x0, 0x28, 0x63, 0x29, 0x0, 0x28, 0x64, 0x29, 0x0, 0x28, 0x65, 0x29, 0x0, 0x28, 0x66, 0x29, 0x0, 0x28, 0x67, 0x29, 0x0, 0x28, 0x68, 0x29, 0x0, 0x28, 0x69, 0x29, 0x0, 0x28, 0x6a, 0x29, 0x0, 0x28, 0x6b, 0x29, 0x0, 0x28, 0x6c, 0x29, 0x0, 0x28, 0x6d, 0x29, 0x0, 0x28, 0x6e, 0x29, 0x0, 0x28, 0x6f, 0x29, 0x0, 0x28, 0x70, 0x29, 0x0, 0x28, 0x71, 0x29, 0x0, 0x28, 0x72, 0x29, 0x0, 0x28, 0x73, 0x29, 0x0, 0x28, 0x74, 0x29, 0x0, 0x28, 0x75, 0x29, 0x0, 0x28, 0x76, 0x29, 0x0, 0x28, 0x77, 0x29, 0x0, 0x28, 0x78, 0x29, 0x0, 0x28, 0x79, 0x29, 0x0, 0x28, 0x7a, 0x29, 0x0, 0x28, 0x1100, 0x29, 0x0, 0x28, 0x1100, 0x1161, 0x29, 0x0, 0x28, 0x1102, 0x29, 0x0, 0x28, 0x1102, 0x1161, 0x29, 0x0, 0x28, 0x1103, 0x29, 0x0, 0x28, 0x1103, 0x1161, 0x29, 0x0, 0x28, 0x1105, 0x29, 0x0, 0x28, 0x1105, 0x1161, 0x29, 0x0, 0x28, 0x1106, 0x29, 0x0, 0x28, 0x1106, 0x1161, 0x29, 0x0, 0x28, 0x1107, 0x29, 0x0, 0x28, 0x1107, 0x1161, 0x29, 0x0, 0x28, 0x1109, 0x29, 0x0, 0x28, 0x1109, 0x1161, 0x29, 0x0, 0x28, 0x110b, 0x29, 0x0, 0x28, 0x110b, 0x1161, 0x29, 0x0, 0x28, 0x110b, 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x0, 0x28, 0x110b, 0x1169, 0x1112, 0x116e, 0x29, 0x0, 0x28, 0x110c, 0x29, 0x0, 0x28, 0x110c, 0x1161, 0x29, 0x0, 0x28, 0x110c, 0x116e, 0x29, 0x0, 0x28, 0x110e, 0x29, 0x0, 0x28, 0x110e, 0x1161, 0x29, 0x0, 0x28, 0x110f, 0x29, 0x0, 0x28, 0x110f, 0x1161, 0x29, 0x0, 0x28, 0x1110, 0x29, 0x0, 0x28, 0x1110, 0x1161, 0x29, 0x0, 0x28, 0x1111, 0x29, 0x0, 0x28, 0x1111, 0x1161, 0x29, 0x0, 0x28, 0x1112, 0x29, 0x0, 0x28, 0x1112, 0x1161, 0x29, 0x0, 0x28, 0x4e00, 0x29, 0x0, 0x28, 0x4e03, 0x29, 0x0, 0x28, 0x4e09, 0x29, 0x0, 0x28, 0x4e5d, 0x29, 0x0, 0x28, 0x4e8c, 0x29, 0x0, 0x28, 0x4e94, 0x29, 0x0, 0x28, 0x4ee3, 0x29, 0x0, 0x28, 0x4f01, 0x29, 0x0, 0x28, 0x4f11, 0x29, 0x0, 0x28, 0x516b, 0x29, 0x0, 0x28, 0x516d, 0x29, 0x0, 0x28, 0x52b4, 0x29, 0x0, 0x28, 0x5341, 0x29, 0x0, 0x28, 0x5354, 0x29, 0x0, 0x28, 0x540d, 0x29, 0x0, 0x28, 0x547c, 0x29, 0x0, 0x28, 0x56db, 0x29, 0x0, 0x28, 0x571f, 0x29, 0x0, 0x28, 0x5b66, 0x29, 0x0, 0x28, 0x65e5, 0x29, 0x0, 0x28, 0x6708, 0x29, 0x0, 0x28, 0x6709, 0x29, 0x0, 0x28, 0x6728, 0x29, 0x0, 0x28, 0x682a, 0x29, 0x0, 0x28, 0x6c34, 0x29, 0x0, 0x28, 0x706b, 0x29, 0x0, 0x28, 0x7279, 0x29, 0x0, 0x28, 0x76e3, 0x29, 0x0, 0x28, 0x793e, 0x29, 0x0, 0x28, 0x795d, 0x29, 0x0, 0x28, 0x796d, 0x29, 0x0, 0x28, 0x81ea, 0x29, 0x0, 0x28, 0x81f3, 0x29, 0x0, 0x28, 0x8ca1, 0x29, 0x0, 0x28, 0x8cc7, 0x29, 0x0, 0x28, 0x91d1, 0x29, 0x0, 0x29, 0x0, 0x2a, 0x0, 0x2b, 0x0, 0x2c, 0x0, 0x2d, 0x0, 0x2e, 0x0, 0x2e, 0x2e, 0x0, 0x2e, 0x2e, 0x2e, 0x0, 0x2f, 0x0, 0x30, 0x0, 0x30, 0x2c, 0x0, 0x30, 0x2e, 0x0, 0x30, 0x2044, 0x33, 0x0, 0x30, 0x70b9, 0x0, 0x31, 0x0, 0x31, 0x2c, 0x0, 0x31, 0x2e, 0x0, 0x31, 0x30, 0x0, 0x31, 0x30, 0x2e, 0x0, 0x31, 0x30, 0x65e5, 0x0, 0x31, 0x30, 0x6708, 0x0, 0x31, 0x30, 0x70b9, 0x0, 0x31, 0x31, 0x0, 0x31, 0x31, 0x2e, 0x0, 0x31, 0x31, 0x65e5, 0x0, 0x31, 0x31, 0x6708, 0x0, 0x31, 0x31, 0x70b9, 0x0, 0x31, 0x32, 0x0, 0x31, 0x32, 0x2e, 0x0, 0x31, 0x32, 0x65e5, 0x0, 0x31, 0x32, 0x6708, 0x0, 0x31, 0x32, 0x70b9, 0x0, 0x31, 0x33, 0x0, 0x31, 0x33, 0x2e, 0x0, 0x31, 0x33, 0x65e5, 0x0, 0x31, 0x33, 0x70b9, 0x0, 0x31, 0x34, 0x0, 0x31, 0x34, 0x2e, 0x0, 0x31, 0x34, 0x65e5, 0x0, 0x31, 0x34, 0x70b9, 0x0, 0x31, 0x35, 0x0, 0x31, 0x35, 0x2e, 0x0, 0x31, 0x35, 0x65e5, 0x0, 0x31, 0x35, 0x70b9, 0x0, 0x31, 0x36, 0x0, 0x31, 0x36, 0x2e, 0x0, 0x31, 0x36, 0x65e5, 0x0, 0x31, 0x36, 0x70b9, 0x0, 0x31, 0x37, 0x0, 0x31, 0x37, 0x2e, 0x0, 0x31, 0x37, 0x65e5, 0x0, 0x31, 0x37, 0x70b9, 0x0, 0x31, 0x38, 0x0, 0x31, 0x38, 0x2e, 0x0, 0x31, 0x38, 0x65e5, 0x0, 0x31, 0x38, 0x70b9, 0x0, 0x31, 0x39, 0x0, 0x31, 0x39, 0x2e, 0x0, 0x31, 0x39, 0x65e5, 0x0, 0x31, 0x39, 0x70b9, 0x0, 0x31, 0x2044, 0x0, 0x31, 0x2044, 0x31, 0x30, 0x0, 0x31, 0x2044, 0x32, 0x0, 0x31, 0x2044, 0x33, 0x0, 0x31, 0x2044, 0x34, 0x0, 0x31, 0x2044, 0x35, 0x0, 0x31, 0x2044, 0x36, 0x0, 0x31, 0x2044, 0x37, 0x0, 0x31, 0x2044, 0x38, 0x0, 0x31, 0x2044, 0x39, 0x0, 0x31, 0x65e5, 0x0, 0x31, 0x6708, 0x0, 0x31, 0x70b9, 0x0, 0x32, 0x0, 0x32, 0x2c, 0x0, 0x32, 0x2e, 0x0, 0x32, 0x30, 0x0, 0x32, 0x30, 0x2e, 0x0, 0x32, 0x30, 0x65e5, 0x0, 0x32, 0x30, 0x70b9, 0x0, 0x32, 0x31, 0x0, 0x32, 0x31, 0x65e5, 0x0, 0x32, 0x31, 0x70b9, 0x0, 0x32, 0x32, 0x0, 0x32, 0x32, 0x65e5, 0x0, 0x32, 0x32, 0x70b9, 0x0, 0x32, 0x33, 0x0, 0x32, 0x33, 0x65e5, 0x0, 0x32, 0x33, 0x70b9, 0x0, 0x32, 0x34, 0x0, 0x32, 0x34, 0x65e5, 0x0, 0x32, 0x34, 0x70b9, 0x0, 0x32, 0x35, 0x0, 0x32, 0x35, 0x65e5, 0x0, 0x32, 0x36, 0x0, 0x32, 0x36, 0x65e5, 0x0, 0x32, 0x37, 0x0, 0x32, 0x37, 0x65e5, 0x0, 0x32, 0x38, 0x0, 0x32, 0x38, 0x65e5, 0x0, 0x32, 0x39, 0x0, 0x32, 0x39, 0x65e5, 0x0, 0x32, 0x2044, 0x33, 0x0, 0x32, 0x2044, 0x35, 0x0, 0x32, 0x65e5, 0x0, 0x32, 0x6708, 0x0, 0x32, 0x70b9, 0x0, 0x33, 0x0, 0x33, 0x2c, 0x0, 0x33, 0x2e, 0x0, 0x33, 0x30, 0x0, 0x33, 0x30, 0x65e5, 0x0, 0x33, 0x31, 0x0, 0x33, 0x31, 0x65e5, 0x0, 0x33, 0x32, 0x0, 0x33, 0x33, 0x0, 0x33, 0x34, 0x0, 0x33, 0x35, 0x0, 0x33, 0x36, 0x0, 0x33, 0x37, 0x0, 0x33, 0x38, 0x0, 0x33, 0x39, 0x0, 0x33, 0x2044, 0x34, 0x0, 0x33, 0x2044, 0x35, 0x0, 0x33, 0x2044, 0x38, 0x0, 0x33, 0x65e5, 0x0, 0x33, 0x6708, 0x0, 0x33, 0x70b9, 0x0, 0x34, 0x0, 0x34, 0x2c, 0x0, 0x34, 0x2e, 0x0, 0x34, 0x30, 0x0, 0x34, 0x31, 0x0, 0x34, 0x32, 0x0, 0x34, 0x33, 0x0, 0x34, 0x34, 0x0, 0x34, 0x35, 0x0, 0x34, 0x36, 0x0, 0x34, 0x37, 0x0, 0x34, 0x38, 0x0, 0x34, 0x39, 0x0, 0x34, 0x2044, 0x35, 0x0, 0x34, 0x65e5, 0x0, 0x34, 0x6708, 0x0, 0x34, 0x70b9, 0x0, 0x35, 0x0, 0x35, 0x2c, 0x0, 0x35, 0x2e, 0x0, 0x35, 0x30, 0x0, 0x35, 0x2044, 0x36, 0x0, 0x35, 0x2044, 0x38, 0x0, 0x35, 0x65e5, 0x0, 0x35, 0x6708, 0x0, 0x35, 0x70b9, 0x0, 0x36, 0x0, 0x36, 0x2c, 0x0, 0x36, 0x2e, 0x0, 0x36, 0x65e5, 0x0, 0x36, 0x6708, 0x0, 0x36, 0x70b9, 0x0, 0x37, 0x0, 0x37, 0x2c, 0x0, 0x37, 0x2e, 0x0, 0x37, 0x2044, 0x38, 0x0, 0x37, 0x65e5, 0x0, 0x37, 0x6708, 0x0, 0x37, 0x70b9, 0x0, 0x38, 0x0, 0x38, 0x2c, 0x0, 0x38, 0x2e, 0x0, 0x38, 0x65e5, 0x0, 0x38, 0x6708, 0x0, 0x38, 0x70b9, 0x0, 0x39, 0x0, 0x39, 0x2c, 0x0, 0x39, 0x2e, 0x0, 0x39, 0x65e5, 0x0, 0x39, 0x6708, 0x0, 0x39, 0x70b9, 0x0, 0x3a, 0x0, 0x3a, 0x3a, 0x3d, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3c, 0x338, 0x0, 0x3d, 0x0, 0x3d, 0x3d, 0x0, 0x3d, 0x3d, 0x3d, 0x0, 0x3d, 0x338, 0x0, 0x3e, 0x0, 0x3e, 0x338, 0x0, 0x3f, 0x0, 0x3f, 0x21, 0x0, 0x3f, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x41, 0x55, 0x0, 0x41, 0x300, 0x0, 0x41, 0x301, 0x0, 0x41, 0x302, 0x0, 0x41, 0x302, 0x300, 0x0, 0x41, 0x302, 0x301, 0x0, 0x41, 0x302, 0x303, 0x0, 0x41, 0x302, 0x309, 0x0, 0x41, 0x303, 0x0, 0x41, 0x304, 0x0, 0x41, 0x306, 0x0, 0x41, 0x306, 0x300, 0x0, 0x41, 0x306, 0x301, 0x0, 0x41, 0x306, 0x303, 0x0, 0x41, 0x306, 0x309, 0x0, 0x41, 0x307, 0x0, 0x41, 0x307, 0x304, 0x0, 0x41, 0x308, 0x0, 0x41, 0x308, 0x304, 0x0, 0x41, 0x309, 0x0, 0x41, 0x30a, 0x0, 0x41, 0x30a, 0x301, 0x0, 0x41, 0x30c, 0x0, 0x41, 0x30f, 0x0, 0x41, 0x311, 0x0, 0x41, 0x323, 0x0, 0x41, 0x323, 0x302, 0x0, 0x41, 0x323, 0x306, 0x0, 0x41, 0x325, 0x0, 0x41, 0x328, 0x0, 0x41, 0x2215, 0x6d, 0x0, 0x42, 0x0, 0x42, 0x71, 0x0, 0x42, 0x307, 0x0, 0x42, 0x323, 0x0, 0x42, 0x331, 0x0, 0x43, 0x0, 0x43, 0x44, 0x0, 0x43, 0x6f, 0x2e, 0x0, 0x43, 0x301, 0x0, 0x43, 0x302, 0x0, 0x43, 0x307, 0x0, 0x43, 0x30c, 0x0, 0x43, 0x327, 0x0, 0x43, 0x327, 0x301, 0x0, 0x43, 0x2215, 0x6b, 0x67, 0x0, 0x44, 0x0, 0x44, 0x4a, 0x0, 0x44, 0x5a, 0x0, 0x44, 0x5a, 0x30c, 0x0, 0x44, 0x7a, 0x0, 0x44, 0x7a, 0x30c, 0x0, 0x44, 0x307, 0x0, 0x44, 0x30c, 0x0, 0x44, 0x323, 0x0, 0x44, 0x327, 0x0, 0x44, 0x32d, 0x0, 0x44, 0x331, 0x0, 0x45, 0x0, 0x45, 0x300, 0x0, 0x45, 0x301, 0x0, 0x45, 0x302, 0x0, 0x45, 0x302, 0x300, 0x0, 0x45, 0x302, 0x301, 0x0, 0x45, 0x302, 0x303, 0x0, 0x45, 0x302, 0x309, 0x0, 0x45, 0x303, 0x0, 0x45, 0x304, 0x0, 0x45, 0x304, 0x300, 0x0, 0x45, 0x304, 0x301, 0x0, 0x45, 0x306, 0x0, 0x45, 0x307, 0x0, 0x45, 0x308, 0x0, 0x45, 0x309, 0x0, 0x45, 0x30c, 0x0, 0x45, 0x30f, 0x0, 0x45, 0x311, 0x0, 0x45, 0x323, 0x0, 0x45, 0x323, 0x302, 0x0, 0x45, 0x327, 0x0, 0x45, 0x327, 0x306, 0x0, 0x45, 0x328, 0x0, 0x45, 0x32d, 0x0, 0x45, 0x330, 0x0, 0x46, 0x0, 0x46, 0x41, 0x58, 0x0, 0x46, 0x307, 0x0, 0x47, 0x0, 0x47, 0x42, 0x0, 0x47, 0x48, 0x7a, 0x0, 0x47, 0x50, 0x61, 0x0, 0x47, 0x79, 0x0, 0x47, 0x301, 0x0, 0x47, 0x302, 0x0, 0x47, 0x304, 0x0, 0x47, 0x306, 0x0, 0x47, 0x307, 0x0, 0x47, 0x30c, 0x0, 0x47, 0x327, 0x0, 0x48, 0x0, 0x48, 0x50, 0x0, 0x48, 0x56, 0x0, 0x48, 0x67, 0x0, 0x48, 0x7a, 0x0, 0x48, 0x302, 0x0, 0x48, 0x307, 0x0, 0x48, 0x308, 0x0, 0x48, 0x30c, 0x0, 0x48, 0x323, 0x0, 0x48, 0x327, 0x0, 0x48, 0x32e, 0x0, 0x49, 0x0, 0x49, 0x49, 0x0, 0x49, 0x49, 0x49, 0x0, 0x49, 0x4a, 0x0, 0x49, 0x55, 0x0, 0x49, 0x56, 0x0, 0x49, 0x58, 0x0, 0x49, 0x300, 0x0, 0x49, 0x301, 0x0, 0x49, 0x302, 0x0, 0x49, 0x303, 0x0, 0x49, 0x304, 0x0, 0x49, 0x306, 0x0, 0x49, 0x307, 0x0, 0x49, 0x308, 0x0, 0x49, 0x308, 0x301, 0x0, 0x49, 0x309, 0x0, 0x49, 0x30c, 0x0, 0x49, 0x30f, 0x0, 0x49, 0x311, 0x0, 0x49, 0x323, 0x0, 0x49, 0x328, 0x0, 0x49, 0x330, 0x0, 0x4a, 0x0, 0x4a, 0x302, 0x0, 0x4b, 0x0, 0x4b, 0x42, 0x0, 0x4b, 0x4b, 0x0, 0x4b, 0x4d, 0x0, 0x4b, 0x301, 0x0, 0x4b, 0x30c, 0x0, 0x4b, 0x323, 0x0, 0x4b, 0x327, 0x0, 0x4b, 0x331, 0x0, 0x4c, 0x0, 0x4c, 0x4a, 0x0, 0x4c, 0x54, 0x44, 0x0, 0x4c, 0x6a, 0x0, 0x4c, 0xb7, 0x0, 0x4c, 0x301, 0x0, 0x4c, 0x30c, 0x0, 0x4c, 0x323, 0x0, 0x4c, 0x323, 0x304, 0x0, 0x4c, 0x327, 0x0, 0x4c, 0x32d, 0x0, 0x4c, 0x331, 0x0, 0x4d, 0x0, 0x4d, 0x42, 0x0, 0x4d, 0x43, 0x0, 0x4d, 0x44, 0x0, 0x4d, 0x48, 0x7a, 0x0, 0x4d, 0x50, 0x61, 0x0, 0x4d, 0x52, 0x0, 0x4d, 0x56, 0x0, 0x4d, 0x57, 0x0, 0x4d, 0x301, 0x0, 0x4d, 0x307, 0x0, 0x4d, 0x323, 0x0, 0x4d, 0x3a9, 0x0, 0x4e, 0x0, 0x4e, 0x4a, 0x0, 0x4e, 0x6a, 0x0, 0x4e, 0x6f, 0x0, 0x4e, 0x300, 0x0, 0x4e, 0x301, 0x0, 0x4e, 0x303, 0x0, 0x4e, 0x307, 0x0, 0x4e, 0x30c, 0x0, 0x4e, 0x323, 0x0, 0x4e, 0x327, 0x0, 0x4e, 0x32d, 0x0, 0x4e, 0x331, 0x0, 0x4f, 0x0, 0x4f, 0x300, 0x0, 0x4f, 0x301, 0x0, 0x4f, 0x302, 0x0, 0x4f, 0x302, 0x300, 0x0, 0x4f, 0x302, 0x301, 0x0, 0x4f, 0x302, 0x303, 0x0, 0x4f, 0x302, 0x309, 0x0, 0x4f, 0x303, 0x0, 0x4f, 0x303, 0x301, 0x0, 0x4f, 0x303, 0x304, 0x0, 0x4f, 0x303, 0x308, 0x0, 0x4f, 0x304, 0x0, 0x4f, 0x304, 0x300, 0x0, 0x4f, 0x304, 0x301, 0x0, 0x4f, 0x306, 0x0, 0x4f, 0x307, 0x0, 0x4f, 0x307, 0x304, 0x0, 0x4f, 0x308, 0x0, 0x4f, 0x308, 0x304, 0x0, 0x4f, 0x309, 0x0, 0x4f, 0x30b, 0x0, 0x4f, 0x30c, 0x0, 0x4f, 0x30f, 0x0, 0x4f, 0x311, 0x0, 0x4f, 0x31b, 0x0, 0x4f, 0x31b, 0x300, 0x0, 0x4f, 0x31b, 0x301, 0x0, 0x4f, 0x31b, 0x303, 0x0, 0x4f, 0x31b, 0x309, 0x0, 0x4f, 0x31b, 0x323, 0x0, 0x4f, 0x323, 0x0, 0x4f, 0x323, 0x302, 0x0, 0x4f, 0x328, 0x0, 0x4f, 0x328, 0x304, 0x0, 0x50, 0x0, 0x50, 0x48, 0x0, 0x50, 0x50, 0x4d, 0x0, 0x50, 0x50, 0x56, 0x0, 0x50, 0x52, 0x0, 0x50, 0x54, 0x45, 0x0, 0x50, 0x61, 0x0, 0x50, 0x301, 0x0, 0x50, 0x307, 0x0, 0x51, 0x0, 0x52, 0x0, 0x52, 0x73, 0x0, 0x52, 0x301, 0x0, 0x52, 0x307, 0x0, 0x52, 0x30c, 0x0, 0x52, 0x30f, 0x0, 0x52, 0x311, 0x0, 0x52, 0x323, 0x0, 0x52, 0x323, 0x304, 0x0, 0x52, 0x327, 0x0, 0x52, 0x331, 0x0, 0x53, 0x0, 0x53, 0x44, 0x0, 0x53, 0x4d, 0x0, 0x53, 0x53, 0x0, 0x53, 0x76, 0x0, 0x53, 0x301, 0x0, 0x53, 0x301, 0x307, 0x0, 0x53, 0x302, 0x0, 0x53, 0x307, 0x0, 0x53, 0x30c, 0x0, 0x53, 0x30c, 0x307, 0x0, 0x53, 0x323, 0x0, 0x53, 0x323, 0x307, 0x0, 0x53, 0x326, 0x0, 0x53, 0x327, 0x0, 0x54, 0x0, 0x54, 0x45, 0x4c, 0x0, 0x54, 0x48, 0x7a, 0x0, 0x54, 0x4d, 0x0, 0x54, 0x307, 0x0, 0x54, 0x30c, 0x0, 0x54, 0x323, 0x0, 0x54, 0x326, 0x0, 0x54, 0x327, 0x0, 0x54, 0x32d, 0x0, 0x54, 0x331, 0x0, 0x55, 0x0, 0x55, 0x300, 0x0, 0x55, 0x301, 0x0, 0x55, 0x302, 0x0, 0x55, 0x303, 0x0, 0x55, 0x303, 0x301, 0x0, 0x55, 0x304, 0x0, 0x55, 0x304, 0x308, 0x0, 0x55, 0x306, 0x0, 0x55, 0x308, 0x0, 0x55, 0x308, 0x300, 0x0, 0x55, 0x308, 0x301, 0x0, 0x55, 0x308, 0x304, 0x0, 0x55, 0x308, 0x30c, 0x0, 0x55, 0x309, 0x0, 0x55, 0x30a, 0x0, 0x55, 0x30b, 0x0, 0x55, 0x30c, 0x0, 0x55, 0x30f, 0x0, 0x55, 0x311, 0x0, 0x55, 0x31b, 0x0, 0x55, 0x31b, 0x300, 0x0, 0x55, 0x31b, 0x301, 0x0, 0x55, 0x31b, 0x303, 0x0, 0x55, 0x31b, 0x309, 0x0, 0x55, 0x31b, 0x323, 0x0, 0x55, 0x323, 0x0, 0x55, 0x324, 0x0, 0x55, 0x328, 0x0, 0x55, 0x32d, 0x0, 0x55, 0x330, 0x0, 0x56, 0x0, 0x56, 0x49, 0x0, 0x56, 0x49, 0x49, 0x0, 0x56, 0x49, 0x49, 0x49, 0x0, 0x56, 0x303, 0x0, 0x56, 0x323, 0x0, 0x56, 0x2215, 0x6d, 0x0, 0x57, 0x0, 0x57, 0x43, 0x0, 0x57, 0x5a, 0x0, 0x57, 0x62, 0x0, 0x57, 0x300, 0x0, 0x57, 0x301, 0x0, 0x57, 0x302, 0x0, 0x57, 0x307, 0x0, 0x57, 0x308, 0x0, 0x57, 0x323, 0x0, 0x58, 0x0, 0x58, 0x49, 0x0, 0x58, 0x49, 0x49, 0x0, 0x58, 0x307, 0x0, 0x58, 0x308, 0x0, 0x59, 0x0, 0x59, 0x300, 0x0, 0x59, 0x301, 0x0, 0x59, 0x302, 0x0, 0x59, 0x303, 0x0, 0x59, 0x304, 0x0, 0x59, 0x307, 0x0, 0x59, 0x308, 0x0, 0x59, 0x309, 0x0, 0x59, 0x323, 0x0, 0x5a, 0x0, 0x5a, 0x301, 0x0, 0x5a, 0x302, 0x0, 0x5a, 0x307, 0x0, 0x5a, 0x30c, 0x0, 0x5a, 0x323, 0x0, 0x5a, 0x331, 0x0, 0x5b, 0x0, 0x5c, 0x0, 0x5d, 0x0, 0x5e, 0x0, 0x5f, 0x0, 0x60, 0x0, 0x61, 0x0, 0x61, 0x2e, 0x6d, 0x2e, 0x0, 0x61, 0x2f, 0x63, 0x0, 0x61, 0x2f, 0x73, 0x0, 0x61, 0x2be, 0x0, 0x61, 0x300, 0x0, 0x61, 0x301, 0x0, 0x61, 0x302, 0x0, 0x61, 0x302, 0x300, 0x0, 0x61, 0x302, 0x301, 0x0, 0x61, 0x302, 0x303, 0x0, 0x61, 0x302, 0x309, 0x0, 0x61, 0x303, 0x0, 0x61, 0x304, 0x0, 0x61, 0x306, 0x0, 0x61, 0x306, 0x300, 0x0, 0x61, 0x306, 0x301, 0x0, 0x61, 0x306, 0x303, 0x0, 0x61, 0x306, 0x309, 0x0, 0x61, 0x307, 0x0, 0x61, 0x307, 0x304, 0x0, 0x61, 0x308, 0x0, 0x61, 0x308, 0x304, 0x0, 0x61, 0x309, 0x0, 0x61, 0x30a, 0x0, 0x61, 0x30a, 0x301, 0x0, 0x61, 0x30c, 0x0, 0x61, 0x30f, 0x0, 0x61, 0x311, 0x0, 0x61, 0x323, 0x0, 0x61, 0x323, 0x302, 0x0, 0x61, 0x323, 0x306, 0x0, 0x61, 0x325, 0x0, 0x61, 0x328, 0x0, 0x62, 0x0, 0x62, 0x61, 0x72, 0x0, 0x62, 0x307, 0x0, 0x62, 0x323, 0x0, 0x62, 0x331, 0x0, 0x63, 0x0, 0x63, 0x2f, 0x6f, 0x0, 0x63, 0x2f, 0x75, 0x0, 0x63, 0x61, 0x6c, 0x0, 0x63, 0x63, 0x0, 0x63, 0x64, 0x0, 0x63, 0x6d, 0x0, 0x63, 0x6d, 0x32, 0x0, 0x63, 0x6d, 0x33, 0x0, 0x63, 0x301, 0x0, 0x63, 0x302, 0x0, 0x63, 0x307, 0x0, 0x63, 0x30c, 0x0, 0x63, 0x327, 0x0, 0x63, 0x327, 0x301, 0x0, 0x64, 0x0, 0x64, 0x42, 0x0, 0x64, 0x61, 0x0, 0x64, 0x6c, 0x0, 0x64, 0x6d, 0x0, 0x64, 0x6d, 0x32, 0x0, 0x64, 0x6d, 0x33, 0x0, 0x64, 0x7a, 0x0, 0x64, 0x7a, 0x30c, 0x0, 0x64, 0x307, 0x0, 0x64, 0x30c, 0x0, 0x64, 0x323, 0x0, 0x64, 0x327, 0x0, 0x64, 0x32d, 0x0, 0x64, 0x331, 0x0, 0x65, 0x0, 0x65, 0x56, 0x0, 0x65, 0x72, 0x67, 0x0, 0x65, 0x300, 0x0, 0x65, 0x301, 0x0, 0x65, 0x302, 0x0, 0x65, 0x302, 0x300, 0x0, 0x65, 0x302, 0x301, 0x0, 0x65, 0x302, 0x303, 0x0, 0x65, 0x302, 0x309, 0x0, 0x65, 0x303, 0x0, 0x65, 0x304, 0x0, 0x65, 0x304, 0x300, 0x0, 0x65, 0x304, 0x301, 0x0, 0x65, 0x306, 0x0, 0x65, 0x307, 0x0, 0x65, 0x308, 0x0, 0x65, 0x309, 0x0, 0x65, 0x30c, 0x0, 0x65, 0x30f, 0x0, 0x65, 0x311, 0x0, 0x65, 0x323, 0x0, 0x65, 0x323, 0x302, 0x0, 0x65, 0x327, 0x0, 0x65, 0x327, 0x306, 0x0, 0x65, 0x328, 0x0, 0x65, 0x32d, 0x0, 0x65, 0x330, 0x0, 0x66, 0x0, 0x66, 0x66, 0x0, 0x66, 0x66, 0x69, 0x0, 0x66, 0x66, 0x6c, 0x0, 0x66, 0x69, 0x0, 0x66, 0x6c, 0x0, 0x66, 0x6d, 0x0, 0x66, 0x307, 0x0, 0x67, 0x0, 0x67, 0x61, 0x6c, 0x0, 0x67, 0x301, 0x0, 0x67, 0x302, 0x0, 0x67, 0x304, 0x0, 0x67, 0x306, 0x0, 0x67, 0x307, 0x0, 0x67, 0x30c, 0x0, 0x67, 0x327, 0x0, 0x68, 0x0, 0x68, 0x50, 0x61, 0x0, 0x68, 0x61, 0x0, 0x68, 0x302, 0x0, 0x68, 0x307, 0x0, 0x68, 0x308, 0x0, 0x68, 0x30c, 0x0, 0x68, 0x323, 0x0, 0x68, 0x327, 0x0, 0x68, 0x32e, 0x0, 0x68, 0x331, 0x0, 0x69, 0x0, 0x69, 0x69, 0x0, 0x69, 0x69, 0x69, 0x0, 0x69, 0x6a, 0x0, 0x69, 0x6e, 0x0, 0x69, 0x76, 0x0, 0x69, 0x78, 0x0, 0x69, 0x300, 0x0, 0x69, 0x301, 0x0, 0x69, 0x302, 0x0, 0x69, 0x303, 0x0, 0x69, 0x304, 0x0, 0x69, 0x306, 0x0, 0x69, 0x308, 0x0, 0x69, 0x308, 0x301, 0x0, 0x69, 0x309, 0x0, 0x69, 0x30c, 0x0, 0x69, 0x30f, 0x0, 0x69, 0x311, 0x0, 0x69, 0x323, 0x0, 0x69, 0x328, 0x0, 0x69, 0x330, 0x0, 0x6a, 0x0, 0x6a, 0x302, 0x0, 0x6a, 0x30c, 0x0, 0x6b, 0x0, 0x6b, 0x41, 0x0, 0x6b, 0x48, 0x7a, 0x0, 0x6b, 0x50, 0x61, 0x0, 0x6b, 0x56, 0x0, 0x6b, 0x57, 0x0, 0x6b, 0x63, 0x61, 0x6c, 0x0, 0x6b, 0x67, 0x0, 0x6b, 0x6c, 0x0, 0x6b, 0x6d, 0x0, 0x6b, 0x6d, 0x32, 0x0, 0x6b, 0x6d, 0x33, 0x0, 0x6b, 0x74, 0x0, 0x6b, 0x301, 0x0, 0x6b, 0x30c, 0x0, 0x6b, 0x323, 0x0, 0x6b, 0x327, 0x0, 0x6b, 0x331, 0x0, 0x6b, 0x3a9, 0x0, 0x6c, 0x0, 0x6c, 0x6a, 0x0, 0x6c, 0x6d, 0x0, 0x6c, 0x6e, 0x0, 0x6c, 0x6f, 0x67, 0x0, 0x6c, 0x78, 0x0, 0x6c, 0xb7, 0x0, 0x6c, 0x301, 0x0, 0x6c, 0x30c, 0x0, 0x6c, 0x323, 0x0, 0x6c, 0x323, 0x304, 0x0, 0x6c, 0x327, 0x0, 0x6c, 0x32d, 0x0, 0x6c, 0x331, 0x0, 0x6d, 0x0, 0x6d, 0x32, 0x0, 0x6d, 0x33, 0x0, 0x6d, 0x41, 0x0, 0x6d, 0x56, 0x0, 0x6d, 0x57, 0x0, 0x6d, 0x62, 0x0, 0x6d, 0x67, 0x0, 0x6d, 0x69, 0x6c, 0x0, 0x6d, 0x6c, 0x0, 0x6d, 0x6d, 0x0, 0x6d, 0x6d, 0x32, 0x0, 0x6d, 0x6d, 0x33, 0x0, 0x6d, 0x6f, 0x6c, 0x0, 0x6d, 0x73, 0x0, 0x6d, 0x301, 0x0, 0x6d, 0x307, 0x0, 0x6d, 0x323, 0x0, 0x6d, 0x2215, 0x73, 0x0, 0x6d, 0x2215, 0x73, 0x32, 0x0, 0x6e, 0x0, 0x6e, 0x41, 0x0, 0x6e, 0x46, 0x0, 0x6e, 0x56, 0x0, 0x6e, 0x57, 0x0, 0x6e, 0x6a, 0x0, 0x6e, 0x6d, 0x0, 0x6e, 0x73, 0x0, 0x6e, 0x300, 0x0, 0x6e, 0x301, 0x0, 0x6e, 0x303, 0x0, 0x6e, 0x307, 0x0, 0x6e, 0x30c, 0x0, 0x6e, 0x323, 0x0, 0x6e, 0x327, 0x0, 0x6e, 0x32d, 0x0, 0x6e, 0x331, 0x0, 0x6f, 0x0, 0x6f, 0x56, 0x0, 0x6f, 0x300, 0x0, 0x6f, 0x301, 0x0, 0x6f, 0x302, 0x0, 0x6f, 0x302, 0x300, 0x0, 0x6f, 0x302, 0x301, 0x0, 0x6f, 0x302, 0x303, 0x0, 0x6f, 0x302, 0x309, 0x0, 0x6f, 0x303, 0x0, 0x6f, 0x303, 0x301, 0x0, 0x6f, 0x303, 0x304, 0x0, 0x6f, 0x303, 0x308, 0x0, 0x6f, 0x304, 0x0, 0x6f, 0x304, 0x300, 0x0, 0x6f, 0x304, 0x301, 0x0, 0x6f, 0x306, 0x0, 0x6f, 0x307, 0x0, 0x6f, 0x307, 0x304, 0x0, 0x6f, 0x308, 0x0, 0x6f, 0x308, 0x304, 0x0, 0x6f, 0x309, 0x0, 0x6f, 0x30b, 0x0, 0x6f, 0x30c, 0x0, 0x6f, 0x30f, 0x0, 0x6f, 0x311, 0x0, 0x6f, 0x31b, 0x0, 0x6f, 0x31b, 0x300, 0x0, 0x6f, 0x31b, 0x301, 0x0, 0x6f, 0x31b, 0x303, 0x0, 0x6f, 0x31b, 0x309, 0x0, 0x6f, 0x31b, 0x323, 0x0, 0x6f, 0x323, 0x0, 0x6f, 0x323, 0x302, 0x0, 0x6f, 0x328, 0x0, 0x6f, 0x328, 0x304, 0x0, 0x70, 0x0, 0x70, 0x2e, 0x6d, 0x2e, 0x0, 0x70, 0x41, 0x0, 0x70, 0x46, 0x0, 0x70, 0x56, 0x0, 0x70, 0x57, 0x0, 0x70, 0x63, 0x0, 0x70, 0x73, 0x0, 0x70, 0x301, 0x0, 0x70, 0x307, 0x0, 0x71, 0x0, 0x72, 0x0, 0x72, 0x61, 0x64, 0x0, 0x72, 0x61, 0x64, 0x2215, 0x73, 0x0, 0x72, 0x61, 0x64, 0x2215, 0x73, 0x32, 0x0, 0x72, 0x301, 0x0, 0x72, 0x307, 0x0, 0x72, 0x30c, 0x0, 0x72, 0x30f, 0x0, 0x72, 0x311, 0x0, 0x72, 0x323, 0x0, 0x72, 0x323, 0x304, 0x0, 0x72, 0x327, 0x0, 0x72, 0x331, 0x0, 0x73, 0x0, 0x73, 0x72, 0x0, 0x73, 0x74, 0x0, 0x73, 0x301, 0x0, 0x73, 0x301, 0x307, 0x0, 0x73, 0x302, 0x0, 0x73, 0x307, 0x0, 0x73, 0x30c, 0x0, 0x73, 0x30c, 0x307, 0x0, 0x73, 0x323, 0x0, 0x73, 0x323, 0x307, 0x0, 0x73, 0x326, 0x0, 0x73, 0x327, 0x0, 0x74, 0x0, 0x74, 0x307, 0x0, 0x74, 0x308, 0x0, 0x74, 0x30c, 0x0, 0x74, 0x323, 0x0, 0x74, 0x326, 0x0, 0x74, 0x327, 0x0, 0x74, 0x32d, 0x0, 0x74, 0x331, 0x0, 0x75, 0x0, 0x75, 0x300, 0x0, 0x75, 0x301, 0x0, 0x75, 0x302, 0x0, 0x75, 0x303, 0x0, 0x75, 0x303, 0x301, 0x0, 0x75, 0x304, 0x0, 0x75, 0x304, 0x308, 0x0, 0x75, 0x306, 0x0, 0x75, 0x308, 0x0, 0x75, 0x308, 0x300, 0x0, 0x75, 0x308, 0x301, 0x0, 0x75, 0x308, 0x304, 0x0, 0x75, 0x308, 0x30c, 0x0, 0x75, 0x309, 0x0, 0x75, 0x30a, 0x0, 0x75, 0x30b, 0x0, 0x75, 0x30c, 0x0, 0x75, 0x30f, 0x0, 0x75, 0x311, 0x0, 0x75, 0x31b, 0x0, 0x75, 0x31b, 0x300, 0x0, 0x75, 0x31b, 0x301, 0x0, 0x75, 0x31b, 0x303, 0x0, 0x75, 0x31b, 0x309, 0x0, 0x75, 0x31b, 0x323, 0x0, 0x75, 0x323, 0x0, 0x75, 0x324, 0x0, 0x75, 0x328, 0x0, 0x75, 0x32d, 0x0, 0x75, 0x330, 0x0, 0x76, 0x0, 0x76, 0x69, 0x0, 0x76, 0x69, 0x69, 0x0, 0x76, 0x69, 0x69, 0x69, 0x0, 0x76, 0x303, 0x0, 0x76, 0x323, 0x0, 0x77, 0x0, 0x77, 0x300, 0x0, 0x77, 0x301, 0x0, 0x77, 0x302, 0x0, 0x77, 0x307, 0x0, 0x77, 0x308, 0x0, 0x77, 0x30a, 0x0, 0x77, 0x323, 0x0, 0x78, 0x0, 0x78, 0x69, 0x0, 0x78, 0x69, 0x69, 0x0, 0x78, 0x307, 0x0, 0x78, 0x308, 0x0, 0x79, 0x0, 0x79, 0x300, 0x0, 0x79, 0x301, 0x0, 0x79, 0x302, 0x0, 0x79, 0x303, 0x0, 0x79, 0x304, 0x0, 0x79, 0x307, 0x0, 0x79, 0x308, 0x0, 0x79, 0x309, 0x0, 0x79, 0x30a, 0x0, 0x79, 0x323, 0x0, 0x7a, 0x0, 0x7a, 0x301, 0x0, 0x7a, 0x302, 0x0, 0x7a, 0x307, 0x0, 0x7a, 0x30c, 0x0, 0x7a, 0x323, 0x0, 0x7a, 0x331, 0x0, 0x7b, 0x0, 0x7c, 0x0, 0x7d, 0x0, 0x7e, 0x0, 0xa2, 0x0, 0xa3, 0x0, 0xa5, 0x0, 0xa6, 0x0, 0xac, 0x0, 0xb0, 0x43, 0x0, 0xb0, 0x46, 0x0, 0xb7, 0x0, 0xc6, 0x0, 0xc6, 0x301, 0x0, 0xc6, 0x304, 0x0, 0xd8, 0x301, 0x0, 0xe6, 0x0, 0xe6, 0x301, 0x0, 0xe6, 0x304, 0x0, 0xf0, 0x0, 0xf8, 0x0, 0xf8, 0x301, 0x0, 0x126, 0x0, 0x127, 0x0, 0x131, 0x0, 0x14b, 0x0, 0x153, 0x0, 0x18e, 0x0, 0x190, 0x0, 0x1ab, 0x0, 0x1b7, 0x30c, 0x0, 0x1c0, 0x0, 0x1c1, 0x0, 0x1c2, 0x0, 0x222, 0x0, 0x237, 0x0, 0x250, 0x0, 0x251, 0x0, 0x252, 0x0, 0x253, 0x0, 0x254, 0x0, 0x255, 0x0, 0x256, 0x0, 0x257, 0x0, 0x258, 0x0, 0x259, 0x0, 0x25b, 0x0, 0x25c, 0x0, 0x25e, 0x0, 0x25f, 0x0, 0x260, 0x0, 0x261, 0x0, 0x262, 0x0, 0x263, 0x0, 0x264, 0x0, 0x265, 0x0, 0x266, 0x0, 0x267, 0x0, 0x268, 0x0, 0x269, 0x0, 0x26a, 0x0, 0x26b, 0x0, 0x26c, 0x0, 0x26d, 0x0, 0x26e, 0x0, 0x26f, 0x0, 0x270, 0x0, 0x271, 0x0, 0x272, 0x0, 0x273, 0x0, 0x274, 0x0, 0x275, 0x0, 0x276, 0x0, 0x277, 0x0, 0x278, 0x0, 0x279, 0x0, 0x27a, 0x0, 0x27b, 0x0, 0x27d, 0x0, 0x27e, 0x0, 0x280, 0x0, 0x281, 0x0, 0x282, 0x0, 0x283, 0x0, 0x284, 0x0, 0x288, 0x0, 0x289, 0x0, 0x28a, 0x0, 0x28b, 0x0, 0x28c, 0x0, 0x28d, 0x0, 0x28e, 0x0, 0x28f, 0x0, 0x290, 0x0, 0x291, 0x0, 0x292, 0x0, 0x292, 0x30c, 0x0, 0x295, 0x0, 0x298, 0x0, 0x299, 0x0, 0x29b, 0x0, 0x29c, 0x0, 0x29d, 0x0, 0x29f, 0x0, 0x2a1, 0x0, 0x2a2, 0x0, 0x2a3, 0x0, 0x2a4, 0x0, 0x2a5, 0x0, 0x2a6, 0x0, 0x2a7, 0x0, 0x2a8, 0x0, 0x2a9, 0x0, 0x2aa, 0x0, 0x2ab, 0x0, 0x2b9, 0x0, 0x2bc, 0x6e, 0x0, 0x2d0, 0x0, 0x2d1, 0x0, 0x300, 0x0, 0x301, 0x0, 0x308, 0x301, 0x0, 0x313, 0x0, 0x391, 0x0, 0x391, 0x300, 0x0, 0x391, 0x301, 0x0, 0x391, 0x304, 0x0, 0x391, 0x306, 0x0, 0x391, 0x313, 0x0, 0x391, 0x313, 0x300, 0x0, 0x391, 0x313, 0x300, 0x345, 0x0, 0x391, 0x313, 0x301, 0x0, 0x391, 0x313, 0x301, 0x345, 0x0, 0x391, 0x313, 0x342, 0x0, 0x391, 0x313, 0x342, 0x345, 0x0, 0x391, 0x313, 0x345, 0x0, 0x391, 0x314, 0x0, 0x391, 0x314, 0x300, 0x0, 0x391, 0x314, 0x300, 0x345, 0x0, 0x391, 0x314, 0x301, 0x0, 0x391, 0x314, 0x301, 0x345, 0x0, 0x391, 0x314, 0x342, 0x0, 0x391, 0x314, 0x342, 0x345, 0x0, 0x391, 0x314, 0x345, 0x0, 0x391, 0x345, 0x0, 0x392, 0x0, 0x393, 0x0, 0x394, 0x0, 0x395, 0x0, 0x395, 0x300, 0x0, 0x395, 0x301, 0x0, 0x395, 0x313, 0x0, 0x395, 0x313, 0x300, 0x0, 0x395, 0x313, 0x301, 0x0, 0x395, 0x314, 0x0, 0x395, 0x314, 0x300, 0x0, 0x395, 0x314, 0x301, 0x0, 0x396, 0x0, 0x397, 0x0, 0x397, 0x300, 0x0, 0x397, 0x301, 0x0, 0x397, 0x313, 0x0, 0x397, 0x313, 0x300, 0x0, 0x397, 0x313, 0x300, 0x345, 0x0, 0x397, 0x313, 0x301, 0x0, 0x397, 0x313, 0x301, 0x345, 0x0, 0x397, 0x313, 0x342, 0x0, 0x397, 0x313, 0x342, 0x345, 0x0, 0x397, 0x313, 0x345, 0x0, 0x397, 0x314, 0x0, 0x397, 0x314, 0x300, 0x0, 0x397, 0x314, 0x300, 0x345, 0x0, 0x397, 0x314, 0x301, 0x0, 0x397, 0x314, 0x301, 0x345, 0x0, 0x397, 0x314, 0x342, 0x0, 0x397, 0x314, 0x342, 0x345, 0x0, 0x397, 0x314, 0x345, 0x0, 0x397, 0x345, 0x0, 0x398, 0x0, 0x399, 0x0, 0x399, 0x300, 0x0, 0x399, 0x301, 0x0, 0x399, 0x304, 0x0, 0x399, 0x306, 0x0, 0x399, 0x308, 0x0, 0x399, 0x313, 0x0, 0x399, 0x313, 0x300, 0x0, 0x399, 0x313, 0x301, 0x0, 0x399, 0x313, 0x342, 0x0, 0x399, 0x314, 0x0, 0x399, 0x314, 0x300, 0x0, 0x399, 0x314, 0x301, 0x0, 0x399, 0x314, 0x342, 0x0, 0x39a, 0x0, 0x39b, 0x0, 0x39c, 0x0, 0x39d, 0x0, 0x39e, 0x0, 0x39f, 0x0, 0x39f, 0x300, 0x0, 0x39f, 0x301, 0x0, 0x39f, 0x313, 0x0, 0x39f, 0x313, 0x300, 0x0, 0x39f, 0x313, 0x301, 0x0, 0x39f, 0x314, 0x0, 0x39f, 0x314, 0x300, 0x0, 0x39f, 0x314, 0x301, 0x0, 0x3a0, 0x0, 0x3a1, 0x0, 0x3a1, 0x314, 0x0, 0x3a3, 0x0, 0x3a4, 0x0, 0x3a5, 0x0, 0x3a5, 0x300, 0x0, 0x3a5, 0x301, 0x0, 0x3a5, 0x304, 0x0, 0x3a5, 0x306, 0x0, 0x3a5, 0x308, 0x0, 0x3a5, 0x314, 0x0, 0x3a5, 0x314, 0x300, 0x0, 0x3a5, 0x314, 0x301, 0x0, 0x3a5, 0x314, 0x342, 0x0, 0x3a6, 0x0, 0x3a7, 0x0, 0x3a8, 0x0, 0x3a9, 0x0, 0x3a9, 0x300, 0x0, 0x3a9, 0x301, 0x0, 0x3a9, 0x313, 0x0, 0x3a9, 0x313, 0x300, 0x0, 0x3a9, 0x313, 0x300, 0x345, 0x0, 0x3a9, 0x313, 0x301, 0x0, 0x3a9, 0x313, 0x301, 0x345, 0x0, 0x3a9, 0x313, 0x342, 0x0, 0x3a9, 0x313, 0x342, 0x345, 0x0, 0x3a9, 0x313, 0x345, 0x0, 0x3a9, 0x314, 0x0, 0x3a9, 0x314, 0x300, 0x0, 0x3a9, 0x314, 0x300, 0x345, 0x0, 0x3a9, 0x314, 0x301, 0x0, 0x3a9, 0x314, 0x301, 0x345, 0x0, 0x3a9, 0x314, 0x342, 0x0, 0x3a9, 0x314, 0x342, 0x345, 0x0, 0x3a9, 0x314, 0x345, 0x0, 0x3a9, 0x345, 0x0, 0x3b1, 0x0, 0x3b1, 0x300, 0x0, 0x3b1, 0x300, 0x345, 0x0, 0x3b1, 0x301, 0x0, 0x3b1, 0x301, 0x345, 0x0, 0x3b1, 0x304, 0x0, 0x3b1, 0x306, 0x0, 0x3b1, 0x313, 0x0, 0x3b1, 0x313, 0x300, 0x0, 0x3b1, 0x313, 0x300, 0x345, 0x0, 0x3b1, 0x313, 0x301, 0x0, 0x3b1, 0x313, 0x301, 0x345, 0x0, 0x3b1, 0x313, 0x342, 0x0, 0x3b1, 0x313, 0x342, 0x345, 0x0, 0x3b1, 0x313, 0x345, 0x0, 0x3b1, 0x314, 0x0, 0x3b1, 0x314, 0x300, 0x0, 0x3b1, 0x314, 0x300, 0x345, 0x0, 0x3b1, 0x314, 0x301, 0x0, 0x3b1, 0x314, 0x301, 0x345, 0x0, 0x3b1, 0x314, 0x342, 0x0, 0x3b1, 0x314, 0x342, 0x345, 0x0, 0x3b1, 0x314, 0x345, 0x0, 0x3b1, 0x342, 0x0, 0x3b1, 0x342, 0x345, 0x0, 0x3b1, 0x345, 0x0, 0x3b2, 0x0, 0x3b3, 0x0, 0x3b4, 0x0, 0x3b5, 0x0, 0x3b5, 0x300, 0x0, 0x3b5, 0x301, 0x0, 0x3b5, 0x313, 0x0, 0x3b5, 0x313, 0x300, 0x0, 0x3b5, 0x313, 0x301, 0x0, 0x3b5, 0x314, 0x0, 0x3b5, 0x314, 0x300, 0x0, 0x3b5, 0x314, 0x301, 0x0, 0x3b6, 0x0, 0x3b7, 0x0, 0x3b7, 0x300, 0x0, 0x3b7, 0x300, 0x345, 0x0, 0x3b7, 0x301, 0x0, 0x3b7, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x0, 0x3b7, 0x313, 0x300, 0x0, 0x3b7, 0x313, 0x300, 0x345, 0x0, 0x3b7, 0x313, 0x301, 0x0, 0x3b7, 0x313, 0x301, 0x345, 0x0, 0x3b7, 0x313, 0x342, 0x0, 0x3b7, 0x313, 0x342, 0x345, 0x0, 0x3b7, 0x313, 0x345, 0x0, 0x3b7, 0x314, 0x0, 0x3b7, 0x314, 0x300, 0x0, 0x3b7, 0x314, 0x300, 0x345, 0x0, 0x3b7, 0x314, 0x301, 0x0, 0x3b7, 0x314, 0x301, 0x345, 0x0, 0x3b7, 0x314, 0x342, 0x0, 0x3b7, 0x314, 0x342, 0x345, 0x0, 0x3b7, 0x314, 0x345, 0x0, 0x3b7, 0x342, 0x0, 0x3b7, 0x342, 0x345, 0x0, 0x3b7, 0x345, 0x0, 0x3b8, 0x0, 0x3b9, 0x0, 0x3b9, 0x300, 0x0, 0x3b9, 0x301, 0x0, 0x3b9, 0x304, 0x0, 0x3b9, 0x306, 0x0, 0x3b9, 0x308, 0x0, 0x3b9, 0x308, 0x300, 0x0, 0x3b9, 0x308, 0x301, 0x0, 0x3b9, 0x308, 0x342, 0x0, 0x3b9, 0x313, 0x0, 0x3b9, 0x313, 0x300, 0x0, 0x3b9, 0x313, 0x301, 0x0, 0x3b9, 0x313, 0x342, 0x0, 0x3b9, 0x314, 0x0, 0x3b9, 0x314, 0x300, 0x0, 0x3b9, 0x314, 0x301, 0x0, 0x3b9, 0x314, 0x342, 0x0, 0x3b9, 0x342, 0x0, 0x3ba, 0x0, 0x3bb, 0x0, 0x3bc, 0x0, 0x3bc, 0x41, 0x0, 0x3bc, 0x46, 0x0, 0x3bc, 0x56, 0x0, 0x3bc, 0x57, 0x0, 0x3bc, 0x67, 0x0, 0x3bc, 0x6c, 0x0, 0x3bc, 0x6d, 0x0, 0x3bc, 0x73, 0x0, 0x3bd, 0x0, 0x3be, 0x0, 0x3bf, 0x0, 0x3bf, 0x300, 0x0, 0x3bf, 0x301, 0x0, 0x3bf, 0x313, 0x0, 0x3bf, 0x313, 0x300, 0x0, 0x3bf, 0x313, 0x301, 0x0, 0x3bf, 0x314, 0x0, 0x3bf, 0x314, 0x300, 0x0, 0x3bf, 0x314, 0x301, 0x0, 0x3c0, 0x0, 0x3c1, 0x0, 0x3c1, 0x313, 0x0, 0x3c1, 0x314, 0x0, 0x3c2, 0x0, 0x3c3, 0x0, 0x3c4, 0x0, 0x3c5, 0x0, 0x3c5, 0x300, 0x0, 0x3c5, 0x301, 0x0, 0x3c5, 0x304, 0x0, 0x3c5, 0x306, 0x0, 0x3c5, 0x308, 0x0, 0x3c5, 0x308, 0x300, 0x0, 0x3c5, 0x308, 0x301, 0x0, 0x3c5, 0x308, 0x342, 0x0, 0x3c5, 0x313, 0x0, 0x3c5, 0x313, 0x300, 0x0, 0x3c5, 0x313, 0x301, 0x0, 0x3c5, 0x313, 0x342, 0x0, 0x3c5, 0x314, 0x0, 0x3c5, 0x314, 0x300, 0x0, 0x3c5, 0x314, 0x301, 0x0, 0x3c5, 0x314, 0x342, 0x0, 0x3c5, 0x342, 0x0, 0x3c6, 0x0, 0x3c7, 0x0, 0x3c8, 0x0, 0x3c9, 0x0, 0x3c9, 0x300, 0x0, 0x3c9, 0x300, 0x345, 0x0, 0x3c9, 0x301, 0x0, 0x3c9, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x0, 0x3c9, 0x313, 0x300, 0x0, 0x3c9, 0x313, 0x300, 0x345, 0x0, 0x3c9, 0x313, 0x301, 0x0, 0x3c9, 0x313, 0x301, 0x345, 0x0, 0x3c9, 0x313, 0x342, 0x0, 0x3c9, 0x313, 0x342, 0x345, 0x0, 0x3c9, 0x313, 0x345, 0x0, 0x3c9, 0x314, 0x0, 0x3c9, 0x314, 0x300, 0x0, 0x3c9, 0x314, 0x300, 0x345, 0x0, 0x3c9, 0x314, 0x301, 0x0, 0x3c9, 0x314, 0x301, 0x345, 0x0, 0x3c9, 0x314, 0x342, 0x0, 0x3c9, 0x314, 0x342, 0x345, 0x0, 0x3c9, 0x314, 0x345, 0x0, 0x3c9, 0x342, 0x0, 0x3c9, 0x342, 0x345, 0x0, 0x3c9, 0x345, 0x0, 0x3dc, 0x0, 0x3dd, 0x0, 0x406, 0x308, 0x0, 0x410, 0x306, 0x0, 0x410, 0x308, 0x0, 0x413, 0x301, 0x0, 0x415, 0x300, 0x0, 0x415, 0x306, 0x0, 0x415, 0x308, 0x0, 0x416, 0x306, 0x0, 0x416, 0x308, 0x0, 0x417, 0x308, 0x0, 0x418, 0x300, 0x0, 0x418, 0x304, 0x0, 0x418, 0x306, 0x0, 0x418, 0x308, 0x0, 0x41a, 0x301, 0x0, 0x41e, 0x308, 0x0, 0x423, 0x304, 0x0, 0x423, 0x306, 0x0, 0x423, 0x308, 0x0, 0x423, 0x30b, 0x0, 0x427, 0x308, 0x0, 0x42b, 0x308, 0x0, 0x42d, 0x308, 0x0, 0x430, 0x0, 0x430, 0x306, 0x0, 0x430, 0x308, 0x0, 0x431, 0x0, 0x432, 0x0, 0x433, 0x0, 0x433, 0x301, 0x0, 0x434, 0x0, 0x435, 0x0, 0x435, 0x300, 0x0, 0x435, 0x306, 0x0, 0x435, 0x308, 0x0, 0x436, 0x0, 0x436, 0x306, 0x0, 0x436, 0x308, 0x0, 0x437, 0x0, 0x437, 0x308, 0x0, 0x438, 0x0, 0x438, 0x300, 0x0, 0x438, 0x304, 0x0, 0x438, 0x306, 0x0, 0x438, 0x308, 0x0, 0x43a, 0x0, 0x43a, 0x301, 0x0, 0x43b, 0x0, 0x43c, 0x0, 0x43d, 0x0, 0x43e, 0x0, 0x43e, 0x308, 0x0, 0x43f, 0x0, 0x440, 0x0, 0x441, 0x0, 0x442, 0x0, 0x443, 0x0, 0x443, 0x304, 0x0, 0x443, 0x306, 0x0, 0x443, 0x308, 0x0, 0x443, 0x30b, 0x0, 0x444, 0x0, 0x445, 0x0, 0x446, 0x0, 0x447, 0x0, 0x447, 0x308, 0x0, 0x448, 0x0, 0x44a, 0x0, 0x44b, 0x0, 0x44b, 0x308, 0x0, 0x44c, 0x0, 0x44d, 0x0, 0x44d, 0x308, 0x0, 0x44e, 0x0, 0x455, 0x0, 0x456, 0x0, 0x456, 0x308, 0x0, 0x458, 0x0, 0x45f, 0x0, 0x474, 0x30f, 0x0, 0x475, 0x30f, 0x0, 0x491, 0x0, 0x4ab, 0x0, 0x4af, 0x0, 0x4b1, 0x0, 0x4cf, 0x0, 0x4d8, 0x308, 0x0, 0x4d9, 0x0, 0x4d9, 0x308, 0x0, 0x4e8, 0x308, 0x0, 0x4e9, 0x0, 0x4e9, 0x308, 0x0, 0x565, 0x582, 0x0, 0x574, 0x565, 0x0, 0x574, 0x56b, 0x0, 0x574, 0x56d, 0x0, 0x574, 0x576, 0x0, 0x57e, 0x576, 0x0, 0x5d0, 0x0, 0x5d0, 0x5b7, 0x0, 0x5d0, 0x5b8, 0x0, 0x5d0, 0x5bc, 0x0, 0x5d0, 0x5dc, 0x0, 0x5d1, 0x0, 0x5d1, 0x5bc, 0x0, 0x5d1, 0x5bf, 0x0, 0x5d2, 0x0, 0x5d2, 0x5bc, 0x0, 0x5d3, 0x0, 0x5d3, 0x5bc, 0x0, 0x5d4, 0x0, 0x5d4, 0x5bc, 0x0, 0x5d5, 0x5b9, 0x0, 0x5d5, 0x5bc, 0x0, 0x5d6, 0x5bc, 0x0, 0x5d8, 0x5bc, 0x0, 0x5d9, 0x5b4, 0x0, 0x5d9, 0x5bc, 0x0, 0x5da, 0x5bc, 0x0, 0x5db, 0x0, 0x5db, 0x5bc, 0x0, 0x5db, 0x5bf, 0x0, 0x5dc, 0x0, 0x5dc, 0x5bc, 0x0, 0x5dd, 0x0, 0x5de, 0x5bc, 0x0, 0x5e0, 0x5bc, 0x0, 0x5e1, 0x5bc, 0x0, 0x5e2, 0x0, 0x5e3, 0x5bc, 0x0, 0x5e4, 0x5bc, 0x0, 0x5e4, 0x5bf, 0x0, 0x5e6, 0x5bc, 0x0, 0x5e7, 0x5bc, 0x0, 0x5e8, 0x0, 0x5e8, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x0, 0x5e9, 0x5bc, 0x5c1, 0x0, 0x5e9, 0x5bc, 0x5c2, 0x0, 0x5e9, 0x5c1, 0x0, 0x5e9, 0x5c2, 0x0, 0x5ea, 0x0, 0x5ea, 0x5bc, 0x0, 0x5f2, 0x5b7, 0x0, 0x621, 0x0, 0x627, 0x0, 0x627, 0x643, 0x628, 0x631, 0x0, 0x627, 0x644, 0x644, 0x647, 0x0, 0x627, 0x64b, 0x0, 0x627, 0x653, 0x0, 0x627, 0x654, 0x0, 0x627, 0x655, 0x0, 0x627, 0x674, 0x0, 0x628, 0x0, 0x628, 0x62c, 0x0, 0x628, 0x62d, 0x0, 0x628, 0x62d, 0x64a, 0x0, 0x628, 0x62e, 0x0, 0x628, 0x62e, 0x64a, 0x0, 0x628, 0x631, 0x0, 0x628, 0x632, 0x0, 0x628, 0x645, 0x0, 0x628, 0x646, 0x0, 0x628, 0x647, 0x0, 0x628, 0x649, 0x0, 0x628, 0x64a, 0x0, 0x629, 0x0, 0x62a, 0x0, 0x62a, 0x62c, 0x0, 0x62a, 0x62c, 0x645, 0x0, 0x62a, 0x62c, 0x649, 0x0, 0x62a, 0x62c, 0x64a, 0x0, 0x62a, 0x62d, 0x0, 0x62a, 0x62d, 0x62c, 0x0, 0x62a, 0x62d, 0x645, 0x0, 0x62a, 0x62e, 0x0, 0x62a, 0x62e, 0x645, 0x0, 0x62a, 0x62e, 0x649, 0x0, 0x62a, 0x62e, 0x64a, 0x0, 0x62a, 0x631, 0x0, 0x62a, 0x632, 0x0, 0x62a, 0x645, 0x0, 0x62a, 0x645, 0x62c, 0x0, 0x62a, 0x645, 0x62d, 0x0, 0x62a, 0x645, 0x62e, 0x0, 0x62a, 0x645, 0x649, 0x0, 0x62a, 0x645, 0x64a, 0x0, 0x62a, 0x646, 0x0, 0x62a, 0x647, 0x0, 0x62a, 0x649, 0x0, 0x62a, 0x64a, 0x0, 0x62b, 0x0, 0x62b, 0x62c, 0x0, 0x62b, 0x631, 0x0, 0x62b, 0x632, 0x0, 0x62b, 0x645, 0x0, 0x62b, 0x646, 0x0, 0x62b, 0x647, 0x0, 0x62b, 0x649, 0x0, 0x62b, 0x64a, 0x0, 0x62c, 0x0, 0x62c, 0x62d, 0x0, 0x62c, 0x62d, 0x649, 0x0, 0x62c, 0x62d, 0x64a, 0x0, 0x62c, 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647, 0x0, 0x62c, 0x645, 0x0, 0x62c, 0x645, 0x62d, 0x0, 0x62c, 0x645, 0x649, 0x0, 0x62c, 0x645, 0x64a, 0x0, 0x62c, 0x649, 0x0, 0x62c, 0x64a, 0x0, 0x62d, 0x0, 0x62d, 0x62c, 0x0, 0x62d, 0x62c, 0x64a, 0x0, 0x62d, 0x645, 0x0, 0x62d, 0x645, 0x649, 0x0, 0x62d, 0x645, 0x64a, 0x0, 0x62d, 0x649, 0x0, 0x62d, 0x64a, 0x0, 0x62e, 0x0, 0x62e, 0x62c, 0x0, 0x62e, 0x62d, 0x0, 0x62e, 0x645, 0x0, 0x62e, 0x649, 0x0, 0x62e, 0x64a, 0x0, 0x62f, 0x0, 0x630, 0x0, 0x630, 0x670, 0x0, 0x631, 0x0, 0x631, 0x633, 0x648, 0x644, 0x0, 0x631, 0x670, 0x0, 0x631, 0x6cc, 0x627, 0x644, 0x0, 0x632, 0x0, 0x633, 0x0, 0x633, 0x62c, 0x0, 0x633, 0x62c, 0x62d, 0x0, 0x633, 0x62c, 0x649, 0x0, 0x633, 0x62d, 0x0, 0x633, 0x62d, 0x62c, 0x0, 0x633, 0x62e, 0x0, 0x633, 0x62e, 0x649, 0x0, 0x633, 0x62e, 0x64a, 0x0, 0x633, 0x631, 0x0, 0x633, 0x645, 0x0, 0x633, 0x645, 0x62c, 0x0, 0x633, 0x645, 0x62d, 0x0, 0x633, 0x645, 0x645, 0x0, 0x633, 0x647, 0x0, 0x633, 0x649, 0x0, 0x633, 0x64a, 0x0, 0x634, 0x0, 0x634, 0x62c, 0x0, 0x634, 0x62c, 0x64a, 0x0, 0x634, 0x62d, 0x0, 0x634, 0x62d, 0x645, 0x0, 0x634, 0x62d, 0x64a, 0x0, 0x634, 0x62e, 0x0, 0x634, 0x631, 0x0, 0x634, 0x645, 0x0, 0x634, 0x645, 0x62e, 0x0, 0x634, 0x645, 0x645, 0x0, 0x634, 0x647, 0x0, 0x634, 0x649, 0x0, 0x634, 0x64a, 0x0, 0x635, 0x0, 0x635, 0x62d, 0x0, 0x635, 0x62d, 0x62d, 0x0, 0x635, 0x62d, 0x64a, 0x0, 0x635, 0x62e, 0x0, 0x635, 0x631, 0x0, 0x635, 0x644, 0x639, 0x645, 0x0, 0x635, 0x644, 0x649, 0x0, 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, 0x644, 0x645, 0x0, 0x635, 0x644, 0x6d2, 0x0, 0x635, 0x645, 0x0, 0x635, 0x645, 0x645, 0x0, 0x635, 0x649, 0x0, 0x635, 0x64a, 0x0, 0x636, 0x0, 0x636, 0x62c, 0x0, 0x636, 0x62d, 0x0, 0x636, 0x62d, 0x649, 0x0, 0x636, 0x62d, 0x64a, 0x0, 0x636, 0x62e, 0x0, 0x636, 0x62e, 0x645, 0x0, 0x636, 0x631, 0x0, 0x636, 0x645, 0x0, 0x636, 0x649, 0x0, 0x636, 0x64a, 0x0, 0x637, 0x0, 0x637, 0x62d, 0x0, 0x637, 0x645, 0x0, 0x637, 0x645, 0x62d, 0x0, 0x637, 0x645, 0x645, 0x0, 0x637, 0x645, 0x64a, 0x0, 0x637, 0x649, 0x0, 0x637, 0x64a, 0x0, 0x638, 0x0, 0x638, 0x645, 0x0, 0x639, 0x0, 0x639, 0x62c, 0x0, 0x639, 0x62c, 0x645, 0x0, 0x639, 0x644, 0x64a, 0x647, 0x0, 0x639, 0x645, 0x0, 0x639, 0x645, 0x645, 0x0, 0x639, 0x645, 0x649, 0x0, 0x639, 0x645, 0x64a, 0x0, 0x639, 0x649, 0x0, 0x639, 0x64a, 0x0, 0x63a, 0x0, 0x63a, 0x62c, 0x0, 0x63a, 0x645, 0x0, 0x63a, 0x645, 0x645, 0x0, 0x63a, 0x645, 0x649, 0x0, 0x63a, 0x645, 0x64a, 0x0, 0x63a, 0x649, 0x0, 0x63a, 0x64a, 0x0, 0x640, 0x64b, 0x0, 0x640, 0x64e, 0x0, 0x640, 0x64e, 0x651, 0x0, 0x640, 0x64f, 0x0, 0x640, 0x64f, 0x651, 0x0, 0x640, 0x650, 0x0, 0x640, 0x650, 0x651, 0x0, 0x640, 0x651, 0x0, 0x640, 0x652, 0x0, 0x641, 0x0, 0x641, 0x62c, 0x0, 0x641, 0x62d, 0x0, 0x641, 0x62e, 0x0, 0x641, 0x62e, 0x645, 0x0, 0x641, 0x645, 0x0, 0x641, 0x645, 0x64a, 0x0, 0x641, 0x649, 0x0, 0x641, 0x64a, 0x0, 0x642, 0x0, 0x642, 0x62d, 0x0, 0x642, 0x644, 0x6d2, 0x0, 0x642, 0x645, 0x0, 0x642, 0x645, 0x62d, 0x0, 0x642, 0x645, 0x645, 0x0, 0x642, 0x645, 0x64a, 0x0, 0x642, 0x649, 0x0, 0x642, 0x64a, 0x0, 0x643, 0x0, 0x643, 0x627, 0x0, 0x643, 0x62c, 0x0, 0x643, 0x62d, 0x0, 0x643, 0x62e, 0x0, 0x643, 0x644, 0x0, 0x643, 0x645, 0x0, 0x643, 0x645, 0x645, 0x0, 0x643, 0x645, 0x64a, 0x0, 0x643, 0x649, 0x0, 0x643, 0x64a, 0x0, 0x644, 0x0, 0x644, 0x627, 0x0, 0x644, 0x627, 0x653, 0x0, 0x644, 0x627, 0x654, 0x0, 0x644, 0x627, 0x655, 0x0, 0x644, 0x62c, 0x0, 0x644, 0x62c, 0x62c, 0x0, 0x644, 0x62c, 0x645, 0x0, 0x644, 0x62c, 0x64a, 0x0, 0x644, 0x62d, 0x0, 0x644, 0x62d, 0x645, 0x0, 0x644, 0x62d, 0x649, 0x0, 0x644, 0x62d, 0x64a, 0x0, 0x644, 0x62e, 0x0, 0x644, 0x62e, 0x645, 0x0, 0x644, 0x645, 0x0, 0x644, 0x645, 0x62d, 0x0, 0x644, 0x645, 0x64a, 0x0, 0x644, 0x647, 0x0, 0x644, 0x649, 0x0, 0x644, 0x64a, 0x0, 0x645, 0x0, 0x645, 0x627, 0x0, 0x645, 0x62c, 0x0, 0x645, 0x62c, 0x62d, 0x0, 0x645, 0x62c, 0x62e, 0x0, 0x645, 0x62c, 0x645, 0x0, 0x645, 0x62c, 0x64a, 0x0, 0x645, 0x62d, 0x0, 0x645, 0x62d, 0x62c, 0x0, 0x645, 0x62d, 0x645, 0x0, 0x645, 0x62d, 0x645, 0x62f, 0x0, 0x645, 0x62d, 0x64a, 0x0, 0x645, 0x62e, 0x0, 0x645, 0x62e, 0x62c, 0x0, 0x645, 0x62e, 0x645, 0x0, 0x645, 0x62e, 0x64a, 0x0, 0x645, 0x645, 0x0, 0x645, 0x645, 0x64a, 0x0, 0x645, 0x649, 0x0, 0x645, 0x64a, 0x0, 0x646, 0x0, 0x646, 0x62c, 0x0, 0x646, 0x62c, 0x62d, 0x0, 0x646, 0x62c, 0x645, 0x0, 0x646, 0x62c, 0x649, 0x0, 0x646, 0x62c, 0x64a, 0x0, 0x646, 0x62d, 0x0, 0x646, 0x62d, 0x645, 0x0, 0x646, 0x62d, 0x649, 0x0, 0x646, 0x62d, 0x64a, 0x0, 0x646, 0x62e, 0x0, 0x646, 0x631, 0x0, 0x646, 0x632, 0x0, 0x646, 0x645, 0x0, 0x646, 0x645, 0x649, 0x0, 0x646, 0x645, 0x64a, 0x0, 0x646, 0x646, 0x0, 0x646, 0x647, 0x0, 0x646, 0x649, 0x0, 0x646, 0x64a, 0x0, 0x647, 0x0, 0x647, 0x62c, 0x0, 0x647, 0x645, 0x0, 0x647, 0x645, 0x62c, 0x0, 0x647, 0x645, 0x645, 0x0, 0x647, 0x649, 0x0, 0x647, 0x64a, 0x0, 0x647, 0x670, 0x0, 0x648, 0x0, 0x648, 0x633, 0x644, 0x645, 0x0, 0x648, 0x654, 0x0, 0x648, 0x674, 0x0, 0x649, 0x0, 0x649, 0x670, 0x0, 0x64a, 0x0, 0x64a, 0x62c, 0x0, 0x64a, 0x62c, 0x64a, 0x0, 0x64a, 0x62d, 0x0, 0x64a, 0x62d, 0x64a, 0x0, 0x64a, 0x62e, 0x0, 0x64a, 0x631, 0x0, 0x64a, 0x632, 0x0, 0x64a, 0x645, 0x0, 0x64a, 0x645, 0x645, 0x0, 0x64a, 0x645, 0x64a, 0x0, 0x64a, 0x646, 0x0, 0x64a, 0x647, 0x0, 0x64a, 0x649, 0x0, 0x64a, 0x64a, 0x0, 0x64a, 0x654, 0x0, 0x64a, 0x654, 0x627, 0x0, 0x64a, 0x654, 0x62c, 0x0, 0x64a, 0x654, 0x62d, 0x0, 0x64a, 0x654, 0x62e, 0x0, 0x64a, 0x654, 0x631, 0x0, 0x64a, 0x654, 0x632, 0x0, 0x64a, 0x654, 0x645, 0x0, 0x64a, 0x654, 0x646, 0x0, 0x64a, 0x654, 0x647, 0x0, 0x64a, 0x654, 0x648, 0x0, 0x64a, 0x654, 0x649, 0x0, 0x64a, 0x654, 0x64a, 0x0, 0x64a, 0x654, 0x6c6, 0x0, 0x64a, 0x654, 0x6c7, 0x0, 0x64a, 0x654, 0x6c8, 0x0, 0x64a, 0x654, 0x6d0, 0x0, 0x64a, 0x654, 0x6d5, 0x0, 0x64a, 0x674, 0x0, 0x66e, 0x0, 0x66f, 0x0, 0x671, 0x0, 0x679, 0x0, 0x67a, 0x0, 0x67b, 0x0, 0x67e, 0x0, 0x67f, 0x0, 0x680, 0x0, 0x683, 0x0, 0x684, 0x0, 0x686, 0x0, 0x687, 0x0, 0x688, 0x0, 0x68c, 0x0, 0x68d, 0x0, 0x68e, 0x0, 0x691, 0x0, 0x698, 0x0, 0x6a1, 0x0, 0x6a4, 0x0, 0x6a6, 0x0, 0x6a9, 0x0, 0x6ad, 0x0, 0x6af, 0x0, 0x6b1, 0x0, 0x6b3, 0x0, 0x6ba, 0x0, 0x6bb, 0x0, 0x6be, 0x0, 0x6c1, 0x0, 0x6c1, 0x654, 0x0, 0x6c5, 0x0, 0x6c6, 0x0, 0x6c7, 0x0, 0x6c7, 0x674, 0x0, 0x6c8, 0x0, 0x6c9, 0x0, 0x6cb, 0x0, 0x6cc, 0x0, 0x6d0, 0x0, 0x6d2, 0x0, 0x6d2, 0x654, 0x0, 0x6d5, 0x654, 0x0, 0x915, 0x93c, 0x0, 0x916, 0x93c, 0x0, 0x917, 0x93c, 0x0, 0x91c, 0x93c, 0x0, 0x921, 0x93c, 0x0, 0x922, 0x93c, 0x0, 0x928, 0x93c, 0x0, 0x92b, 0x93c, 0x0, 0x92f, 0x93c, 0x0, 0x930, 0x93c, 0x0, 0x933, 0x93c, 0x0, 0x9a1, 0x9bc, 0x0, 0x9a2, 0x9bc, 0x0, 0x9af, 0x9bc, 0x0, 0x9c7, 0x9be, 0x0, 0x9c7, 0x9d7, 0x0, 0xa16, 0xa3c, 0x0, 0xa17, 0xa3c, 0x0, 0xa1c, 0xa3c, 0x0, 0xa2b, 0xa3c, 0x0, 0xa32, 0xa3c, 0x0, 0xa38, 0xa3c, 0x0, 0xb21, 0xb3c, 0x0, 0xb22, 0xb3c, 0x0, 0xb47, 0xb3e, 0x0, 0xb47, 0xb56, 0x0, 0xb47, 0xb57, 0x0, 0xb92, 0xbd7, 0x0, 0xbc6, 0xbbe, 0x0, 0xbc6, 0xbd7, 0x0, 0xbc7, 0xbbe, 0x0, 0xc46, 0xc56, 0x0, 0xcbf, 0xcd5, 0x0, 0xcc6, 0xcc2, 0x0, 0xcc6, 0xcc2, 0xcd5, 0x0, 0xcc6, 0xcd5, 0x0, 0xcc6, 0xcd6, 0x0, 0xd46, 0xd3e, 0x0, 0xd46, 0xd57, 0x0, 0xd47, 0xd3e, 0x0, 0xdd9, 0xdca, 0x0, 0xdd9, 0xdcf, 0x0, 0xdd9, 0xdcf, 0xdca, 0x0, 0xdd9, 0xddf, 0x0, 0xe4d, 0xe32, 0x0, 0xeab, 0xe99, 0x0, 0xeab, 0xea1, 0x0, 0xecd, 0xeb2, 0x0, 0xf0b, 0x0, 0xf40, 0xfb5, 0x0, 0xf42, 0xfb7, 0x0, 0xf4c, 0xfb7, 0x0, 0xf51, 0xfb7, 0x0, 0xf56, 0xfb7, 0x0, 0xf5b, 0xfb7, 0x0, 0xf71, 0xf72, 0x0, 0xf71, 0xf74, 0x0, 0xf71, 0xf80, 0x0, 0xf90, 0xfb5, 0x0, 0xf92, 0xfb7, 0x0, 0xf9c, 0xfb7, 0x0, 0xfa1, 0xfb7, 0x0, 0xfa6, 0xfb7, 0x0, 0xfab, 0xfb7, 0x0, 0xfb2, 0xf71, 0xf80, 0x0, 0xfb2, 0xf80, 0x0, 0xfb3, 0xf71, 0xf80, 0x0, 0xfb3, 0xf80, 0x0, 0x1025, 0x102e, 0x0, 0x10dc, 0x0, 0x1100, 0x0, 0x1100, 0x1161, 0x0, 0x1101, 0x0, 0x1102, 0x0, 0x1102, 0x1161, 0x0, 0x1103, 0x0, 0x1103, 0x1161, 0x0, 0x1104, 0x0, 0x1105, 0x0, 0x1105, 0x1161, 0x0, 0x1106, 0x0, 0x1106, 0x1161, 0x0, 0x1107, 0x0, 0x1107, 0x1161, 0x0, 0x1108, 0x0, 0x1109, 0x0, 0x1109, 0x1161, 0x0, 0x110a, 0x0, 0x110b, 0x0, 0x110b, 0x1161, 0x0, 0x110b, 0x116e, 0x0, 0x110c, 0x0, 0x110c, 0x1161, 0x0, 0x110c, 0x116e, 0x110b, 0x1174, 0x0, 0x110d, 0x0, 0x110e, 0x0, 0x110e, 0x1161, 0x0, 0x110e, 0x1161, 0x11b7, 0x1100, 0x1169, 0x0, 0x110f, 0x0, 0x110f, 0x1161, 0x0, 0x1110, 0x0, 0x1110, 0x1161, 0x0, 0x1111, 0x0, 0x1111, 0x1161, 0x0, 0x1112, 0x0, 0x1112, 0x1161, 0x0, 0x1114, 0x0, 0x1115, 0x0, 0x111a, 0x0, 0x111c, 0x0, 0x111d, 0x0, 0x111e, 0x0, 0x1120, 0x0, 0x1121, 0x0, 0x1122, 0x0, 0x1123, 0x0, 0x1127, 0x0, 0x1129, 0x0, 0x112b, 0x0, 0x112c, 0x0, 0x112d, 0x0, 0x112e, 0x0, 0x112f, 0x0, 0x1132, 0x0, 0x1136, 0x0, 0x1140, 0x0, 0x1147, 0x0, 0x114c, 0x0, 0x1157, 0x0, 0x1158, 0x0, 0x1159, 0x0, 0x1160, 0x0, 0x1161, 0x0, 0x1162, 0x0, 0x1163, 0x0, 0x1164, 0x0, 0x1165, 0x0, 0x1166, 0x0, 0x1167, 0x0, 0x1168, 0x0, 0x1169, 0x0, 0x116a, 0x0, 0x116b, 0x0, 0x116c, 0x0, 0x116d, 0x0, 0x116e, 0x0, 0x116f, 0x0, 0x1170, 0x0, 0x1171, 0x0, 0x1172, 0x0, 0x1173, 0x0, 0x1174, 0x0, 0x1175, 0x0, 0x1184, 0x0, 0x1185, 0x0, 0x1188, 0x0, 0x1191, 0x0, 0x1192, 0x0, 0x1194, 0x0, 0x119e, 0x0, 0x11a1, 0x0, 0x11aa, 0x0, 0x11ac, 0x0, 0x11ad, 0x0, 0x11b0, 0x0, 0x11b1, 0x0, 0x11b2, 0x0, 0x11b3, 0x0, 0x11b4, 0x0, 0x11b5, 0x0, 0x11c7, 0x0, 0x11c8, 0x0, 0x11cc, 0x0, 0x11ce, 0x0, 0x11d3, 0x0, 0x11d7, 0x0, 0x11d9, 0x0, 0x11dd, 0x0, 0x11df, 0x0, 0x11f1, 0x0, 0x11f2, 0x0, 0x1b05, 0x1b35, 0x0, 0x1b07, 0x1b35, 0x0, 0x1b09, 0x1b35, 0x0, 0x1b0b, 0x1b35, 0x0, 0x1b0d, 0x1b35, 0x0, 0x1b11, 0x1b35, 0x0, 0x1b3a, 0x1b35, 0x0, 0x1b3c, 0x1b35, 0x0, 0x1b3e, 0x1b35, 0x0, 0x1b3f, 0x1b35, 0x0, 0x1b42, 0x1b35, 0x0, 0x1d02, 0x0, 0x1d16, 0x0, 0x1d17, 0x0, 0x1d1c, 0x0, 0x1d1d, 0x0, 0x1d25, 0x0, 0x1d7b, 0x0, 0x1d85, 0x0, 0x1d91, 0x0, 0x2010, 0x0, 0x2013, 0x0, 0x2014, 0x0, 0x2032, 0x2032, 0x0, 0x2032, 0x2032, 0x2032, 0x0, 0x2032, 0x2032, 0x2032, 0x2032, 0x0, 0x2035, 0x2035, 0x0, 0x2035, 0x2035, 0x2035, 0x0, 0x20a9, 0x0, 0x2190, 0x0, 0x2190, 0x338, 0x0, 0x2191, 0x0, 0x2192, 0x0, 0x2192, 0x338, 0x0, 0x2193, 0x0, 0x2194, 0x338, 0x0, 0x21d0, 0x338, 0x0, 0x21d2, 0x338, 0x0, 0x21d4, 0x338, 0x0, 0x2202, 0x0, 0x2203, 0x338, 0x0, 0x2207, 0x0, 0x2208, 0x338, 0x0, 0x220b, 0x338, 0x0, 0x2211, 0x0, 0x2212, 0x0, 0x2223, 0x338, 0x0, 0x2225, 0x338, 0x0, 0x222b, 0x222b, 0x0, 0x222b, 0x222b, 0x222b, 0x0, 0x222b, 0x222b, 0x222b, 0x222b, 0x0, 0x222e, 0x222e, 0x0, 0x222e, 0x222e, 0x222e, 0x0, 0x223c, 0x338, 0x0, 0x2243, 0x338, 0x0, 0x2245, 0x338, 0x0, 0x2248, 0x338, 0x0, 0x224d, 0x338, 0x0, 0x2261, 0x338, 0x0, 0x2264, 0x338, 0x0, 0x2265, 0x338, 0x0, 0x2272, 0x338, 0x0, 0x2273, 0x338, 0x0, 0x2276, 0x338, 0x0, 0x2277, 0x338, 0x0, 0x227a, 0x338, 0x0, 0x227b, 0x338, 0x0, 0x227c, 0x338, 0x0, 0x227d, 0x338, 0x0, 0x2282, 0x338, 0x0, 0x2283, 0x338, 0x0, 0x2286, 0x338, 0x0, 0x2287, 0x338, 0x0, 0x2291, 0x338, 0x0, 0x2292, 0x338, 0x0, 0x22a2, 0x338, 0x0, 0x22a8, 0x338, 0x0, 0x22a9, 0x338, 0x0, 0x22ab, 0x338, 0x0, 0x22b2, 0x338, 0x0, 0x22b3, 0x338, 0x0, 0x22b4, 0x338, 0x0, 0x22b5, 0x338, 0x0, 0x2502, 0x0, 0x25a0, 0x0, 0x25cb, 0x0, 0x2985, 0x0, 0x2986, 0x0, 0x2add, 0x338, 0x0, 0x2c71, 0x0, 0x2d61, 0x0, 0x3001, 0x0, 0x3002, 0x0, 0x3008, 0x0, 0x3009, 0x0, 0x300a, 0x0, 0x300b, 0x0, 0x300c, 0x0, 0x300d, 0x0, 0x300e, 0x0, 0x300f, 0x0, 0x3010, 0x0, 0x3011, 0x0, 0x3012, 0x0, 0x3014, 0x0, 0x3014, 0x53, 0x3015, 0x0, 0x3014, 0x4e09, 0x3015, 0x0, 0x3014, 0x4e8c, 0x3015, 0x0, 0x3014, 0x52dd, 0x3015, 0x0, 0x3014, 0x5b89, 0x3015, 0x0, 0x3014, 0x6253, 0x3015, 0x0, 0x3014, 0x6557, 0x3015, 0x0, 0x3014, 0x672c, 0x3015, 0x0, 0x3014, 0x70b9, 0x3015, 0x0, 0x3014, 0x76d7, 0x3015, 0x0, 0x3015, 0x0, 0x3016, 0x0, 0x3017, 0x0, 0x3046, 0x3099, 0x0, 0x304b, 0x3099, 0x0, 0x304d, 0x3099, 0x0, 0x304f, 0x3099, 0x0, 0x3051, 0x3099, 0x0, 0x3053, 0x3099, 0x0, 0x3055, 0x3099, 0x0, 0x3057, 0x3099, 0x0, 0x3059, 0x3099, 0x0, 0x305b, 0x3099, 0x0, 0x305d, 0x3099, 0x0, 0x305f, 0x3099, 0x0, 0x3061, 0x3099, 0x0, 0x3064, 0x3099, 0x0, 0x3066, 0x3099, 0x0, 0x3068, 0x3099, 0x0, 0x306f, 0x3099, 0x0, 0x306f, 0x309a, 0x0, 0x3072, 0x3099, 0x0, 0x3072, 0x309a, 0x0, 0x3075, 0x3099, 0x0, 0x3075, 0x309a, 0x0, 0x3078, 0x3099, 0x0, 0x3078, 0x309a, 0x0, 0x307b, 0x304b, 0x0, 0x307b, 0x3099, 0x0, 0x307b, 0x309a, 0x0, 0x3088, 0x308a, 0x0, 0x3099, 0x0, 0x309a, 0x0, 0x309d, 0x3099, 0x0, 0x30a1, 0x0, 0x30a2, 0x0, 0x30a2, 0x30cf, 0x309a, 0x30fc, 0x30c8, 0x0, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x0, 0x30a2, 0x30f3, 0x30d8, 0x309a, 0x30a2, 0x0, 0x30a2, 0x30fc, 0x30eb, 0x0, 0x30a3, 0x0, 0x30a4, 0x0, 0x30a4, 0x30cb, 0x30f3, 0x30af, 0x3099, 0x0, 0x30a4, 0x30f3, 0x30c1, 0x0, 0x30a5, 0x0, 0x30a6, 0x0, 0x30a6, 0x3099, 0x0, 0x30a6, 0x30a9, 0x30f3, 0x0, 0x30a7, 0x0, 0x30a8, 0x0, 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c8, 0x3099, 0x0, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x0, 0x30a9, 0x0, 0x30aa, 0x0, 0x30aa, 0x30f3, 0x30b9, 0x0, 0x30aa, 0x30fc, 0x30e0, 0x0, 0x30ab, 0x0, 0x30ab, 0x3099, 0x0, 0x30ab, 0x3099, 0x30ed, 0x30f3, 0x0, 0x30ab, 0x3099, 0x30f3, 0x30de, 0x0, 0x30ab, 0x30a4, 0x30ea, 0x0, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x0, 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x0, 0x30ad, 0x0, 0x30ad, 0x3099, 0x0, 0x30ad, 0x3099, 0x30ab, 0x3099, 0x0, 0x30ad, 0x3099, 0x30cb, 0x30fc, 0x0, 0x30ad, 0x3099, 0x30eb, 0x30bf, 0x3099, 0x30fc, 0x0, 0x30ad, 0x30e5, 0x30ea, 0x30fc, 0x0, 0x30ad, 0x30ed, 0x0, 0x30ad, 0x30ed, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x0, 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x0, 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x0, 0x30af, 0x0, 0x30af, 0x3099, 0x0, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x0, 0x30af, 0x3099, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x0, 0x30af, 0x30eb, 0x30bb, 0x3099, 0x30a4, 0x30ed, 0x0, 0x30af, 0x30ed, 0x30fc, 0x30cd, 0x0, 0x30b1, 0x0, 0x30b1, 0x3099, 0x0, 0x30b1, 0x30fc, 0x30b9, 0x0, 0x30b3, 0x0, 0x30b3, 0x3099, 0x0, 0x30b3, 0x30b3, 0x0, 0x30b3, 0x30c8, 0x0, 0x30b3, 0x30eb, 0x30ca, 0x0, 0x30b3, 0x30fc, 0x30db, 0x309a, 0x0, 0x30b5, 0x0, 0x30b5, 0x3099, 0x0, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x0, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x0, 0x30b7, 0x0, 0x30b7, 0x3099, 0x0, 0x30b7, 0x30ea, 0x30f3, 0x30af, 0x3099, 0x0, 0x30b9, 0x0, 0x30b9, 0x3099, 0x0, 0x30bb, 0x0, 0x30bb, 0x3099, 0x0, 0x30bb, 0x30f3, 0x30c1, 0x0, 0x30bb, 0x30f3, 0x30c8, 0x0, 0x30bd, 0x0, 0x30bd, 0x3099, 0x0, 0x30bf, 0x0, 0x30bf, 0x3099, 0x0, 0x30bf, 0x3099, 0x30fc, 0x30b9, 0x0, 0x30c1, 0x0, 0x30c1, 0x3099, 0x0, 0x30c3, 0x0, 0x30c4, 0x0, 0x30c4, 0x3099, 0x0, 0x30c6, 0x0, 0x30c6, 0x3099, 0x0, 0x30c6, 0x3099, 0x30b7, 0x0, 0x30c8, 0x0, 0x30c8, 0x3099, 0x0, 0x30c8, 0x3099, 0x30eb, 0x0, 0x30c8, 0x30f3, 0x0, 0x30ca, 0x0, 0x30ca, 0x30ce, 0x0, 0x30cb, 0x0, 0x30cc, 0x0, 0x30cd, 0x0, 0x30ce, 0x0, 0x30ce, 0x30c3, 0x30c8, 0x0, 0x30cf, 0x0, 0x30cf, 0x3099, 0x0, 0x30cf, 0x3099, 0x30fc, 0x30ec, 0x30eb, 0x0, 0x30cf, 0x309a, 0x0, 0x30cf, 0x309a, 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x0, 0x30cf, 0x309a, 0x30fc, 0x30c4, 0x0, 0x30cf, 0x30a4, 0x30c4, 0x0, 0x30d2, 0x0, 0x30d2, 0x3099, 0x0, 0x30d2, 0x3099, 0x30eb, 0x0, 0x30d2, 0x309a, 0x0, 0x30d2, 0x309a, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0x0, 0x30d2, 0x309a, 0x30af, 0x30eb, 0x0, 0x30d2, 0x309a, 0x30b3, 0x0, 0x30d5, 0x0, 0x30d5, 0x3099, 0x0, 0x30d5, 0x3099, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x0, 0x30d5, 0x309a, 0x0, 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c8, 0x3099, 0x0, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x0, 0x30d5, 0x30e9, 0x30f3, 0x0, 0x30d8, 0x0, 0x30d8, 0x3099, 0x0, 0x30d8, 0x3099, 0x30fc, 0x30bf, 0x0, 0x30d8, 0x309a, 0x0, 0x30d8, 0x309a, 0x30bd, 0x0, 0x30d8, 0x309a, 0x30cb, 0x30d2, 0x0, 0x30d8, 0x309a, 0x30f3, 0x30b9, 0x0, 0x30d8, 0x309a, 0x30fc, 0x30b7, 0x3099, 0x0, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x0, 0x30d8, 0x30eb, 0x30c4, 0x0, 0x30db, 0x0, 0x30db, 0x3099, 0x0, 0x30db, 0x3099, 0x30eb, 0x30c8, 0x0, 0x30db, 0x309a, 0x0, 0x30db, 0x309a, 0x30a4, 0x30f3, 0x30c8, 0x0, 0x30db, 0x309a, 0x30f3, 0x30c8, 0x3099, 0x0, 0x30db, 0x30f3, 0x0, 0x30db, 0x30fc, 0x30eb, 0x0, 0x30db, 0x30fc, 0x30f3, 0x0, 0x30de, 0x0, 0x30de, 0x30a4, 0x30af, 0x30ed, 0x0, 0x30de, 0x30a4, 0x30eb, 0x0, 0x30de, 0x30c3, 0x30cf, 0x0, 0x30de, 0x30eb, 0x30af, 0x0, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x0, 0x30df, 0x0, 0x30df, 0x30af, 0x30ed, 0x30f3, 0x0, 0x30df, 0x30ea, 0x0, 0x30df, 0x30ea, 0x30cf, 0x3099, 0x30fc, 0x30eb, 0x0, 0x30e0, 0x0, 0x30e1, 0x0, 0x30e1, 0x30ab, 0x3099, 0x0, 0x30e1, 0x30ab, 0x3099, 0x30c8, 0x30f3, 0x0, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x0, 0x30e2, 0x0, 0x30e3, 0x0, 0x30e4, 0x0, 0x30e4, 0x30fc, 0x30c8, 0x3099, 0x0, 0x30e4, 0x30fc, 0x30eb, 0x0, 0x30e5, 0x0, 0x30e6, 0x0, 0x30e6, 0x30a2, 0x30f3, 0x0, 0x30e7, 0x0, 0x30e8, 0x0, 0x30e9, 0x0, 0x30ea, 0x0, 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0x0, 0x30ea, 0x30e9, 0x0, 0x30eb, 0x0, 0x30eb, 0x30d2, 0x309a, 0x30fc, 0x0, 0x30eb, 0x30fc, 0x30d5, 0x3099, 0x30eb, 0x0, 0x30ec, 0x0, 0x30ec, 0x30e0, 0x0, 0x30ec, 0x30f3, 0x30c8, 0x30b1, 0x3099, 0x30f3, 0x0, 0x30ed, 0x0, 0x30ef, 0x0, 0x30ef, 0x3099, 0x0, 0x30ef, 0x30c3, 0x30c8, 0x0, 0x30f0, 0x0, 0x30f0, 0x3099, 0x0, 0x30f1, 0x0, 0x30f1, 0x3099, 0x0, 0x30f2, 0x0, 0x30f2, 0x3099, 0x0, 0x30f3, 0x0, 0x30fb, 0x0, 0x30fc, 0x0, 0x30fd, 0x3099, 0x0, 0x349e, 0x0, 0x34b9, 0x0, 0x34bb, 0x0, 0x34df, 0x0, 0x3515, 0x0, 0x36ee, 0x0, 0x36fc, 0x0, 0x3781, 0x0, 0x382f, 0x0, 0x3862, 0x0, 0x387c, 0x0, 0x38c7, 0x0, 0x38e3, 0x0, 0x391c, 0x0, 0x393a, 0x0, 0x3a2e, 0x0, 0x3a6c, 0x0, 0x3ae4, 0x0, 0x3b08, 0x0, 0x3b19, 0x0, 0x3b49, 0x0, 0x3b9d, 0x0, 0x3c18, 0x0, 0x3c4e, 0x0, 0x3d33, 0x0, 0x3d96, 0x0, 0x3eac, 0x0, 0x3eb8, 0x0, 0x3f1b, 0x0, 0x3ffc, 0x0, 0x4008, 0x0, 0x4018, 0x0, 0x4039, 0x0, 0x4046, 0x0, 0x4096, 0x0, 0x40e3, 0x0, 0x412f, 0x0, 0x4202, 0x0, 0x4227, 0x0, 0x42a0, 0x0, 0x4301, 0x0, 0x4334, 0x0, 0x4359, 0x0, 0x43d5, 0x0, 0x43d9, 0x0, 0x440b, 0x0, 0x446b, 0x0, 0x452b, 0x0, 0x455d, 0x0, 0x4561, 0x0, 0x456b, 0x0, 0x45d7, 0x0, 0x45f9, 0x0, 0x4635, 0x0, 0x46be, 0x0, 0x46c7, 0x0, 0x4995, 0x0, 0x49e6, 0x0, 0x4a6e, 0x0, 0x4a76, 0x0, 0x4ab2, 0x0, 0x4b33, 0x0, 0x4bce, 0x0, 0x4cce, 0x0, 0x4ced, 0x0, 0x4cf8, 0x0, 0x4d56, 0x0, 0x4e00, 0x0, 0x4e01, 0x0, 0x4e03, 0x0, 0x4e09, 0x0, 0x4e0a, 0x0, 0x4e0b, 0x0, 0x4e0d, 0x0, 0x4e19, 0x0, 0x4e26, 0x0, 0x4e28, 0x0, 0x4e2d, 0x0, 0x4e32, 0x0, 0x4e36, 0x0, 0x4e38, 0x0, 0x4e39, 0x0, 0x4e3d, 0x0, 0x4e3f, 0x0, 0x4e41, 0x0, 0x4e59, 0x0, 0x4e5d, 0x0, 0x4e82, 0x0, 0x4e85, 0x0, 0x4e86, 0x0, 0x4e8c, 0x0, 0x4e94, 0x0, 0x4ea0, 0x0, 0x4ea4, 0x0, 0x4eae, 0x0, 0x4eba, 0x0, 0x4ec0, 0x0, 0x4ecc, 0x0, 0x4ee4, 0x0, 0x4ee4, 0x548c, 0x0, 0x4f01, 0x0, 0x4f11, 0x0, 0x4f60, 0x0, 0x4f80, 0x0, 0x4f86, 0x0, 0x4f8b, 0x0, 0x4fae, 0x0, 0x4fbb, 0x0, 0x4fbf, 0x0, 0x5002, 0x0, 0x502b, 0x0, 0x507a, 0x0, 0x5099, 0x0, 0x50cf, 0x0, 0x50da, 0x0, 0x50e7, 0x0, 0x512a, 0x0, 0x513f, 0x0, 0x5140, 0x0, 0x5145, 0x0, 0x514d, 0x0, 0x5154, 0x0, 0x5164, 0x0, 0x5165, 0x0, 0x5167, 0x0, 0x5168, 0x0, 0x5169, 0x0, 0x516b, 0x0, 0x516d, 0x0, 0x5177, 0x0, 0x5180, 0x0, 0x5182, 0x0, 0x518d, 0x0, 0x5192, 0x0, 0x5195, 0x0, 0x5196, 0x0, 0x5197, 0x0, 0x5199, 0x0, 0x51a4, 0x0, 0x51ab, 0x0, 0x51ac, 0x0, 0x51b5, 0x0, 0x51b7, 0x0, 0x51c9, 0x0, 0x51cc, 0x0, 0x51dc, 0x0, 0x51de, 0x0, 0x51e0, 0x0, 0x51f5, 0x0, 0x5200, 0x0, 0x5203, 0x0, 0x5207, 0x0, 0x5217, 0x0, 0x521d, 0x0, 0x5229, 0x0, 0x523a, 0x0, 0x523b, 0x0, 0x5246, 0x0, 0x524d, 0x0, 0x5272, 0x0, 0x5277, 0x0, 0x5289, 0x0, 0x529b, 0x0, 0x52a3, 0x0, 0x52b3, 0x0, 0x52b4, 0x0, 0x52c7, 0x0, 0x52c9, 0x0, 0x52d2, 0x0, 0x52de, 0x0, 0x52e4, 0x0, 0x52f5, 0x0, 0x52f9, 0x0, 0x52fa, 0x0, 0x5305, 0x0, 0x5306, 0x0, 0x5315, 0x0, 0x5317, 0x0, 0x531a, 0x0, 0x5338, 0x0, 0x533b, 0x0, 0x533f, 0x0, 0x5341, 0x0, 0x5344, 0x0, 0x5345, 0x0, 0x5349, 0x0, 0x5351, 0x0, 0x5354, 0x0, 0x535a, 0x0, 0x535c, 0x0, 0x5369, 0x0, 0x5370, 0x0, 0x5373, 0x0, 0x5375, 0x0, 0x537d, 0x0, 0x537f, 0x0, 0x5382, 0x0, 0x53b6, 0x0, 0x53c3, 0x0, 0x53c8, 0x0, 0x53ca, 0x0, 0x53cc, 0x0, 0x53df, 0x0, 0x53e3, 0x0, 0x53e5, 0x0, 0x53eb, 0x0, 0x53ef, 0x0, 0x53f1, 0x0, 0x53f3, 0x0, 0x5406, 0x0, 0x5408, 0x0, 0x540d, 0x0, 0x540f, 0x0, 0x541d, 0x0, 0x5438, 0x0, 0x5439, 0x0, 0x5442, 0x0, 0x5448, 0x0, 0x5468, 0x0, 0x549e, 0x0, 0x54a2, 0x0, 0x54bd, 0x0, 0x54f6, 0x0, 0x5510, 0x0, 0x554f, 0x0, 0x5553, 0x0, 0x5555, 0x0, 0x5563, 0x0, 0x5584, 0x0, 0x5587, 0x0, 0x5599, 0x0, 0x559d, 0x0, 0x55ab, 0x0, 0x55b3, 0x0, 0x55b6, 0x0, 0x55c0, 0x0, 0x55c2, 0x0, 0x55e2, 0x0, 0x5606, 0x0, 0x5651, 0x0, 0x5668, 0x0, 0x5674, 0x0, 0x56d7, 0x0, 0x56db, 0x0, 0x56f9, 0x0, 0x5716, 0x0, 0x5717, 0x0, 0x571f, 0x0, 0x5730, 0x0, 0x578b, 0x0, 0x57ce, 0x0, 0x57f4, 0x0, 0x580d, 0x0, 0x5831, 0x0, 0x5832, 0x0, 0x5840, 0x0, 0x585a, 0x0, 0x585e, 0x0, 0x58a8, 0x0, 0x58ac, 0x0, 0x58b3, 0x0, 0x58d8, 0x0, 0x58df, 0x0, 0x58eb, 0x0, 0x58ee, 0x0, 0x58f0, 0x0, 0x58f2, 0x0, 0x58f7, 0x0, 0x5902, 0x0, 0x5906, 0x0, 0x590a, 0x0, 0x5915, 0x0, 0x591a, 0x0, 0x591c, 0x0, 0x5922, 0x0, 0x5927, 0x0, 0x5927, 0x6b63, 0x0, 0x5929, 0x0, 0x5944, 0x0, 0x5948, 0x0, 0x5951, 0x0, 0x5954, 0x0, 0x5962, 0x0, 0x5973, 0x0, 0x59d8, 0x0, 0x59ec, 0x0, 0x5a1b, 0x0, 0x5a27, 0x0, 0x5a62, 0x0, 0x5a66, 0x0, 0x5ab5, 0x0, 0x5b08, 0x0, 0x5b28, 0x0, 0x5b3e, 0x0, 0x5b50, 0x0, 0x5b57, 0x0, 0x5b66, 0x0, 0x5b80, 0x0, 0x5b85, 0x0, 0x5b97, 0x0, 0x5bc3, 0x0, 0x5bd8, 0x0, 0x5be7, 0x0, 0x5bee, 0x0, 0x5bf3, 0x0, 0x5bf8, 0x0, 0x5bff, 0x0, 0x5c06, 0x0, 0x5c0f, 0x0, 0x5c22, 0x0, 0x5c38, 0x0, 0x5c3f, 0x0, 0x5c60, 0x0, 0x5c62, 0x0, 0x5c64, 0x0, 0x5c65, 0x0, 0x5c6e, 0x0, 0x5c71, 0x0, 0x5c8d, 0x0, 0x5cc0, 0x0, 0x5d19, 0x0, 0x5d43, 0x0, 0x5d50, 0x0, 0x5d6b, 0x0, 0x5d6e, 0x0, 0x5d7c, 0x0, 0x5db2, 0x0, 0x5dba, 0x0, 0x5ddb, 0x0, 0x5de1, 0x0, 0x5de2, 0x0, 0x5de5, 0x0, 0x5de6, 0x0, 0x5df1, 0x0, 0x5dfd, 0x0, 0x5dfe, 0x0, 0x5e28, 0x0, 0x5e3d, 0x0, 0x5e69, 0x0, 0x5e72, 0x0, 0x5e73, 0x6210, 0x0, 0x5e74, 0x0, 0x5e7a, 0x0, 0x5e7c, 0x0, 0x5e7f, 0x0, 0x5ea6, 0x0, 0x5eb0, 0x0, 0x5eb3, 0x0, 0x5eb6, 0x0, 0x5ec9, 0x0, 0x5eca, 0x0, 0x5ed2, 0x0, 0x5ed3, 0x0, 0x5ed9, 0x0, 0x5eec, 0x0, 0x5ef4, 0x0, 0x5efe, 0x0, 0x5f04, 0x0, 0x5f0b, 0x0, 0x5f13, 0x0, 0x5f22, 0x0, 0x5f50, 0x0, 0x5f53, 0x0, 0x5f61, 0x0, 0x5f62, 0x0, 0x5f69, 0x0, 0x5f6b, 0x0, 0x5f73, 0x0, 0x5f8b, 0x0, 0x5f8c, 0x0, 0x5f97, 0x0, 0x5f9a, 0x0, 0x5fa9, 0x0, 0x5fad, 0x0, 0x5fc3, 0x0, 0x5fcd, 0x0, 0x5fd7, 0x0, 0x5ff5, 0x0, 0x5ff9, 0x0, 0x6012, 0x0, 0x601c, 0x0, 0x6075, 0x0, 0x6081, 0x0, 0x6094, 0x0, 0x60c7, 0x0, 0x60d8, 0x0, 0x60e1, 0x0, 0x6108, 0x0, 0x6144, 0x0, 0x6148, 0x0, 0x614c, 0x0, 0x614e, 0x0, 0x6160, 0x0, 0x6168, 0x0, 0x617a, 0x0, 0x618e, 0x0, 0x6190, 0x0, 0x61a4, 0x0, 0x61af, 0x0, 0x61b2, 0x0, 0x61de, 0x0, 0x61f2, 0x0, 0x61f6, 0x0, 0x6200, 0x0, 0x6208, 0x0, 0x6210, 0x0, 0x621b, 0x0, 0x622e, 0x0, 0x6234, 0x0, 0x6236, 0x0, 0x624b, 0x0, 0x6253, 0x0, 0x625d, 0x0, 0x6295, 0x0, 0x62b1, 0x0, 0x62c9, 0x0, 0x62cf, 0x0, 0x62d3, 0x0, 0x62d4, 0x0, 0x62fc, 0x0, 0x62fe, 0x0, 0x6307, 0x0, 0x633d, 0x0, 0x6350, 0x0, 0x6355, 0x0, 0x6368, 0x0, 0x637b, 0x0, 0x6383, 0x0, 0x63a0, 0x0, 0x63a9, 0x0, 0x63c4, 0x0, 0x63c5, 0x0, 0x63e4, 0x0, 0x641c, 0x0, 0x6422, 0x0, 0x6452, 0x0, 0x6469, 0x0, 0x6477, 0x0, 0x647e, 0x0, 0x649a, 0x0, 0x649d, 0x0, 0x64c4, 0x0, 0x652f, 0x0, 0x6534, 0x0, 0x654f, 0x0, 0x6556, 0x0, 0x656c, 0x0, 0x6578, 0x0, 0x6587, 0x0, 0x6597, 0x0, 0x6599, 0x0, 0x65a4, 0x0, 0x65b0, 0x0, 0x65b9, 0x0, 0x65c5, 0x0, 0x65e0, 0x0, 0x65e2, 0x0, 0x65e3, 0x0, 0x65e5, 0x0, 0x660e, 0x6cbb, 0x0, 0x6613, 0x0, 0x6620, 0x0, 0x662d, 0x548c, 0x0, 0x6649, 0x0, 0x6674, 0x0, 0x6688, 0x0, 0x6691, 0x0, 0x669c, 0x0, 0x66b4, 0x0, 0x66c6, 0x0, 0x66f0, 0x0, 0x66f4, 0x0, 0x66f8, 0x0, 0x6700, 0x0, 0x6708, 0x0, 0x6709, 0x0, 0x6717, 0x0, 0x671b, 0x0, 0x6721, 0x0, 0x6728, 0x0, 0x674e, 0x0, 0x6753, 0x0, 0x6756, 0x0, 0x675e, 0x0, 0x677b, 0x0, 0x6785, 0x0, 0x6797, 0x0, 0x67f3, 0x0, 0x67fa, 0x0, 0x6817, 0x0, 0x681f, 0x0, 0x682a, 0x0, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x0, 0x6852, 0x0, 0x6881, 0x0, 0x6885, 0x0, 0x688e, 0x0, 0x68a8, 0x0, 0x6914, 0x0, 0x6942, 0x0, 0x69a3, 0x0, 0x69ea, 0x0, 0x6a02, 0x0, 0x6a13, 0x0, 0x6aa8, 0x0, 0x6ad3, 0x0, 0x6adb, 0x0, 0x6b04, 0x0, 0x6b20, 0x0, 0x6b21, 0x0, 0x6b54, 0x0, 0x6b62, 0x0, 0x6b63, 0x0, 0x6b72, 0x0, 0x6b77, 0x0, 0x6b79, 0x0, 0x6b9f, 0x0, 0x6bae, 0x0, 0x6bb3, 0x0, 0x6bba, 0x0, 0x6bbb, 0x0, 0x6bcb, 0x0, 0x6bcd, 0x0, 0x6bd4, 0x0, 0x6bdb, 0x0, 0x6c0f, 0x0, 0x6c14, 0x0, 0x6c34, 0x0, 0x6c4e, 0x0, 0x6c67, 0x0, 0x6c88, 0x0, 0x6cbf, 0x0, 0x6ccc, 0x0, 0x6ccd, 0x0, 0x6ce5, 0x0, 0x6ce8, 0x0, 0x6d16, 0x0, 0x6d1b, 0x0, 0x6d1e, 0x0, 0x6d34, 0x0, 0x6d3e, 0x0, 0x6d41, 0x0, 0x6d69, 0x0, 0x6d6a, 0x0, 0x6d77, 0x0, 0x6d78, 0x0, 0x6d85, 0x0, 0x6dcb, 0x0, 0x6dda, 0x0, 0x6dea, 0x0, 0x6df9, 0x0, 0x6e1a, 0x0, 0x6e2f, 0x0, 0x6e6e, 0x0, 0x6e80, 0x0, 0x6e9c, 0x0, 0x6eba, 0x0, 0x6ec7, 0x0, 0x6ecb, 0x0, 0x6ed1, 0x0, 0x6edb, 0x0, 0x6f0f, 0x0, 0x6f14, 0x0, 0x6f22, 0x0, 0x6f23, 0x0, 0x6f6e, 0x0, 0x6fc6, 0x0, 0x6feb, 0x0, 0x6ffe, 0x0, 0x701b, 0x0, 0x701e, 0x0, 0x7039, 0x0, 0x704a, 0x0, 0x706b, 0x0, 0x7070, 0x0, 0x7077, 0x0, 0x707d, 0x0, 0x7099, 0x0, 0x70ad, 0x0, 0x70c8, 0x0, 0x70d9, 0x0, 0x7121, 0x0, 0x7145, 0x0, 0x7149, 0x0, 0x716e, 0x0, 0x719c, 0x0, 0x71ce, 0x0, 0x71d0, 0x0, 0x7210, 0x0, 0x721b, 0x0, 0x7228, 0x0, 0x722a, 0x0, 0x722b, 0x0, 0x7235, 0x0, 0x7236, 0x0, 0x723b, 0x0, 0x723f, 0x0, 0x7247, 0x0, 0x7250, 0x0, 0x7259, 0x0, 0x725b, 0x0, 0x7262, 0x0, 0x7279, 0x0, 0x7280, 0x0, 0x7295, 0x0, 0x72ac, 0x0, 0x72af, 0x0, 0x72c0, 0x0, 0x72fc, 0x0, 0x732a, 0x0, 0x7375, 0x0, 0x737a, 0x0, 0x7384, 0x0, 0x7387, 0x0, 0x7389, 0x0, 0x738b, 0x0, 0x73a5, 0x0, 0x73b2, 0x0, 0x73de, 0x0, 0x7406, 0x0, 0x7409, 0x0, 0x7422, 0x0, 0x7447, 0x0, 0x745c, 0x0, 0x7469, 0x0, 0x7471, 0x0, 0x7485, 0x0, 0x7489, 0x0, 0x7498, 0x0, 0x74ca, 0x0, 0x74dc, 0x0, 0x74e6, 0x0, 0x7506, 0x0, 0x7518, 0x0, 0x751f, 0x0, 0x7524, 0x0, 0x7528, 0x0, 0x7530, 0x0, 0x7532, 0x0, 0x7533, 0x0, 0x7537, 0x0, 0x753b, 0x0, 0x753e, 0x0, 0x7559, 0x0, 0x7565, 0x0, 0x7570, 0x0, 0x758b, 0x0, 0x7592, 0x0, 0x75e2, 0x0, 0x7610, 0x0, 0x761d, 0x0, 0x761f, 0x0, 0x7642, 0x0, 0x7669, 0x0, 0x7676, 0x0, 0x767d, 0x0, 0x76ae, 0x0, 0x76bf, 0x0, 0x76ca, 0x0, 0x76db, 0x0, 0x76e3, 0x0, 0x76e7, 0x0, 0x76ee, 0x0, 0x76f4, 0x0, 0x7701, 0x0, 0x771e, 0x0, 0x771f, 0x0, 0x7740, 0x0, 0x774a, 0x0, 0x778b, 0x0, 0x77a7, 0x0, 0x77db, 0x0, 0x77e2, 0x0, 0x77f3, 0x0, 0x784e, 0x0, 0x786b, 0x0, 0x788c, 0x0, 0x7891, 0x0, 0x78ca, 0x0, 0x78cc, 0x0, 0x78fb, 0x0, 0x792a, 0x0, 0x793a, 0x0, 0x793c, 0x0, 0x793e, 0x0, 0x7948, 0x0, 0x7949, 0x0, 0x7950, 0x0, 0x7956, 0x0, 0x795d, 0x0, 0x795e, 0x0, 0x7965, 0x0, 0x797f, 0x0, 0x7981, 0x0, 0x798d, 0x0, 0x798e, 0x0, 0x798f, 0x0, 0x79ae, 0x0, 0x79b8, 0x0, 0x79be, 0x0, 0x79ca, 0x0, 0x79d8, 0x0, 0x79eb, 0x0, 0x7a1c, 0x0, 0x7a40, 0x0, 0x7a4a, 0x0, 0x7a4f, 0x0, 0x7a74, 0x0, 0x7a7a, 0x0, 0x7a81, 0x0, 0x7ab1, 0x0, 0x7acb, 0x0, 0x7aee, 0x0, 0x7af9, 0x0, 0x7b20, 0x0, 0x7b8f, 0x0, 0x7bc0, 0x0, 0x7bc6, 0x0, 0x7bc9, 0x0, 0x7c3e, 0x0, 0x7c60, 0x0, 0x7c73, 0x0, 0x7c7b, 0x0, 0x7c92, 0x0, 0x7cbe, 0x0, 0x7cd2, 0x0, 0x7cd6, 0x0, 0x7ce3, 0x0, 0x7ce7, 0x0, 0x7ce8, 0x0, 0x7cf8, 0x0, 0x7d00, 0x0, 0x7d10, 0x0, 0x7d22, 0x0, 0x7d2f, 0x0, 0x7d42, 0x0, 0x7d5b, 0x0, 0x7d63, 0x0, 0x7da0, 0x0, 0x7dbe, 0x0, 0x7dc7, 0x0, 0x7df4, 0x0, 0x7e02, 0x0, 0x7e09, 0x0, 0x7e37, 0x0, 0x7e41, 0x0, 0x7e45, 0x0, 0x7f36, 0x0, 0x7f3e, 0x0, 0x7f51, 0x0, 0x7f72, 0x0, 0x7f79, 0x0, 0x7f7a, 0x0, 0x7f85, 0x0, 0x7f8a, 0x0, 0x7f95, 0x0, 0x7f9a, 0x0, 0x7fbd, 0x0, 0x7ffa, 0x0, 0x8001, 0x0, 0x8005, 0x0, 0x800c, 0x0, 0x8012, 0x0, 0x8033, 0x0, 0x8046, 0x0, 0x8060, 0x0, 0x806f, 0x0, 0x8070, 0x0, 0x807e, 0x0, 0x807f, 0x0, 0x8089, 0x0, 0x808b, 0x0, 0x80ad, 0x0, 0x80b2, 0x0, 0x8103, 0x0, 0x813e, 0x0, 0x81d8, 0x0, 0x81e3, 0x0, 0x81e8, 0x0, 0x81ea, 0x0, 0x81ed, 0x0, 0x81f3, 0x0, 0x81fc, 0x0, 0x8201, 0x0, 0x8204, 0x0, 0x820c, 0x0, 0x8218, 0x0, 0x821b, 0x0, 0x821f, 0x0, 0x826e, 0x0, 0x826f, 0x0, 0x8272, 0x0, 0x8278, 0x0, 0x8279, 0x0, 0x828b, 0x0, 0x8291, 0x0, 0x829d, 0x0, 0x82b1, 0x0, 0x82b3, 0x0, 0x82bd, 0x0, 0x82e5, 0x0, 0x82e6, 0x0, 0x831d, 0x0, 0x8323, 0x0, 0x8336, 0x0, 0x8352, 0x0, 0x8353, 0x0, 0x8363, 0x0, 0x83ad, 0x0, 0x83bd, 0x0, 0x83c9, 0x0, 0x83ca, 0x0, 0x83cc, 0x0, 0x83dc, 0x0, 0x83e7, 0x0, 0x83ef, 0x0, 0x83f1, 0x0, 0x843d, 0x0, 0x8449, 0x0, 0x8457, 0x0, 0x84ee, 0x0, 0x84f1, 0x0, 0x84f3, 0x0, 0x84fc, 0x0, 0x8516, 0x0, 0x8564, 0x0, 0x85cd, 0x0, 0x85fa, 0x0, 0x8606, 0x0, 0x8612, 0x0, 0x862d, 0x0, 0x863f, 0x0, 0x864d, 0x0, 0x8650, 0x0, 0x865c, 0x0, 0x8667, 0x0, 0x8669, 0x0, 0x866b, 0x0, 0x8688, 0x0, 0x86a9, 0x0, 0x86e2, 0x0, 0x870e, 0x0, 0x8728, 0x0, 0x876b, 0x0, 0x8779, 0x0, 0x8786, 0x0, 0x87ba, 0x0, 0x87e1, 0x0, 0x8801, 0x0, 0x881f, 0x0, 0x8840, 0x0, 0x884c, 0x0, 0x8860, 0x0, 0x8863, 0x0, 0x88c2, 0x0, 0x88cf, 0x0, 0x88d7, 0x0, 0x88de, 0x0, 0x88e1, 0x0, 0x88f8, 0x0, 0x88fa, 0x0, 0x8910, 0x0, 0x8941, 0x0, 0x8964, 0x0, 0x897e, 0x0, 0x8986, 0x0, 0x898b, 0x0, 0x8996, 0x0, 0x89d2, 0x0, 0x89e3, 0x0, 0x8a00, 0x0, 0x8aa0, 0x0, 0x8aaa, 0x0, 0x8abf, 0x0, 0x8acb, 0x0, 0x8ad2, 0x0, 0x8ad6, 0x0, 0x8aed, 0x0, 0x8af8, 0x0, 0x8afe, 0x0, 0x8b01, 0x0, 0x8b39, 0x0, 0x8b58, 0x0, 0x8b80, 0x0, 0x8b8a, 0x0, 0x8c37, 0x0, 0x8c46, 0x0, 0x8c48, 0x0, 0x8c55, 0x0, 0x8c78, 0x0, 0x8c9d, 0x0, 0x8ca1, 0x0, 0x8ca9, 0x0, 0x8cab, 0x0, 0x8cc1, 0x0, 0x8cc2, 0x0, 0x8cc7, 0x0, 0x8cc8, 0x0, 0x8cd3, 0x0, 0x8d08, 0x0, 0x8d1b, 0x0, 0x8d64, 0x0, 0x8d70, 0x0, 0x8d77, 0x0, 0x8db3, 0x0, 0x8dbc, 0x0, 0x8dcb, 0x0, 0x8def, 0x0, 0x8df0, 0x0, 0x8eab, 0x0, 0x8eca, 0x0, 0x8ed4, 0x0, 0x8f26, 0x0, 0x8f2a, 0x0, 0x8f38, 0x0, 0x8f3b, 0x0, 0x8f62, 0x0, 0x8f9b, 0x0, 0x8f9e, 0x0, 0x8fb0, 0x0, 0x8fb5, 0x0, 0x8fb6, 0x0, 0x9023, 0x0, 0x9038, 0x0, 0x904a, 0x0, 0x9069, 0x0, 0x9072, 0x0, 0x907c, 0x0, 0x908f, 0x0, 0x9091, 0x0, 0x9094, 0x0, 0x90ce, 0x0, 0x90de, 0x0, 0x90f1, 0x0, 0x90fd, 0x0, 0x9111, 0x0, 0x911b, 0x0, 0x9149, 0x0, 0x914d, 0x0, 0x916a, 0x0, 0x9199, 0x0, 0x91b4, 0x0, 0x91c6, 0x0, 0x91cc, 0x0, 0x91cf, 0x0, 0x91d1, 0x0, 0x9234, 0x0, 0x9238, 0x0, 0x9276, 0x0, 0x927c, 0x0, 0x92d7, 0x0, 0x92d8, 0x0, 0x9304, 0x0, 0x934a, 0x0, 0x93f9, 0x0, 0x9415, 0x0, 0x9577, 0x0, 0x9580, 0x0, 0x958b, 0x0, 0x95ad, 0x0, 0x95b7, 0x0, 0x961c, 0x0, 0x962e, 0x0, 0x964b, 0x0, 0x964d, 0x0, 0x9675, 0x0, 0x9678, 0x0, 0x967c, 0x0, 0x9686, 0x0, 0x96a3, 0x0, 0x96b6, 0x0, 0x96b7, 0x0, 0x96b8, 0x0, 0x96b9, 0x0, 0x96c3, 0x0, 0x96e2, 0x0, 0x96e3, 0x0, 0x96e8, 0x0, 0x96f6, 0x0, 0x96f7, 0x0, 0x9723, 0x0, 0x9732, 0x0, 0x9748, 0x0, 0x9751, 0x0, 0x9756, 0x0, 0x975e, 0x0, 0x9762, 0x0, 0x9769, 0x0, 0x97cb, 0x0, 0x97db, 0x0, 0x97e0, 0x0, 0x97ed, 0x0, 0x97f3, 0x0, 0x97ff, 0x0, 0x9801, 0x0, 0x9805, 0x0, 0x980b, 0x0, 0x9818, 0x0, 0x9829, 0x0, 0x983b, 0x0, 0x985e, 0x0, 0x98a8, 0x0, 0x98db, 0x0, 0x98df, 0x0, 0x98e2, 0x0, 0x98ef, 0x0, 0x98fc, 0x0, 0x9928, 0x0, 0x9929, 0x0, 0x9996, 0x0, 0x9999, 0x0, 0x99a7, 0x0, 0x99ac, 0x0, 0x99c2, 0x0, 0x99f1, 0x0, 0x99fe, 0x0, 0x9a6a, 0x0, 0x9aa8, 0x0, 0x9ad8, 0x0, 0x9adf, 0x0, 0x9b12, 0x0, 0x9b25, 0x0, 0x9b2f, 0x0, 0x9b32, 0x0, 0x9b3c, 0x0, 0x9b5a, 0x0, 0x9b6f, 0x0, 0x9c40, 0x0, 0x9c57, 0x0, 0x9ce5, 0x0, 0x9cfd, 0x0, 0x9d67, 0x0, 0x9db4, 0x0, 0x9dfa, 0x0, 0x9e1e, 0x0, 0x9e75, 0x0, 0x9e7f, 0x0, 0x9e97, 0x0, 0x9e9f, 0x0, 0x9ea5, 0x0, 0x9ebb, 0x0, 0x9ec3, 0x0, 0x9ecd, 0x0, 0x9ece, 0x0, 0x9ed1, 0x0, 0x9ef9, 0x0, 0x9efd, 0x0, 0x9efe, 0x0, 0x9f05, 0x0, 0x9f0e, 0x0, 0x9f0f, 0x0, 0x9f13, 0x0, 0x9f16, 0x0, 0x9f20, 0x0, 0x9f3b, 0x0, 0x9f43, 0x0, 0x9f4a, 0x0, 0x9f52, 0x0, 0x9f8d, 0x0, 0x9f8e, 0x0, 0x9f9c, 0x0, 0x9f9f, 0x0, 0x9fa0, 0x0, 0xa651, 0x0, 0xa689, 0x0, 0xa727, 0x0, 0xa76f, 0x0, 0xa78e, 0x0, 0xab37, 0x0, 0xab52, 0x0, 0xab66, 0x0, 0xab67, 0x0, 0x11099, 0x110ba, 0x0, 0x1109b, 0x110ba, 0x0, 0x110a5, 0x110ba, 0x0, 0x11131, 0x11127, 0x0, 0x11132, 0x11127, 0x0, 0x11347, 0x1133e, 0x0, 0x11347, 0x11357, 0x0, 0x114b9, 0x114b0, 0x0, 0x114b9, 0x114ba, 0x0, 0x114b9, 0x114bd, 0x0, 0x115b8, 0x115af, 0x0, 0x115b9, 0x115af, 0x0, 0x11935, 0x11930, 0x0, 0x1d157, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x0, 0x1d158, 0x1d165, 0x1d16e, 0x0, 0x1d158, 0x1d165, 0x1d16f, 0x0, 0x1d158, 0x1d165, 0x1d170, 0x0, 0x1d158, 0x1d165, 0x1d171, 0x0, 0x1d158, 0x1d165, 0x1d172, 0x0, 0x1d1b9, 0x1d165, 0x0, 0x1d1b9, 0x1d165, 0x1d16e, 0x0, 0x1d1b9, 0x1d165, 0x1d16f, 0x0, 0x1d1ba, 0x1d165, 0x0, 0x1d1ba, 0x1d165, 0x1d16e, 0x0, 0x1d1ba, 0x1d165, 0x1d16f, 0x0, 0x1df04, 0x0, 0x1df05, 0x0, 0x1df06, 0x0, 0x1df08, 0x0, 0x1df0a, 0x0, 0x1df1e, 0x0, 0x20122, 0x0, 0x2051c, 0x0, 0x20525, 0x0, 0x2054b, 0x0, 0x2063a, 0x0, 0x20804, 0x0, 0x208de, 0x0, 0x20a2c, 0x0, 0x20b63, 0x0, 0x214e4, 0x0, 0x216a8, 0x0, 0x216ea, 0x0, 0x219c8, 0x0, 0x21b18, 0x0, 0x21d0b, 0x0, 0x21de4, 0x0, 0x21de6, 0x0, 0x22183, 0x0, 0x2219f, 0x0, 0x22331, 0x0, 0x226d4, 0x0, 0x22844, 0x0, 0x2284a, 0x0, 0x22b0c, 0x0, 0x22bf1, 0x0, 0x2300a, 0x0, 0x232b8, 0x0, 0x2335f, 0x0, 0x23393, 0x0, 0x2339c, 0x0, 0x233c3, 0x0, 0x233d5, 0x0, 0x2346d, 0x0, 0x236a3, 0x0, 0x238a7, 0x0, 0x23a8d, 0x0, 0x23afa, 0x0, 0x23cbc, 0x0, 0x23d1e, 0x0, 0x23ed1, 0x0, 0x23f5e, 0x0, 0x23f8e, 0x0, 0x24263, 0x0, 0x242ee, 0x0, 0x243ab, 0x0, 0x24608, 0x0, 0x24735, 0x0, 0x24814, 0x0, 0x24c36, 0x0, 0x24c92, 0x0, 0x24fa1, 0x0, 0x24fb8, 0x0, 0x25044, 0x0, 0x250f2, 0x0, 0x250f3, 0x0, 0x25119, 0x0, 0x25133, 0x0, 0x25249, 0x0, 0x2541d, 0x0, 0x25626, 0x0, 0x2569a, 0x0, 0x256c5, 0x0, 0x2597c, 0x0, 0x25aa7, 0x0, 0x25bab, 0x0, 0x25c80, 0x0, 0x25cd0, 0x0, 0x25f86, 0x0, 0x261da, 0x0, 0x26228, 0x0, 0x26247, 0x0, 0x262d9, 0x0, 0x2633e, 0x0, 0x264da, 0x0, 0x26523, 0x0, 0x265a8, 0x0, 0x267a7, 0x0, 0x267b5, 0x0, 0x26b3c, 0x0, 0x26c36, 0x0, 0x26cd5, 0x0, 0x26d6b, 0x0, 0x26f2c, 0x0, 0x26fb1, 0x0, 0x270d2, 0x0, 0x273ca, 0x0, 0x27667, 0x0, 0x278ae, 0x0, 0x27966, 0x0, 0x27ca8, 0x0, 0x27ed3, 0x0, 0x27f2f, 0x0, 0x285d2, 0x0, 0x285ed, 0x0, 0x2872e, 0x0, 0x28bfa, 0x0, 0x28d77, 0x0, 0x29145, 0x0, 0x291df, 0x0, 0x2921a, 0x0, 0x2940a, 0x0, 0x29496, 0x0, 0x295b6, 0x0, 0x29b30, 0x0, 0x2a0ce, 0x0, 0x2a105, 0x0, 0x2a20e, 0x0, 0x2a291, 0x0, 0x2a392, 0x0, 0x2a600, 0x0]; return t; } +//24512 bytes +enum compatMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)(x" +0000000000000000000000000000002000000000000002E0", +x" +00000000000001000000000000000B000000000000002460", +x" +040203020202010008070202060202050902020202020202000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000030002000100000007000600050004000A000900080000 +00000000000C000B000F000E000D0000001100100000000000150014001300120019001800170016001B001A00000000 +0000000000000000000000000000001C001E0000001D00000000001F0000000000000000000000000000000000000000 +000000000000000000000000000000000000002100200000000000220000000000000024002300000000000000000000 +00000025000000000000002700000026000000280000000000000029000000000000002A000000000000002B00000000 +00000000002C00000000002E002D0000003100300000002F000000000033003200000000003400000035000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000003800370036000000000000000000000000000000000000000000000000 +003B003A0039000000000000003D003C00410040003F003E00450044004300420049004800470046004D004C004B004A +00510050004F004E000000000053005200570056005500540000005A00590058005E005D005C005B006100000060005F +000000000062000000000000000000000063000000000000006700660065006400000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000690000000000680000006A0000000000000000000000000000000000000000 +006B0000000000000000000000000000006C00000000000000000000000000000000000000000000006E00000000006D +007200710070006F00000075007400730079007800770076007D007C007B007A0080007F007E00000000000000000081 +00850084008300820089008800870086008D008C008B008A00910090008F008E00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000009200930000000000000094000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +009600950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000009A009900980097009E009D009C009B00A200A100A0009F000000A500A400A3 +00A900A800A700A600AD00AC00AB00AA00B100B000AF00AE00B500B400B300B200B900B800B700B600BD00BC00BB00BA +00C100C000BF00BE00C500C400C300C200C900C800C700C600CD00CC00CB00CA00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000CF00CE0000000000000000000000000000000000000000 +00000000000000000000000000D100D00000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000D300D20000000000D40000000000000000000000000000000000000000000000000000 +000000D500000000000000D7000000D600000000000000000000000000D8000000000000000000000000000000D90000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000DA000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000DB00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000DC0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000DE00DD000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000E000DF00000000000000E200E10000 +000000000000000000000000000000000000000000000000000000000000000000E600E500E400E300EA00E900E800E7 +00EE00ED00EC00EB00F000E400E300EF00F300F200F100E600F600F500F400EA00FA00F900F800F700FE00FD00FC00FB +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000101010000FF00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000105010401030102000000000107010600000000000000000000000000000000 +00000000000000000000000000000000010B010A01090108000000000000010C0000010F010E010D0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000001140113011201110118011701160115011C011B011A01190120011F011E011D +000000000000012100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000001000000000000000000000692000000150009000000000000030F03430000000000000000120F0003 +0000078A031400480000049403C603CE058605730570056D05F8000005B005A606580631062E062B06F906EA06E706E4 +07AC07A907920000000007E607C207AF08BA08B708B4000000000000096208CE09C509B209AF09AC0A4A000009EF09E5 +0AB60A8F0A8C0A890B580B4C0B490B460C610C5E0C44000000000C9B0C770C640D710D6E0D6B00000E1E00000E0F0D85 +09CB058C09C805890A3E05EC0A0D05CE0A4405F20A4105EF0A71061A0A4705F50AA50647000000000AB306550AB00652 +0ABC065E0AD306750B0406A00AFE069A0B0D06A90B0706A3000000000B1906BA0B5206F00B4F06ED0B6E070F0B5506F3 +0B3A06D8000006F60BB1072E0B76071707500BCF0743000007400BD207460BDC078F000000000BCC07980C50079E0C41 +000000000F300C4A0C9107DC0C8607D1000000000CA507F00D20085B0D0A08450D2E086F0D10084B0D4C088D0D350876 +0D6008A90D3B087C000000000D5708A00D7B08C40D7408BD0D9B08E40D8208CB0DC709100D9E08E70E1209650DEC0942 +09820E2C097C097108430614060D0E32000000000CB107FC0000000000000000000000000000000008F3000000000000 +0000000000000DAA000000000000000000000000000000000000000000000000000000000000000007360A6A0613060C +078607830BBC073D070309F605B70C3508EA0CA807F30B6208D50D9008D90DA108D10D9408DD0D8C09E805A900000D88 +0E680E5D09E105A20B0A06A6000000000CCF081A0BAB07280F070E820CD2081D0A67061006090B79000000000AFB0697 +09F205B30C3E078C0E6F0E600E650E5A09FC05BD09F905BA0AC206640ABF06610B6807090B6507060CAE07F90CAB07F6 +0D1608510D13084E0DA708F00DA408ED0D5D08A60D49088A0B2206C300000000000000000000000009DE059F00000000 +0C9E07E90ACC066E0C9407DF0C7E07C90E18096B0C9707E2000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000A14073E0EB70B100DE40EE90EE10EDD +000000000000069500000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000004B00240012000F00000000002700060B4408430A2B0EB10000000000000F0A +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +002B00000004001A000000000000001D0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000F2E00000054000000000000054600000000000000000000000007410F45001C0003 +000010110FC00FA0109910730000104A00000000000011E2000000000000000000000000000000000000000000000000 +00000000000000000000000000000000107C101A0000000011D21176115210EC00000000000012700000000000000000 +0000000000000000000000000000000000000000000000000000000000000000126911DB00000000000012A812601232 +1073106E11CB11470000124B1299107C0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000001255124D120B00000000114D100A00000000106A00000000000000000000 +130A00001313130D1301000000000000000000000000000000001334131F132B00000000000000000000000000000000 +000000001325000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000013790000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000135400001361135B13C600000000000000000000000000000000139C13731381 +0000000000000000000000000000000000000000000000000000000000000000000000000000000013D013CD00000000 +000000000000000000000000000000000000136613160000000000000000000000000000000000000000000000000000 +134B130713481304135E13100000000013E213DD00000000136E131C136913191376132200000000138C132E137C1328 +13EA13E5000000001399133113BD134313A2133A139F13370000000013AD133D0000000013B613400000000000000000 +000000000000000013ED0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001494149100000000000018751497183A00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000001906183D149A000000000000000018BC0000000000000000 +000018FD0000191800000000000000000000000000000000000000000000000019150000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000192D00000000000000000000 +000000001936000000000000000019390000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000019241921191E191B19331930192A1927 +000000000000000000000000000000001945000000000000000000000000194800000000000000000000000000000000 +000000000000000019420000193F193C0000000000000000000000000000000000000000000000000000000000000000 +19570000000000000000195A000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001951194E194B00000000195400000000 +000000000000000000000000000000001963000000001966000000000000196900000000000000000000000000000000 +0000000000000000000000001960195D0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000196C0000000000000000000000000000000000000000000000000000000000000000 +1975196F0000000000000000000019720000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001978000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000197B19850000000000001981197E000019880000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1991198B00000000000000000000198E0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001994000000000000199E199A19970000000000000000000000000000000000000000000000000000000000000000 +19A100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000019AA000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000019A719A400000000000000000000000000000000000000000000000000000000000019AD +000000000000000000000000000000000000000000000000000000000000000019B20000000000000000000000000000 +00000000000000000000000019B50000000019B80000000019BB000000000000000000000000000000000000000019BE +000000000000000000000000000000000000000019AF0000000000000000000019C100000000000019DC19E019C40000 +0000000019E319E700000000000000000000000019C70000000000000000000000000000000000000000000000000000 +19CD000000000000000000000000000000000000000000000000000019D00000000019D30000000019D6000000000000 +000000000000000000000000000019D9000000000000000000000000000000000000000019CA00000000000000000000 +0000000000000000000019EA000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000019ED000000000000000000001AE300000000 +00001AE900001AE600001AEF00001AEC00001AF200000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1AF5000000000000000000001AF800001B0100001AFE1AFB000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000005D50E58056806870E7C062905E6071A060706CF06AC0000078107230734076D06AF0E8B07A7 +06920773056B0890093A1B040E910E8F0EA30EA10A800A310B7C000006020EA50E97078A0E7805D30BA60CD61B081B06 +086D0EC91B0C0A27114B114911471B0E0A140AE3129B129911491147086D0A270000129B1299124D0000000000000000 +000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000E930000000000000EA50E6B0E9909A3 +0EB50EAD0EA90ADC1B100EBF0EBD0EBB0F161B120EC50F140ED10ECF0ECB0ECD0EEB0EDB0ED50ED30EF50EF30E800EED +06110EF90EF71B0A11CB0F050F030F010A1605DA0A0A05CB0A1C05E00A1905DD0A6E06170A4D05FB0A7D06260A74061D +0A7A06230A7706200AAC064E0AA8064A0AD9067B0AD606780AF206840ACF06710B1C06BD0B01069D0B1F06C00B2506C6 +0B2B06CC0B2806C90B5B06FC0B7107120BAE072B0BA807250BD507490BB407310BE207560BD8074C0C1507750BDF0753 +0C1B077B0C1807780C4D079B0C4707950C5307A10C5607A40C8207CD0C7A07C50C8D07D80C8907D40CF2083B0CEF0838 +0D1908540D0D08480D23085E0D1C08570D4208830D3808790D3E087F0D3108720D51089D0D4508860D6608AF0D5A08A3 +0DC4090D0D6308AC0DCA09130DCD09160D7E08C70D7708C00DE1092A0DDE09270DE9093F0DE6093C0DEF09450DF20948 +0E0409570DF8094B0E1B096E0E07095A0E3809880E2F097F0D540B2E0E3B098B0D3809A90E240DF50000000000000000 +09EC05AD09FF05C009B5057609B9057A09BD057E09C1058209D205930A0205C309DA059B09CE058F0A0605C709D60597 +0AB9065B0AC506670A9606380AA206440A9E06400A9206340AC8066A0A9A063C0B6B070C0B5F07000CA207ED0CC80813 +0C6707B20C6B07B60C6F07BA0C7307BE0CB808030CCB08160CC0080B0CB407FF0CC4080F0CBC08070D9808E10DC1090A +0DAD08F60DB108FA0DB508FE0DB909020E0C095F0DBD09060E2109740E270977000000000E1509680000000000000000 +111E10FC111B10F91130110E112711050F730F510F700F4E0F850F630F7C0F5A1163115811601155000000001167115C +0FB10FA60FAE0FA3000000000FB50FAA11A21180119F117D11B4119211AB11890FE80FC60FE50FC30FFA0FD80FF10FCF +11FC11ED11F911EA120411F5120011F1102F1020102C101D10371028103310241243123812401235000000001247123C +105B10501058104D00000000105F1054128A127B1287127812921283128E127F10820000107F0000108A000010860000 +12D412B212D112AF12E612C412DD12BB10C1109F10BE109C10D310B110CA10A81152114F10EC10E511D211CF1176116F +1260125D1232122F0000000012A812A1112211001139111711341112112B11090F770F550F8E0F6C0F890F670F800F5E +11A6118411BD119B11B8119611AF118D0FEC0FCA10030FE10FFE0FDC0FF50FD312D812B612EF12CD12EA12C812E112BF +10C510A310DC10BA10D710B510CE10AC114410E810F310F61140113D000010EF0F450F420F480F4B002A11CD002A0F92 +11C811720020005111C411C1000011790FC00FBD0FA00F9D00350031002D100711E211DE11D511D811E6120800000000 +1011100E1014101700440040003C00001270126C12631266127412961252124F10731070107610790998001C00181067 +12FA12A40000000012F612F3000012AB10991096104A104700000039000310E000010001000100010001000100010001 +00000001000100010000000000000000000000001B160000004E00000000000000000000000000000000000000000000 +0000000000000000000002FF02FC02FA000000000000000000010000000000001B1C0000000000001B2B1B2800001B1F +00000000000000000000000C0000008F0000000000000000056300000000000000000000009205600000000000000000 +00000000000000001B230000000000000000000000000000000100000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000AE3030503920383037403651B5A02F403B003A10B3E00A500A10544 +030F03430314030503920383037403651B5A02F403B003A1000000A500A105440B44078A0A8006920A2B0B7C0B100EA1 +08430CD60B3E05D30000000000000BA60000000000000000000000000000000000000000000008420000000000000000 +00000000000000000000000000000000000000000000000000000000000000000E5005E309A509A10E7E0A250A210000 +06AC06020E5300000E740B1006AC06AC0A2B073406CF06CF0000078907810000076D083E06AF000000000000076D076D +0000089A089208660000077F0000060A05B0071A0000060A0A80000005E305D507230000067E06291415140D13FF078A +068000000AE3141A10630F971149124B0000000000001B580A800A3105E6000000000000073E0AE30000000000000000 +03CA03C103E203DA0498045903D2045503DE04E703D604CF03BE051104EB049C06DE06D406D106CF0922091E091B06B2 +09530950068206E1072305E605E307340B400B360B330AE30DD90DD50DD2086D0E000DFD0B440B4305D30A3109A30A2B +0000000000000000000000000000000000000000030D0000000000000000000000000000000000000000000000000000 +1B3A1B3300000000000000000000000000000000000000000000000000000000000000000000000000001B3F00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001B451B481B4200000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001B4D000000001B5200000000000000001B5500000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001B5F00001B5C00000000000000001B6E00001B651B62 +0000000000001B71000000000000000000000000000000000000000000000000000000001B7500001B7B000000001B78 +000000001B7E000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001B840000055600000000000000000000000000000000055B054A1B810000000000001B8A1B87000000001B901B8D +000000001B961B930000000000000000000000001B9C1B99000000001BA81BA5000000001BAE1BAB0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001BC01BBD1BBA1BB70000000000000000000000000000000000000000000000000000000000000000 +1BB41BB11BA21B9F00000000000000001BC61BC300000000000000001BCC1BC900000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001BE61BE400000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000365030F0343031403A1039203830374 +0342032F031C03B0038203730364035503F703AF03A0039100E600E200D900A300F600F200EE00EA00B100AC00A700FA +00C500C000BB00B600DD00D400CF00CA036803590346031903A403950386037703450332031F03B30385037603670358 +03FA03B203A303940172016E016A01660182017E017A01760192018E018A018601A2019E019A019601B201AE01AA01A6 +01C201BE01BA01B605D5056801CA01C6067E062905E605E3060706CF06AC0687078107230734071A076D083E06AF07A7 +06B2056B08900861060A095D068207730A3109A3093A06920B1006020ADC0A800A2B0B7C073E0AE30CD6078A0B3E05D3 +0BA608430A1405D80B440DE4086D0A270000030506110695000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B69 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000552054F054200000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001BD90000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000006B2073E00000000000000000000000000000000 +00000000000000001BDE0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000232E0000000000000000000000000000000000000000000000000000000000000000000000000000 +27640000000000000000000000000000000000000000000000000000000000001FB81FB01FAA1F981FCA1FC61FC21FBC +201120091FFD1FD02039202920212019206B2057203D203B207F207920772073209D209B208F208D210120F720A920A1 +2131212F212B212121662160214A21392180217E217C217621AA21A4218E218C21C121BA21B221AE21E121DD21DB21C5 +21F321EB21E721E322492247223D220122972295228B2289032522A3229F229B231222D5032922C3232C232623202318 +233623342332233023BE23B82394233823C823C423C223C023E623E223D423CA240E240C240824062428242624142412 +243C243A24382436245C245A2458244624A02490248E246E24CE24BC24AC24A8250424FE24F424F02510250E250C2508 +2530252C251E251C2540253C25362534254A25482544254225C025BE25A4259A25E225DE25DA25C4260A2606260425E6 +26262624260E260C264426362634262A266C265C264A26482692267C2678267626B426AE269C269426CE26CC26C826BC +26DA26D826D226D026F026EE26EC26DE270C270226FE26FC271627142710270E2724271C271A2718273A273827322730 +27442742273E273C27542750274C2746275E275C275A2756000000002766276200000000000000000000000000000000 +000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000001BF800000000000020832081207F000000000000000000000000000000000000000000000000 +000000000000000000001C3000001C2D00001C3600001C3300001C3C00001C3900001C4200001C3F00001C4800001C45 +00001C4E00001C4B1C5400001C510000000000001C57000000000000000000001C6000001C5D1C5A1C691C6600001C63 +00001C6F1C6C0000000000001C781C750000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001C2A00870000000000001C7B1C820000008A00000000000000000000000000000000 +000000000000000000001CF200001CD500001D4100001CA500001D5E00001D4A00001D7900001D6E00001D8B00001D7E +00001D9A00001D901DA600001DA10000000000001CBF000000000000000000001DEA00001DD51DCC1E101E0600001DF1 +00001E2D1E250000000000001D591E500000000000000000000000000000000000000000000000000000000000000000 +00000000000000001EF3000000001CB000001F061F011EFC1D501F0F0000000000000000000000000000000000000000 +000000000000000000000000000000001ABB19F419EF000019FB1ABF1ABD19F61AC31AC11A021A001ACB1AC91AC71AC5 +1A111A0C1A071A511A1A1A181A131A5B1A391A2E1A2C1A2219F21A481A431A3E1A891A871A851A831A371A8F1A8D1A8B +1A991A971A951A931AA11A9F1A9D1A201AA91A2A1AA51AA31ACD1A4F1A4D1A7F1AD51AD31AD11ACF1ADB1A531AD91AD7 +1A591A571A551ADD1A631A611A5F1A5D1A6B1A691A671A651A731A711A6F1A6D1AE11ADF1A771A751AAB1A7D1A7B1A79 +1AB31AB11AAF1AAD00001AB91AB71AB51FC61F98000000001FAC1FA020F91F9E1FA61FBC24161FA21FD02103213E1F9A +01E901E001D701CE020D020401FB01F20245023C0233022501DB01D20257024E01FF01F601ED01E40237022902110208 +025B0252024902400000021E0216022E02A0026802700260028402640288027402C402B00290026C02A402EC02B802C0 +02D002B402BC02AC02D402E402C8029802A8029C0278028C029402E8027C02CC02E002DC028002D824B0229521C320D3 +00000000000000000000000000000000041C04110406083104400439043204270475046E044E044704850482047F047C +1A0219FB19F619EF1A1A1A131A0C1A071A3E1A391A2E1A2219F819F11A481A431A0E1A091A0419FD1A301A241A1C1A15 +1A4A1A451A401A3B00001A1F1A271A3320F91F9E1FC61F9820111F9C20131FC823940329207F1FBE2101267C22D52338 +22F222CD22ED0325247C261023CE20B9214A241A2494205D234820911FFB2654213C20251FDD26E021AC1FA21FAC1FA0 +2164216A207B20B32089261A1FDB2442048E048B0488213504B704B404B1049104C304C004BD04BA04E404CC04C904C6 +04D604A3034E033B05290518050304F2034D033A0327053A07390A820A8506B41CB91CAE1CA01C871D221CF01CD31CC9 +1D6C1D5C1D481D3F1D8E1D891D7C1CCD1C8D1DA41D9F1CAA1D3D1DC01DBE1D551E041DE81DCA1DBC1E8B1CE01E4E1E23 +1EB31EAF1E9E1CD11CE41ECA1EC81EC01EF11D0C1EE31C9C1FD81F041EFF1EFA1C9A1C941C8F1C891CBB1CB31CA81CA2 +1CE21CCF1CCB1CC21CDD1CD81CEB1CE61CFF1D061CFA1CF51D1C1D151D0E1D0B1D3A1D331D2C1D101D611D571D531D44 +1D851D811D711D661D301DB21DA91D931DD81DE41DC61DBB1DFB1DF41DCF1DDF1E1A1E131DED1E001E301E441E1F1E09 +1E3E1E391E4A1E341E671E531E5B1E281E741E6E1E6A1E611E851E811E7D1E791EA01E951E921E8D1EBA1EB51D171EA4 +1ED81ED31ECE1EC21D1E1EE81EE51EDD03610352033F0311039D038E037F0370033E032B03BB03AC037E036F03600351 +03BA03AB039C038D04230418040D0402056A0A560B12042E0A5C0CE90C5B0A1221BC06DB0A630A5F22EF22AB213B22B2 +0BED12110C290CDD0689075B071C0B7E0C2C0CE00B8F0A2906010BF9121D1214068C07640B81068D0A590C0012200896 +12230C380AEF0B970C060B9A0A330C030C0A0B9D0A370A360C1E0BA10A3B0A3A07680B8506910C220D030CFD0CF90690 +0C1212260C3B0CEC0BF012170C2F0CE30C320CE6076F0B8907720B8C0BF3121A05D7099C077E0BB705E805FF0A300A2D +06AE0B1606940A530BA50722071F0B3D0BC90BC50BC20BBF08230C0E0BFC0BF60D28082E08260CD805D1092D0939086C +036C035D034A033703A80399038A037B03490336032303B70389037A036B035C03FE03B603A70398042A041F04140409 +044A0443043C04350AF70478047104510000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000013B913B200000000000000000000000000000000 +00000000000000000000000000000000000000000000276E000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000067E05E300000000000000000000083E +000000000E7A0E7200000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000027740EC12772276C00000000000000000000000000000000 +000000000EFB000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +261C263622C52608276220AB1FAE237820DD267C2144276224FC243422392142265A25D025B6259823EE23A2234C2306 +1FC027062670257C259623B423102095258E23882198272E25BC252A225325D823DA235822CF21D12065202F1FE32660 +244423B2230C22872630259E259225082462272C271E26C4268A256E24DE248221DF211F25F22732246623CC251A24BA +2186211D26C0261824D6237C236223082520206326A024EA24E02498203320352255260026A4257A21701FB425F82306 +2075242423E4220B1FA421FD1FEB246A209F24D42293234225EA257E244A2115225D233E264823281FCE2422226D255A +24CA22F62031200F2069267A25F0254622A121D9214A20C3270A2698246C238A22C1205727402734222D21BF2642231E +23A823822283223B251624E424922400268C264E2582263A23A020CD20592043220721CF25EA25C623DE24B823242269 +21A2217020FB1FD6250223FA23EC220D26C626BE267E25122674248C1FE526E41FF71FC4221926B22306229921822172 +26582588243223AE2055269E22B9275E2370235422E522DF24D22460242023F226A62243201326EA263C236421941FEF +23E422E9221D21F5218A20BB204726AA234622FC22D722AE25C824F8242A23F0207D26B8267825CE240223B020BD2372 +2736272226AC259024A8252E236022E3239C23D824C024AE204925621FD225FE24C6225721C72041264022BF234E2168 +21D525DE26A225C00000000020E91FFF000022B700002113243E23DC20370000248A2480247E24700000250424C226CA +000025F600002594000026662650000026F626F40000000026B02662272A26F8206120031FF91FE720EF20E120872067 +21882117211120F3222B22272213218C22BB22A5228D223723802368235A22F8246423F423BA23AA24782474247622F2 +24882486247C247A24E424B224A4249A250A24F624EC24E82580254C254C253225FC25FA25E025D42650264C2620261E +220F26E826DC26BA00000000253E28731FE1200D202D1FA8206D205F2017200120ED20DF20D720E121462140211B2113 +21D721D3215C21542223221721FF21EF22372225222B221B227B22772271224522D122CF22B7228F23542328232022DB +238E23802376237A23D623BC245623AA241C240A23FC23DC2440243E2430242E246824502452244824DA24BE24B224A6 +2564250A24F224E425DC25D625B2257825EE25F625EC25E025FC25F425F825FA2656263E2620260226BA26A826822672 +26E226DC26D426CA28492762271226E81F501F3C285B284728D128A1288F1F5200000000276027580000000000000000 +0AE10AE60AE20ADE00000D2B0D2B0AE50000000000000000000000000000000013F900000000000013F613FC13F313F0 +0000000000000000147D000014300000141F141A13FF145114621446140B14391475147202F4147814041401146E146A +141C1417140F14070000142A14271421143B14361433142D000014480000144314530000144E144B145F145C00001456 +1424147A14671464140A1459143E141218C918C918C318C318CB18CB18C918C918CF18CF18CB18CB18C718C718CF18CF +18CD18CD18C718C718C518C518CD18CD18E718E718C518C518E918E918E718E718D318D318E918E918D118D118D318D3 +18D518D518D118D118D718D718D518D518DD18DD18D718D718DF18DF18DB18DB18E318E318D918D918EB18EB18E118E1 +18EF18EF18EB18EB18F318F318EF18EF18F118F118F318F318F518F518F118F118F718F718F718F718FB18FB19181918 +18F918F918FB18FB163C163C18F918F90000000019151915000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000018ED00000000000018AE18ED18ED18ED +18B218AA18AA18AE190D190D190618B2190B190B1900190018B618B618B618B61878187814C014C0189C189C18B818B8 +18A818A818AC18AC18B418B418B018B018A018A018A018B4190F190F190F190F18A018901880187C14A914A2149F18A4 +14C914C214BF14B6151514F814E314D8152F1526151D151814DC14CD1537153214E7157F157C14E015C515B715B015A5 +1650164D163E160D167316701665165B16B21620168F168A16F016ED16EA16B51706170116FE16F71724171F171C170D +1730172D172A172717551741173E173316241637177317641504150014FC178B17D8150C150815D11814180317FA17EB +182A181F181C18171855184E1847182D158F1872186F185E0064005D18421599008000790072006B18941890188C1888 +14B3148618A418A014C214BF14B914B6150F14F814F514F215231520151815151532152F15291526171F171C170116FE +173E173317301724178B162416371741180017FD15D1179018171814180E1803185E185B18581842187C1872186F1869 +189818901884188014B614A914A2149F14E314D814C914BC15371526151214F8157C14E014DC14CD15B715B015A514E7 +163E1618160D15C51665165B1650164D1620168F168A167016ED16EA16B516B2170D170616F716F01730172D172A1727 +1773176417551733150014FC148B163717EB17D815D11504181C1811180317FA184E18471830181F18901698185E1855 +14F814BC14B6189815C5152C152615121730160215F715D4181118031637173316D716D01698185E16AA1685168216DE +15D716C716C416AD153B1608160515DA14EB14D514D114A616681648164514AD15F115E615DF166B161B15C215F415F7 +16AA16851682166215D716C716C416AD153B1608160515DA14EB14D514D114A616681648164514AD15F115E615DF166B +161B15C215F415F715F115E615DF16621673160215D415F715DF15B715B015A5168A167315F115E600000000148E148E +000000000000000000000000000000000000000000000000000000000000000014DF14DB14DB14CC150314FF14FB14E6 +156C1570154E154E15CC15AC15A815B315D015D015C815CC15E916411610161015FA15FA15E215E9165E165315FE15FE +167A16761676165E169E169E1692167E16BC16C016B816A21714171016F316F31758176B176F1767177D177617761758 +17B617AD17A9177D17C117BD179E17961822179A0000000017DF17F217EE18261806180A17E317DF14D414AC18611861 +150B14EA14EE14D01552153A15561507165715ED161415BA184A18511781176017F6171817CC1865173A16A617671710 +1736175C17C517DB1565153E17DB175C173614A516FA17A217E715BE1641169200000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000148414891709163A16961594161E17B11542162716231635000000000000159C +000000000000000000000000000000000000000000000000000000000000000005401BE21BE002F61C260093008D0546 +0000000002FF1C2800000000000000000000000000000000000000000000000000000000000000000000000000000000 +09961B181B1A02FC0E3E00A500A109961BF41BFE1BFA0E421BE41BEA1BE81BF61BF01BEE1BEC1BE6098E000000001BF2 +000C000C000C0992099609960996000C000002FA1BE002F6008D0093054005460E3E00A500A11B1A00971BFE1BFA0E42 +02F802F402F2009D00000544055905480566009B0099099000000000000000000000005A16CA005716CD006800000061 +16DB007616D4006F16E5008416E2007D14941491149114801497183A183A14941875187518751497149D148214821875 +14C5149D149D149D14C714C714C714C5151B151B151B14C714A014A014A0151B14A314A314A314A014AA14AA14AA14A3 +158D158B158B14AA14B414871487158D15A315A315A314B415DD15DD15DD15A3160B160B160B15DD164B164B164B160B +166E166E166E164B168816881688166E168D168D168D168816B016B016B0168D16E816E816E816B017041704170416E8 +1722172217221704159715971597172214B714B714B7159714BA14BA14BA14B7148C148C148C14BA14C018331833148C +14A714A714A714C0174D1749174914A7174617511751174D000000000000174600970095008D0000009F009D009B0099 +02F402F200A500A1030302FA02F802F6030F03430314030503920383037403650546054003B003A10093055905440548 +05E305D5056805660687067E062905E6071A060706CF06AC07A70781072307340861076D083E06AF077306B2056B0890 +098E060A095D0682099609940992099009A3093A0692099806020ADC0A800A310B7C073E0AE30B10078A0B3E05D30A2B +08430A1405D80CD60DE4086D0A270BA60E3E061106950B441BD50E440E420E401BEE1BEC1BE21BD71C851F041F0B1BE0 +1CC71CB71CAC1C9E1D9D1EC61EBE1EB11CAE1CA01C871CC51CF01CD31CC91CB91D5C1D481D3F1D221D891D7C1CCD1D6C +1DA41D9F1CAA1D8E1DC01DBE1D551C8D1DE81DCA1DBC1D3D1CE01E4E1E231E041EAF1E9E1CD11E8B1ECA1EC81EC01EB3 +1D0C1EE31C9C1CE4008B00881CB51EF11ABB19F419EF1A7F19FB1ABF1ABD19F61AC31AC11A021A001ACB1AC91AC71AC5 +1A111A0C1A071A511A1A1A181A131A5B1A391A2E1A2C1A2200001A481A431A3E1A8319F2000000001A8B1A891A871A85 +1A8F1A8D000000001A971A951A931A371A201A99000000001AA31AA11A9F1A9D1A2A1AA5000000000000000000001AA9 +00090E4E0E480E4600001B2F0E4A0E4C1B381B361B311BCF00001BD31BD11B3D00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000277A00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000277D +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0E630F350F3300000F1C00000E950F0E0E9B0F1E0F2027760EA70E9F1B140E9D0EAB0EAF0EB30F280EB90F120E740F10 +0EC30F2C0F2A0EEF28130EC7277028110ED70E6D28150EFD28170EDF05D80ED90F260EE70EE50EE30EF10F2427780F22 +0F180EFF00001BDC0E870E850F0C0F1A0000281B28190E89000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000002780000000000000000000002783 +000000000000000000000000000000002786000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000278C278900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +278F00000000000000000000000027920000000000000000000000000000000000000000000000000000000000000000 +2795000000000000000000002798000000000000000000000000279B0000000000000000279E00000000000000000000 +00000000000000000000000000000000000000000000000027A1000027A4000000000000000027A70000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000027AD000000000000000027B0000027AA +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +27B627B30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000027B9000000000000000027C027CD27BC000027D027BF27C427D1 +00000000000027C300000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000027DA27D727DB000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000005D5056800000000067E062905E605E3060706CF06AC0687078107230734071A076D083E06AF07A7 +06B2056B08900861060A095D06820773030F03430314030503920383037403650000000003B003A10000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000027E427E10000000027F327EF27EB27E700000000000027F700000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000027FB0000000000002802280927FE2806 +000000000000280D00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000005E605E305D5056806AC0687067E06290734071A060706CF06AF07A707810723 +08900861076D083E0682077306B2056B093A0692060A095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C +0A1405D80CD6078A086D0A270BA60843061106950B440DE405E605E305D5056806AC0687067E06290734071A060706CF +06AF07A70781072308900861076D083E0682077306B2056B093A0692060A095D0ADC0A800A3109A3073E0AE300000602 +0B3E05D30A2B0B7C0A1405D80CD6078A086D0A270BA60843061106950B440DE405E605E305D5056806AC0687067E0629 +0734071A060706CF06AF07A70781072308900861076D083E0682077306B2056B093A0692060A095D0ADC0A800A3109A3 +073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A086D0A270BA60843061106950B440DE405E605E300000568 +00000687000000000000071A0607000006AF07A707810000089008610000083E0682077306B2056B093A0692060A095D +0ADC00000A3109A3073E0AE30B1000000B3E05D30A2B0B7C0A1405D80CD60000086D0A270BA60843061106950B440DE4 +05E605E305D5056806AC0687067E06290734071A060706CF06AF07A70781072308900861076D083E0682077306B2056B +093A0692060A095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A086D0A270BA60843 +061106950B440DE405E6000005D5056800000687067E06290734071A0607000006AF07A707810723089008610000083E +0682077306B2056B093A06920000095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A +086D0A270BA60843061106950B440DE405E6000005D5056800000687067E06290734071A060706CF000007A700000723 +08900861000000000682077306B2056B093A06920000095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C +0A1405D80CD6078A086D0A270BA60843061106950B440DE405E605E305D5056806AC0687067E06290734071A060706CF +06AF07A70781072308900861076D083E0682077306B2056B093A0692060A095D0ADC0A800A3109A3073E0AE30B100602 +0B3E05D30A2B0B7C0A1405D80CD6078A086D0A270BA60843061106950B440DE406AF07A70781072308900861076D083E +0682077306B2056B093A0692060A095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A +093A0692060A095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A086D0A270BA60843 +061106950B440DE405E605E305D5056806AC0687067E06290734071A060706CF06AF07A70781072308900861076D083E +0682077306B2056B093A0692060A095D0ADC0A800A3109A3073E0AE30B1006020B3E05D30A2B0B7C0A1405D80CD6078A +086D0A270BA60843061106950B440DE405E605E305D5056806AC0687067E06290734071A060706CF06AF07A707810723 +061106950B440DE4000000000E8D0E760F990F970F950F40100A0FBB0FB90F9B103F103D103B100C1063104510431041 +106C106A100A106510921090108E106E114710E31B50077F116B114D114B1149120B11CD11CB116D122B1229120F120D +1255124D124B122D1299125B125912571B4B129F129D129B1299120B11CB114D0F950F40124B124D0FB90F9B0F990F97 +103B100C100A0FBB10431041103F103D100A106510631045108E106E106C106A1B50077F10921090114B1149114710E3 +11CB116D116B114D120F120D120B11CD124B122D122B1229125912571255124D129D129B1299125B11CB114D1B4B129F +124B124D1299120B0F990F970F950F40100A0FBB0FB90F9B103F103D103B100C1063104510431041106C106A100A1065 +10921090108E106E114710E31B50077F116B114D114B1149120B11CD11CB116D122B1229120F120D1255124D124B122D +1299125B125912571B4B129F129D129B1299120B11CB114D0F950F40124B124D0FB90F9B0F990F97103B100C100A0FBB +10431041103F103D100A106510631045108E106E106C106A1B50077F10921090114B1149114710E311CB116D116B114D +120F120D120B11CD124B122D122B1229125912571255124D129D129B1299125B11CB114D1B4B129F124B124D1299120B +0F990F970F950F40100A0FBB0FB90F9B103F103D103B100C1063104510431041106C106A100A106510921090108E106E +114710E31B50077F116B114D114B1149120B11CD11CB116D122B1229120F120D1255124D124B122D1299125B12591257 +1B4B129F129D129B1299120B11CB114D12FF12FD124B124D031403050000000003740365030F034303B003A103920383 +030F03430314030503920383037403650314030503B003A103740365030F034303B003A103920383030F034303140305 +03920383037403650314030503B003A103740365030F034303B003A10392038300000000000000000000000000000000 +0000000000000000000000000000000013521350134E1346136C13641359135713861384137F137113931391138F138A +13A713A51397139513B413B013AB13A913E0276A13C013BB13D713E813C913C41350134E134613DB1364135913571352 +1384137F1371136C13971393138F138A13AB13A913A713A513D313B413B213B013D513CB13C213C40000000013D92768 +0000000000000000000000000000000000000000000000000000000000000000158B14A0149D148214A314B418330000 +1597172214A7166E168D15A314BA14B714871704160B16E814AA151B14C715DD16B01688164B158D18C118E518F518BF +000014A0149D000014A300000000148C1597172214A70000168D15A314BA14B700001704160B16E814AA151B14C715DD +16B00000164B00000000000000000000000014A00000000014A30000000000001597000014A70000168D15A314BA0000 +00001704160B000014AA0000000015DD16B00000164B000018C1000018F50000000014A0149D000014A300000000148C +0000172214A7166E168D15A314BA14B700001704160B16E814AA151B14C715DD16B01688164B0000000018E5000018BF +158B14A0149D148214A314B41833148C1597000014A7166E168D15A314BA14B714871704160B16E814AA151B14C715DD +16B01688164B158D0000000000000000158B14A0149D000014A314B4183300001597000014A7166E168D15A314BA14B7 +14871704160B16E814AA151B14C715DD16B01688164B158D000000000000000003F103160307030A04FA04DE04AB0468 +000005310520050B0000000000000000010A0106010200FE011A01160112010E012A01260122011E013A01360132012E +014A01460142013E015A01560152014E05E31BFC0162015E0000093605E5076D05E605E305D5056806AC0687067E0629 +0734071A060706CF06AF07A70781072308900861076D083E0682077306B2056B076F06B1060A095D0933082A08690863 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0761075E00000000000000000000076C0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000006060000000000000000 +0000000000000000000000000000000000001D5C1D4D1C72000000000000000000000000000000000000000000000000 +1DA620A521622249213E25E421331FC6229923A422B01FCC229D201B21F7204F2612240E24D82045224F237E20C12125 +26521F9E1F982265225F20B31FAC21AC24A22484224B2626032922CD236E20B7266E20E7205124180000000000000000 +1C0C1C041C001C181C081C201C101C1C0000000000001C1400000000000000000000000020AF21F90000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +030F03430314030503920383037403650000000003B003A10000000000000000281D1FBA1FB21FB61FED1FE91FE71FDF +1FF51FF91FF31FF12005200328251F121F14281F2015200720232823201B200B202D202B1FD420271F18203F203B28E1 +20532051204D204B20672061205F1F1A20752071206F206D2093208B20872085209920992099209720A720A32396282B +20B520B120AD282D20C720C520BF20C920D520D120CF20CB20DF20DB20DB20D920FD20EB20E520E320F520F120FF20EF +2109210721232041210D210F2105210B21292127282F2119214821372133212D2150214E283328311F1C2156214C2152 +215E215E215A1F1E2170216E216C2835217A21782837217421841F20217E21E9283B21902192218C219A219C283D2196 +1F2221A821A6219E21B821B621B421B021C91F26283F1F2428F521D121CD21CB25382843284321DD28511F2821E521E5 +1F2A21F121ED28A522092205220321FB22131F2C1F2E22112221221F22152845222B22292221222322352231222F2233 +224121BD22392237226322592251224D2267225B2261284B2279284D2275226B227D1F30226F22731F32227F22852281 +22A7284F2291228D22BB1F3822B522C7201F201D1F341F361F6A252222BD22C922DD22D322D122CF22E71F3A285922D9 +285D22F822F422E11F3C22FE22EB22FA230A23042302230023141F3E230E285F231C1F40231628612863232A23282322 +2867233A28652839234A233C2344234023562354235A235223502869235E235C23761F42236C236A23842366286B2374 +23902386286F286D23921F44238C238E2821239E2398239A287523AC287123A6287723C623BC23B6287B287923D223D0 +23EA1F4623E823E023F823F61F481F481F4A240423FE23FC287F241E287D24102881242C284124241F4E1F4C28852883 +288B288728892448244E244E244C288D1F5424541F5224522462245E28911F56247A28931F5824682496248A28972895 +249E249C249A1F5A24AA289B289B289924B624B4289D1F5C1F6024C4289F1F5E28A324D024C824CC24E624E21F6224DC +28A928A71F6424EE28AD24FA28AB1F6628AF250A25062500251828B3251428B1252625241F68285328B5215825281F6C +25382857285528B725501F6E2646253A2554205B2552254E28B9255C25582556256A2568255E255A25802576256C2560 +25742572257025661F7028BD28BF28BB28C7258A258625841F741F7228C1258C259C1F7628C528C325A825A225A0259E +25B225AA25AC25A61F7825B425B025AE25C21F7A25BA25B825CC25CA28C925C428CB1F1625D21F7C25E81F801F7E28CD +28CF260A260225F42628262226162614262C262E282728D3263E2638282926322664265E28D728D52680266A28D92668 +268E2684268826861F82269628DB269026B61F8428DD269A28E328DF26C221A028E526D61F881F8626E226E228E71F8A +1F8C26F228E926E627082704270026FA2720271228EB1F8E27281F921F90272628F128EF1F9428ED27441F96273A28F3 +2752274E274A27480000000028F727560000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//13440 bytes +enum canonMappingTrieEntries = TrieEntry!(ushort, 8, 8, 5)(x" +000000000000000000000000000000200000000000000260", +x" +0000000000000100000000000000090000000000000010C0", +x" +030202020202010002060202050202040702020202020202000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000200010000000000060005000400030009000800070000 +00000000000B000A0000000000000000000D000C0000000000000010000F000E00140013001200110016001500000000 +000000000000000000000000000000000000000000170000000000180000000000000000000000000000000000000000 +000000000000000000000000000000000000001A001900000000001B000000000000001D001C00000000000000000000 +0000001E00000000000000200000001F0000002100000000000000220000000000000023000000000000002400000000 +000000000000000000000000000000000026002500000000000000000028002700000000002900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002C002B002A000000000000000000000000000000000000000000000000 +000000000000000000000000000000000030002F002E002D00340033003200310038003700360035003C003B003A0039 +000000000000003D000000000000000000000000003E0000000000410040003F00450044004300420048000000470046 +000000000049000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000004A0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000004C004B000000000050004F004E004D00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000540053005200510058005700560055 +005C005B005A00590000005F005E005D0000006200610060000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000064006300000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000066006500000000006700000000000000000000 +0000000000000000000000000000000000000068000000000000006A00000069000000000000000000000000006B0000 +000000000000000000000000006C00000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000006D0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000006E000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +006F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007100700000000000000073007200000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0077007600750074007B007A00790078007F007E007D007C008300820081008000000000000000840000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000250012000F000C00850000004F0045 +00CB00A400A1009E013301240121011E01A0019D01880000000001DA01B601A302730270026D00000000000002F30287 +033803250322031F039800000362035803DE03B703B403B10446043A0437043404B404B1049C0000000004EE04CA04B7 +058A058705840000061C0000060D059E033E002B033B0028038C00790380006D0392007F038F007C03A2008F03950082 +03CD00BA0000000003DB00C803D800C503E400D103FB00E8041000FD040A00F7041901060413010000000000041C0109 +0440012A043D0127045C01490443012D00000000000001300471015D0462014F01700477016300000000047A01660484 +0185000000000000018E04A80194049900000000000004A204E401D004D901C50000000004F801E405450231052F021B +054B023705350221056902550552023E057B026405580244000000000572025B0594027D058D027605B4029D059B0284 +05E002C905B702A0061002F605F502DE03110628030B0302000006310314062E00000000050401F00000000000000000 +000000000000000002AC00000000000000000000000005C3000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000013D03690056000002A304FB01E70450028E05A9029205BA +028A05AD029605A5035B0048000005A10653064A0354004104160103000000000522020E046B0157065F065C05250211 +000000000000046500000000040700F403650052049601820656064D06500647036F005C036C005903EA00D703E700D4 +0456014304530140050101ED04FE01EA053B02270538022405C002A905BD02A605780261056602520425011200000000 +00000000000000000351003E0000000004F101DD03F400E104E701D304D101BD061602FC04EA01D60000000000000000 +00000000000000000000000000000000066B00000010000D000000000000013700000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000066200000000000000000000000100000000 +000000000000000006450670063D00000000072C06DF06C3079807780000075900000000000008D10000000000000000 +0000000000000000000000000000000000000000000000000000000000000000078107350000000008C10867084707E9 +000000000000092F00000000000000000000000000000000000000000000000000000000000000000000000000000000 +092808CA000000000000095F091F08FD09B400000000000000000000000009B700000000000000000000000000000000 +09C3000009CC09C609BA0000000000000000000000000000000009ED09D809E400000000000000000000000000000000 +0000000009DE000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000A200000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000A0500000A0E0A080A41000000000000000000000000000000000A2F0A1A0A26 +000000000000000000000000000000000000000000000000000000000000000000000000000000000A470A4400000000 +0000000000000000000000000000000000000A1109CF0000000000000000000000000000000000000000000000000000 +0A0209C009FF09BD0A0B09C9000000000A4D0A4A000000000A1709D50A1409D20A1D09DB000000000A2909E70A2309E1 +0A530A50000000000A2C09EA0A3E09FC0A3509F30A3209F0000000000A3809F6000000000A3B09F90000000000000000 +0AC10ABE0000000000000ACA0AC40AC70000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000ACD00000AD3000000000000000000000000000000000000000000000000 +0AD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000AE800000000000000000000000000000AF100000000000000000AF400000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0ADF0ADC0AD90AD60AEE0AEB0AE50AE2000000000000000000000000000000000B000000000000000000000000000B03 +0000000000000000000000000000000000000000000000000AFD00000AFA0AF700000000000000000000000000000000 +000000000000000000000000000000000B1200000000000000000B150000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0B0C0B090B06000000000B0F00000000000000000000000000000000000000000B1E000000000B210000000000000B24 +000000000000000000000000000000000000000000000000000000000B1B0B1800000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000B2700000000000000000000000000000000 +000000000000000000000000000000000B300B2A000000000000000000000B2D00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000B330000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000B360B40000000000000 +0B3C0B3900000B4300000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000B4C0B46000000000000000000000B4900000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000B4F0000000000000B590B550B520B5F0000000000000000000000000000 +0000000000000000000000000B62000000000B65000000000B6800000000000000000000000000000000000000000B6B +00000000000000000000000000000000000000000B5C000000000000000000000B6E00000000000000000B890B710000 +0000000000000B8C0000000000000000000000000B740000000000000000000000000000000000000000000000000000 +0B7A00000000000000000000000000000000000000000000000000000B7D000000000B80000000000B83000000000000 +00000000000000000000000000000B8600000000000000000000000000000000000000000B7700000000000000000000 +000000000000000000000B8F000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000B920000000000000B9800000B9500000B9E00000B9B +00000BA10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000BA4000000000000000000000BA70000 +0BB000000BAD0BAA00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000003830070037D006A0389007603860073039F008C039B008803AE009B03A50092 +03AB009803A8009503D400C103D000BD040100EE03FE00EB040400F103F700E4041F010C040D00FA0422010F04280115 +042E011B042B011804490136045F014C046E015A04680154047D016904740160048A01760480016C048D017904870173 +0493017F0490017C04A50191049F018B04AB019704AE019A04D501C104CD01B904E001CC04DC01C8052C021805290215 +053E022A0532021E054802340541022D055F024B05550241055B0247054E023A056C02580562024E0581026A0575025E +05DD02C6057E026705E302CC05E602CF059702800590027905EC02D505E902D205F202DB05EF02D805F802E105FB02E4 +060402EA060102E7061902FF060702ED06340317062B030E056F04310637031A06590000062205FE0000000000000000 +035F004C0372005F03280015032C00190330001D033400210345003203750062034D003A0341002E0379006603490036 +03E100CE03ED00DA03BE00AB03CA00B703C600B303BA00A703F000DD03C200AF04590146044D013A04F501E1051B0207 +04BA01A604BE01AA04C201AE04C601B2050B01F7051E020A051301FF050701F305170203050F01FB05B1029A05DA02C3 +05C602AF05CA02B305CE02B705D202BB060A02F005D602BF061F03050625030800000000061302F90000000000000000 +081B07F9081807F6082D080B08240802069E067C069B067906B0068E06A706850858084D0855084A00000000085C0851 +06D406C906D106C60000000006D806CD089308710890086E08A50883089C087A070706E5070406E2071906F7071006EE +08EB08DC08E808D908F308E408EF08E0074A073B0747073807520743074E073F090E0903090B09000000000009120907 +076A075F0767075C00000000076E07630949093A0946093709510942094D093E0787000007840000078F0000078B0000 +098B096909880966099D097B0994097207C0079E07BD079B07D207B007C907A70847084407E907E208C108BE08670860 +091F091C08FD08FA00000000095F0958081F07FD083608140831080F0828080606A2068006B9069706B4069206AB0689 +0897087508AE088C08A9088708A0087E070B06E907220700071D06FB071406F2098F096D09A6098409A1097F09980976 +07C407A207DB07B907D607B407CD07AB084107E507F007F3083D083A000007EC0670066D06730676000008BC000006BD +08B908630640000008B508B20000086A06DF06DC06C306C00BB90BB60BB3072608D108CD08C408C708D508F700000000 +072C0729072F07320BC20BBF0BBC0000092F092B09220925093309550919091607780775077B077E031D063D063A0772 +09B1095B0000000009AD09AA00000962079807950759075600000000064307DF000000000BC70BC50000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000079300000000004F015200000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000BCC0BC900000000000000000000000000000000000000000000000000000000 +000000000000000000000BCF000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000BD50BD80BD2000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000BDB000000000BDE00000000000000000BE1 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE700000BE4 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000BEA00000BF0000000000BED000000000BF30000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000BF90000000600000000000000000000000000000000000900030BF60000 +000000000BFF0BFC000000000C050C02000000000C0B0C080000000000000000000000000C110C0E000000000C1D0C1A +000000000C230C2000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000C350C320C2F0C2C00000000000000000000000000000000 +000000000000000000000000000000000C290C260C170C1400000000000000000C3B0C3800000000000000000C410C3E +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000C490C47000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000C4400000000000000000000000000000000000000000000000000000C5100000C4E +00000C5700000C5400000C5D00000C5A00000C6300000C6000000C6900000C6600000C6F00000C6C0C7500000C720000 +000000000C78000000000000000000000C8100000C7E0C7B0C8A0C8700000C8400000C900C8D0000000000000C960C93 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4B +000000000000000000000C990000000000000000000000000000000000000000000000000000000000000CA200000C9F +00000CA800000CA500000CAE00000CAB00000CB400000CB100000CBA00000CB700000CC000000CBD0CC600000CC30000 +000000000CC9000000000000000000000CD200000CCF0CCC0CDB0CD800000CD500000CE10CDE0000000000000CE70CE4 +000000000000000000000000000000000000000000000000000000000000000000000000000000000CEA000000000C9C +00000CF30CF00CED00000CF600000000124B125D0FB7124113270E290D8310430E4F12930E991327116710CD0F550E97 +1279121511FD11E3109D106910190FEB0D8D12F3128911C711E110790FF50E1D11D910510EDB1309120311890F65121D +108D10250FBD0EFF0E050DD90D9D127D10D310770FF10F95125911E711DD117110E9130712FB12CF12A111B9114D1107 +0F0B0E87122F130B10ED1083117D112F0ECB0E8512CB124911471047102F0FED117F0E0312B11159114F11150DDD0DDF +0F67123D12B511C50EBB0D8712350FEB0E1110C110950F270D7F0F1B0DA510F10E2311450F9D1011122711C910D70E7D +0F6F100D126D10050D9110BF0F7B11A5113D0FDB0DDB0DC30E091291122D11950FA10F070E9F0E3712F712AB10F31053 +0FB50DF91313130D0F490EF312690FFD106D104B0F910F5711791153111110AF12A3127111CD126110670E410DFB0DE9 +0F230EFD1227120B1091112D10030F770EE50EBB0E670D97116B10A9109B0F2912D112C912951175128D110F0D9F12DD +0DB10D8F0F3512C10FEB0F9F0EC70EBD127711D310CB10730DF712AF0FAD1323103B10210FD10FCB114310E710BD10A1 +12B70F5D0DC512E3126310310ED70DA910950FD50F390F170ECF0E310DEB12BB10150FE10FC30FA7120D116310C3109F +0E1312C5128F121310B110750E33103D130F12FF12BD11DB1121118B102D0FCF1063108B113311250DED11AD0D93123B +11390F690EF50DE712670FB3101B0EB50F03122112B31205000000000E590DB500000FAB00000E7B10CF108F0DE10000 +110D1105110310F50000116D113512D300001233000011DF000012831273000012E912E70000000012BF127F130512EB +0E010DB90DB30DA10E5F0E530E170E070ECD0E7F0E790E630F470F430F2F0ED10FAF0FA30F970F531049103510270FDD +10EB10A3107D106F10FD10F910FB10F7110B1109110110FF11531127111D111711731161115B115711CB11971197118D +12391237122312191273126F124F124D0F2B12E112D912C700000000119314160D9B0DC10DD70D810E0B0DFF0DC90DB7 +0E5D0E510E490E530E9B0E950E830E7B0F050F010EB10EA90F3F0F330F1D0F130F530F410F470F370F890F850F7F0F5F +0FBF0FBD0FAB0F99102110050FFF0FC710571049104110451089107F10E3106F10B910B510AB108F10D110CF10C910C7 +10EF10DD10DF10D5114911311127111F11AF1173115F1153121F121B11F911C3122B1233122912231239123112351237 +12751265124F123F12C712B91299128B12DB12D912D512D313EC132712F912E10D370D2313FE13EA1474144414320D39 +000000001325132100000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000ABB00000A7A000000000000000000000000000000000000 +0AB50AB2000000000A590A560AAE0AAA0A680A650A5F0A5C00000A740A710A6B0A830A800A7D0A7700000A8C00000A89 +0A9500000A920A8F0AA10A9E00000A980A6E0AB80AA70AA400000A9B0A860A6200000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000132900000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132C +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000132F0000000000000000000013320000000000000000000000000000000013350000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000133B1338000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000133E000000000000000000000000134100000000000000000000000000000000 +000000000000000000000000000000001344000000000000000000001347000000000000000000000000134A00000000 +00000000134D000000000000000000000000000000000000000000000000000000000000000000001350000013530000 +000000000000135600000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +135C0000000000000000135F000013590000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001365136200000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000013680000000000000000 +136F137C136B0000137F136E137313800000000000001372000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000013891386138A0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000001393139000000000 +13A2139E139A139600000000000013A60000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000013AA00000000000013B113B813AD13B500000000000013BC0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +13C00D8B0D850D890DA70DA30DA10D990DAF0DB30DAD0DAB0DBB0DB913C80CF90CFB13C20DC70DBD0DD113C60DCB0DBF +0DD70DD50D950DD30CFF0DE50DE314840DF50DF30DF10DEF0E070E010DFF0D010E110E0F0E0D0E0B0E1B0E190E170E15 +0E210E210E210E1F0E270E25105D13CE0E2F0E2D0E2B13D00E3B0E390E350E3D0E470E450E430E3F0E510E4D0E4D0E4B +0E690E5B0E570E550E650E610E6B0E5F0E710E6F0E890DE70E750E770E6D0E730E8D0E8B13D20E810E9D0E930E910E8F +0EA50EA313D613D40D030EAB0EA10EA70EB30EB30EAF0D050EBB0EB90EB713D80EC30EC113DA0EBF0EC90D070EC50F0F +13DE0ED30ED50ED10EDD0EDF13E00ED90D090EE90EE70EE10EF10EEF0EED0EEB0EF70D0D13E20D0B14980EFF0EFB0EF9 +118F13E613E60F0913F40D0F0F0D0F0D0D110F150F1114480F250F210F1F0F190F2F0D130D150F2D0F3D0F3B0F3113E8 +0F470F450F3D0F3F0F510F4D0F4B0F4F0F5B0F590F550F530F730F6B0F630F610F750F6D0F7113EE0F8713F00F830F79 +0F8B0D170F7D0F810D190F8D0F930F8F0FA513F20F9B0F970FAF0D1F0FA90FB90DCF0DCD0D1B0D1D0D5111810FB10FBB +0FC90FC10FBF0FBD0FD30D2113FC0FC514000FDD0FD90FCD0D230FE30FD70FDF0FEF0FE90FE70FE50FF70D250FF31402 +0FFB0D270FF914041406100710051001140A1009140813DC1017100B1013100F102310211027101F101D140C102B1029 +10410D2910391037104D1033140E103F1059104F14121410105B0D2B1055105713C41065105F1061141810711414106B +141A1081107F107B141E141C1087108510990D2D1097109310A710A50D2F0D2F0D3110B310AD10AB142210BB142010B7 +142410C513E410C10D350D3314281426142E142A142C10D510DB10DB10D914300D3B10E10D3910DF10E910E514340D3D +10FF14360D3F10EF1113110D143A1438111B111911170D411123143E143E143C112B112914400D430D47113714420D45 +14461141113B113F115511510D49114B144C144A0D4B115D14501165144E0D4D14521173116F1169117B145611771454 +118511830D4F13F614580EAD11870D53118F13FA13F8145A119B0D55126B1191119F0DFD119D1199145C11A711A311A1 +11B511B311A911A511CB11C111B711AB11BF11BD11BB11B10D5714601462145E146A11D511D111CF0D5B0D59146411D7 +11E50D5D1468146611EF11EB11E911E711F911F111F311ED0D5F11FB11F711F512070D61120111FF1211120F146C1209 +146E0CFD12170D6312250D670D65147014721243123F123112531251124712451255125713CA14761265125F13CC125B +1281127B147A147812971287147C128512A5129B129F129D0D6912A9147E12A712C30D6B148012AD1486148212CD0EE3 +148812D70D6F0D6D12DB12DB148A0D710D7312E5148C12DF12F512F112EF12ED12FD12F9148E0D7513030D790D771301 +149414920D7B149013150D7D13111496131D131B1319131700000000149A131F00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +dstring decompCanonTable() nothrow @nogc pure @safe { +static immutable dchar[5276] t = +"\u0000\u003B\u0000\u003C\u0338\u0000\u003D\u0338\u0000\u003E\u0338\u0000\u0041\u0300\u0000\u0041\u0301\u0000\u0041"d~ +"\u0302\u0000\u0041\u0302\u0300\u0000\u0041\u0302\u0301\u0000\u0041\u0302\u0303\u0000\u0041\u0302\u0309\u0000\u0041"d~ +"\u0303\u0000\u0041\u0304\u0000\u0041\u0306\u0000\u0041\u0306\u0300\u0000\u0041\u0306\u0301\u0000\u0041\u0306\u0303"d~ +"\u0000\u0041\u0306\u0309\u0000\u0041\u0307\u0000\u0041\u0307\u0304\u0000\u0041\u0308\u0000\u0041\u0308\u0304\u0000"d~ +"\u0041\u0309\u0000\u0041\u030A\u0000\u0041\u030A\u0301\u0000\u0041\u030C\u0000\u0041\u030F\u0000\u0041\u0311\u0000"d~ +"\u0041\u0323\u0000\u0041\u0323\u0302\u0000\u0041\u0323\u0306\u0000\u0041\u0325\u0000\u0041\u0328\u0000\u0042\u0307"d~ +"\u0000\u0042\u0323\u0000\u0042\u0331\u0000\u0043\u0301\u0000\u0043\u0302\u0000\u0043\u0307\u0000\u0043\u030C\u0000"d~ +"\u0043\u0327\u0000\u0043\u0327\u0301\u0000\u0044\u0307\u0000\u0044\u030C\u0000\u0044\u0323\u0000\u0044\u0327\u0000"d~ +"\u0044\u032D\u0000\u0044\u0331\u0000\u0045\u0300\u0000\u0045\u0301\u0000\u0045\u0302\u0000\u0045\u0302\u0300\u0000"d~ +"\u0045\u0302\u0301\u0000\u0045\u0302\u0303\u0000\u0045\u0302\u0309\u0000\u0045\u0303\u0000\u0045\u0304\u0000\u0045"d~ +"\u0304\u0300\u0000\u0045\u0304\u0301\u0000\u0045\u0306\u0000\u0045\u0307\u0000\u0045\u0308\u0000\u0045\u0309\u0000"d~ +"\u0045\u030C\u0000\u0045\u030F\u0000\u0045\u0311\u0000\u0045\u0323\u0000\u0045\u0323\u0302\u0000\u0045\u0327\u0000"d~ +"\u0045\u0327\u0306\u0000\u0045\u0328\u0000\u0045\u032D\u0000\u0045\u0330\u0000\u0046\u0307\u0000\u0047\u0301\u0000"d~ +"\u0047\u0302\u0000\u0047\u0304\u0000\u0047\u0306\u0000\u0047\u0307\u0000\u0047\u030C\u0000\u0047\u0327\u0000\u0048"d~ +"\u0302\u0000\u0048\u0307\u0000\u0048\u0308\u0000\u0048\u030C\u0000\u0048\u0323\u0000\u0048\u0327\u0000\u0048\u032E"d~ +"\u0000\u0049\u0300\u0000\u0049\u0301\u0000\u0049\u0302\u0000\u0049\u0303\u0000\u0049\u0304\u0000\u0049\u0306\u0000"d~ +"\u0049\u0307\u0000\u0049\u0308\u0000\u0049\u0308\u0301\u0000\u0049\u0309\u0000\u0049\u030C\u0000\u0049\u030F\u0000"d~ +"\u0049\u0311\u0000\u0049\u0323\u0000\u0049\u0328\u0000\u0049\u0330\u0000\u004A\u0302\u0000\u004B\u0000\u004B\u0301"d~ +"\u0000\u004B\u030C\u0000\u004B\u0323\u0000\u004B\u0327\u0000\u004B\u0331\u0000\u004C\u0301\u0000\u004C\u030C\u0000"d~ +"\u004C\u0323\u0000\u004C\u0323\u0304\u0000\u004C\u0327\u0000\u004C\u032D\u0000\u004C\u0331\u0000\u004D\u0301\u0000"d~ +"\u004D\u0307\u0000\u004D\u0323\u0000\u004E\u0300\u0000\u004E\u0301\u0000\u004E\u0303\u0000\u004E\u0307\u0000\u004E"d~ +"\u030C\u0000\u004E\u0323\u0000\u004E\u0327\u0000\u004E\u032D\u0000\u004E\u0331\u0000\u004F\u0300\u0000\u004F\u0301"d~ +"\u0000\u004F\u0302\u0000\u004F\u0302\u0300\u0000\u004F\u0302\u0301\u0000\u004F\u0302\u0303\u0000\u004F\u0302\u0309"d~ +"\u0000\u004F\u0303\u0000\u004F\u0303\u0301\u0000\u004F\u0303\u0304\u0000\u004F\u0303\u0308\u0000\u004F\u0304\u0000"d~ +"\u004F\u0304\u0300\u0000\u004F\u0304\u0301\u0000\u004F\u0306\u0000\u004F\u0307\u0000\u004F\u0307\u0304\u0000\u004F"d~ +"\u0308\u0000\u004F\u0308\u0304\u0000\u004F\u0309\u0000\u004F\u030B\u0000\u004F\u030C\u0000\u004F\u030F\u0000\u004F"d~ +"\u0311\u0000\u004F\u031B\u0000\u004F\u031B\u0300\u0000\u004F\u031B\u0301\u0000\u004F\u031B\u0303\u0000\u004F\u031B"d~ +"\u0309\u0000\u004F\u031B\u0323\u0000\u004F\u0323\u0000\u004F\u0323\u0302\u0000\u004F\u0328\u0000\u004F\u0328\u0304"d~ +"\u0000\u0050\u0301\u0000\u0050\u0307\u0000\u0052\u0301\u0000\u0052\u0307\u0000\u0052\u030C\u0000\u0052\u030F\u0000"d~ +"\u0052\u0311\u0000\u0052\u0323\u0000\u0052\u0323\u0304\u0000\u0052\u0327\u0000\u0052\u0331\u0000\u0053\u0301\u0000"d~ +"\u0053\u0301\u0307\u0000\u0053\u0302\u0000\u0053\u0307\u0000\u0053\u030C\u0000\u0053\u030C\u0307\u0000\u0053\u0323"d~ +"\u0000\u0053\u0323\u0307\u0000\u0053\u0326\u0000\u0053\u0327\u0000\u0054\u0307\u0000\u0054\u030C\u0000\u0054\u0323"d~ +"\u0000\u0054\u0326\u0000\u0054\u0327\u0000\u0054\u032D\u0000\u0054\u0331\u0000\u0055\u0300\u0000\u0055\u0301\u0000"d~ +"\u0055\u0302\u0000\u0055\u0303\u0000\u0055\u0303\u0301\u0000\u0055\u0304\u0000\u0055\u0304\u0308\u0000\u0055\u0306"d~ +"\u0000\u0055\u0308\u0000\u0055\u0308\u0300\u0000\u0055\u0308\u0301\u0000\u0055\u0308\u0304\u0000\u0055\u0308\u030C"d~ +"\u0000\u0055\u0309\u0000\u0055\u030A\u0000\u0055\u030B\u0000\u0055\u030C\u0000\u0055\u030F\u0000\u0055\u0311\u0000"d~ +"\u0055\u031B\u0000\u0055\u031B\u0300\u0000\u0055\u031B\u0301\u0000\u0055\u031B\u0303\u0000\u0055\u031B\u0309\u0000"d~ +"\u0055\u031B\u0323\u0000\u0055\u0323\u0000\u0055\u0324\u0000\u0055\u0328\u0000\u0055\u032D\u0000\u0055\u0330\u0000"d~ +"\u0056\u0303\u0000\u0056\u0323\u0000\u0057\u0300\u0000\u0057\u0301\u0000\u0057\u0302\u0000\u0057\u0307\u0000\u0057"d~ +"\u0308\u0000\u0057\u0323\u0000\u0058\u0307\u0000\u0058\u0308\u0000\u0059\u0300\u0000\u0059\u0301\u0000\u0059\u0302"d~ +"\u0000\u0059\u0303\u0000\u0059\u0304\u0000\u0059\u0307\u0000\u0059\u0308\u0000\u0059\u0309\u0000\u0059\u0323\u0000"d~ +"\u005A\u0301\u0000\u005A\u0302\u0000\u005A\u0307\u0000\u005A\u030C\u0000\u005A\u0323\u0000\u005A\u0331\u0000\u0060"d~ +"\u0000\u0061\u0300\u0000\u0061\u0301\u0000\u0061\u0302\u0000\u0061\u0302\u0300\u0000\u0061\u0302\u0301\u0000\u0061"d~ +"\u0302\u0303\u0000\u0061\u0302\u0309\u0000\u0061\u0303\u0000\u0061\u0304\u0000\u0061\u0306\u0000\u0061\u0306\u0300"d~ +"\u0000\u0061\u0306\u0301\u0000\u0061\u0306\u0303\u0000\u0061\u0306\u0309\u0000\u0061\u0307\u0000\u0061\u0307\u0304"d~ +"\u0000\u0061\u0308\u0000\u0061\u0308\u0304\u0000\u0061\u0309\u0000\u0061\u030A\u0000\u0061\u030A\u0301\u0000\u0061"d~ +"\u030C\u0000\u0061\u030F\u0000\u0061\u0311\u0000\u0061\u0323\u0000\u0061\u0323\u0302\u0000\u0061\u0323\u0306\u0000"d~ +"\u0061\u0325\u0000\u0061\u0328\u0000\u0062\u0307\u0000\u0062\u0323\u0000\u0062\u0331\u0000\u0063\u0301\u0000\u0063"d~ +"\u0302\u0000\u0063\u0307\u0000\u0063\u030C\u0000\u0063\u0327\u0000\u0063\u0327\u0301\u0000\u0064\u0307\u0000\u0064"d~ +"\u030C\u0000\u0064\u0323\u0000\u0064\u0327\u0000\u0064\u032D\u0000\u0064\u0331\u0000\u0065\u0300\u0000\u0065\u0301"d~ +"\u0000\u0065\u0302\u0000\u0065\u0302\u0300\u0000\u0065\u0302\u0301\u0000\u0065\u0302\u0303\u0000\u0065\u0302\u0309"d~ +"\u0000\u0065\u0303\u0000\u0065\u0304\u0000\u0065\u0304\u0300\u0000\u0065\u0304\u0301\u0000\u0065\u0306\u0000\u0065"d~ +"\u0307\u0000\u0065\u0308\u0000\u0065\u0309\u0000\u0065\u030C\u0000\u0065\u030F\u0000\u0065\u0311\u0000\u0065\u0323"d~ +"\u0000\u0065\u0323\u0302\u0000\u0065\u0327\u0000\u0065\u0327\u0306\u0000\u0065\u0328\u0000\u0065\u032D\u0000\u0065"d~ +"\u0330\u0000\u0066\u0307\u0000\u0067\u0301\u0000\u0067\u0302\u0000\u0067\u0304\u0000\u0067\u0306\u0000\u0067\u0307"d~ +"\u0000\u0067\u030C\u0000\u0067\u0327\u0000\u0068\u0302\u0000\u0068\u0307\u0000\u0068\u0308\u0000\u0068\u030C\u0000"d~ +"\u0068\u0323\u0000\u0068\u0327\u0000\u0068\u032E\u0000\u0068\u0331\u0000\u0069\u0300\u0000\u0069\u0301\u0000\u0069"d~ +"\u0302\u0000\u0069\u0303\u0000\u0069\u0304\u0000\u0069\u0306\u0000\u0069\u0308\u0000\u0069\u0308\u0301\u0000\u0069"d~ +"\u0309\u0000\u0069\u030C\u0000\u0069\u030F\u0000\u0069\u0311\u0000\u0069\u0323\u0000\u0069\u0328\u0000\u0069\u0330"d~ +"\u0000\u006A\u0302\u0000\u006A\u030C\u0000\u006B\u0301\u0000\u006B\u030C\u0000\u006B\u0323\u0000\u006B\u0327\u0000"d~ +"\u006B\u0331\u0000\u006C\u0301\u0000\u006C\u030C\u0000\u006C\u0323\u0000\u006C\u0323\u0304\u0000\u006C\u0327\u0000"d~ +"\u006C\u032D\u0000\u006C\u0331\u0000\u006D\u0301\u0000\u006D\u0307\u0000\u006D\u0323\u0000\u006E\u0300\u0000\u006E"d~ +"\u0301\u0000\u006E\u0303\u0000\u006E\u0307\u0000\u006E\u030C\u0000\u006E\u0323\u0000\u006E\u0327\u0000\u006E\u032D"d~ +"\u0000\u006E\u0331\u0000\u006F\u0300\u0000\u006F\u0301\u0000\u006F\u0302\u0000\u006F\u0302\u0300\u0000\u006F\u0302"d~ +"\u0301\u0000\u006F\u0302\u0303\u0000\u006F\u0302\u0309\u0000\u006F\u0303\u0000\u006F\u0303\u0301\u0000\u006F\u0303"d~ +"\u0304\u0000\u006F\u0303\u0308\u0000\u006F\u0304\u0000\u006F\u0304\u0300\u0000\u006F\u0304\u0301\u0000\u006F\u0306"d~ +"\u0000\u006F\u0307\u0000\u006F\u0307\u0304\u0000\u006F\u0308\u0000\u006F\u0308\u0304\u0000\u006F\u0309\u0000\u006F"d~ +"\u030B\u0000\u006F\u030C\u0000\u006F\u030F\u0000\u006F\u0311\u0000\u006F\u031B\u0000\u006F\u031B\u0300\u0000\u006F"d~ +"\u031B\u0301\u0000\u006F\u031B\u0303\u0000\u006F\u031B\u0309\u0000\u006F\u031B\u0323\u0000\u006F\u0323\u0000\u006F"d~ +"\u0323\u0302\u0000\u006F\u0328\u0000\u006F\u0328\u0304\u0000\u0070\u0301\u0000\u0070\u0307\u0000\u0072\u0301\u0000"d~ +"\u0072\u0307\u0000\u0072\u030C\u0000\u0072\u030F\u0000\u0072\u0311\u0000\u0072\u0323\u0000\u0072\u0323\u0304\u0000"d~ +"\u0072\u0327\u0000\u0072\u0331\u0000\u0073\u0301\u0000\u0073\u0301\u0307\u0000\u0073\u0302\u0000\u0073\u0307\u0000"d~ +"\u0073\u030C\u0000\u0073\u030C\u0307\u0000\u0073\u0323\u0000\u0073\u0323\u0307\u0000\u0073\u0326\u0000\u0073\u0327"d~ +"\u0000\u0074\u0307\u0000\u0074\u0308\u0000\u0074\u030C\u0000\u0074\u0323\u0000\u0074\u0326\u0000\u0074\u0327\u0000"d~ +"\u0074\u032D\u0000\u0074\u0331\u0000\u0075\u0300\u0000\u0075\u0301\u0000\u0075\u0302\u0000\u0075\u0303\u0000\u0075"d~ +"\u0303\u0301\u0000\u0075\u0304\u0000\u0075\u0304\u0308\u0000\u0075\u0306\u0000\u0075\u0308\u0000\u0075\u0308\u0300"d~ +"\u0000\u0075\u0308\u0301\u0000\u0075\u0308\u0304\u0000\u0075\u0308\u030C\u0000\u0075\u0309\u0000\u0075\u030A\u0000"d~ +"\u0075\u030B\u0000\u0075\u030C\u0000\u0075\u030F\u0000\u0075\u0311\u0000\u0075\u031B\u0000\u0075\u031B\u0300\u0000"d~ +"\u0075\u031B\u0301\u0000\u0075\u031B\u0303\u0000\u0075\u031B\u0309\u0000\u0075\u031B\u0323\u0000\u0075\u0323\u0000"d~ +"\u0075\u0324\u0000\u0075\u0328\u0000\u0075\u032D\u0000\u0075\u0330\u0000\u0076\u0303\u0000\u0076\u0323\u0000\u0077"d~ +"\u0300\u0000\u0077\u0301\u0000\u0077\u0302\u0000\u0077\u0307\u0000\u0077\u0308\u0000\u0077\u030A\u0000\u0077\u0323"d~ +"\u0000\u0078\u0307\u0000\u0078\u0308\u0000\u0079\u0300\u0000\u0079\u0301\u0000\u0079\u0302\u0000\u0079\u0303\u0000"d~ +"\u0079\u0304\u0000\u0079\u0307\u0000\u0079\u0308\u0000\u0079\u0309\u0000\u0079\u030A\u0000\u0079\u0323\u0000\u007A"d~ +"\u0301\u0000\u007A\u0302\u0000\u007A\u0307\u0000\u007A\u030C\u0000\u007A\u0323\u0000\u007A\u0331\u0000\u00A8\u0300"d~ +"\u0000\u00A8\u0301\u0000\u00A8\u0342\u0000\u00B4\u0000\u00B7\u0000\u00C6\u0301\u0000\u00C6\u0304\u0000\u00D8\u0301"d~ +"\u0000\u00E6\u0301\u0000\u00E6\u0304\u0000\u00F8\u0301\u0000\u017F\u0307\u0000\u01B7\u030C\u0000\u0292\u030C\u0000"d~ +"\u02B9\u0000\u0300\u0000\u0301\u0000\u0308\u0301\u0000\u0313\u0000\u0391\u0300\u0000\u0391\u0301\u0000\u0391\u0304"d~ +"\u0000\u0391\u0306\u0000\u0391\u0313\u0000\u0391\u0313\u0300\u0000\u0391\u0313\u0300\u0345\u0000\u0391\u0313\u0301"d~ +"\u0000\u0391\u0313\u0301\u0345\u0000\u0391\u0313\u0342\u0000\u0391\u0313\u0342\u0345\u0000\u0391\u0313\u0345\u0000"d~ +"\u0391\u0314\u0000\u0391\u0314\u0300\u0000\u0391\u0314\u0300\u0345\u0000\u0391\u0314\u0301\u0000\u0391\u0314\u0301"d~ +"\u0345\u0000\u0391\u0314\u0342\u0000\u0391\u0314\u0342\u0345\u0000\u0391\u0314\u0345\u0000\u0391\u0345\u0000\u0395"d~ +"\u0300\u0000\u0395\u0301\u0000\u0395\u0313\u0000\u0395\u0313\u0300\u0000\u0395\u0313\u0301\u0000\u0395\u0314\u0000"d~ +"\u0395\u0314\u0300\u0000\u0395\u0314\u0301\u0000\u0397\u0300\u0000\u0397\u0301\u0000\u0397\u0313\u0000\u0397\u0313"d~ +"\u0300\u0000\u0397\u0313\u0300\u0345\u0000\u0397\u0313\u0301\u0000\u0397\u0313\u0301\u0345\u0000\u0397\u0313\u0342"d~ +"\u0000\u0397\u0313\u0342\u0345\u0000\u0397\u0313\u0345\u0000\u0397\u0314\u0000\u0397\u0314\u0300\u0000\u0397\u0314"d~ +"\u0300\u0345\u0000\u0397\u0314\u0301\u0000\u0397\u0314\u0301\u0345\u0000\u0397\u0314\u0342\u0000\u0397\u0314\u0342"d~ +"\u0345\u0000\u0397\u0314\u0345\u0000\u0397\u0345\u0000\u0399\u0300\u0000\u0399\u0301\u0000\u0399\u0304\u0000\u0399"d~ +"\u0306\u0000\u0399\u0308\u0000\u0399\u0313\u0000\u0399\u0313\u0300\u0000\u0399\u0313\u0301\u0000\u0399\u0313\u0342"d~ +"\u0000\u0399\u0314\u0000\u0399\u0314\u0300\u0000\u0399\u0314\u0301\u0000\u0399\u0314\u0342\u0000\u039F\u0300\u0000"d~ +"\u039F\u0301\u0000\u039F\u0313\u0000\u039F\u0313\u0300\u0000\u039F\u0313\u0301\u0000\u039F\u0314\u0000\u039F\u0314"d~ +"\u0300\u0000\u039F\u0314\u0301\u0000\u03A1\u0314\u0000\u03A5\u0300\u0000\u03A5\u0301\u0000\u03A5\u0304\u0000\u03A5"d~ +"\u0306\u0000\u03A5\u0308\u0000\u03A5\u0314\u0000\u03A5\u0314\u0300\u0000\u03A5\u0314\u0301\u0000\u03A5\u0314\u0342"d~ +"\u0000\u03A9\u0000\u03A9\u0300\u0000\u03A9\u0301\u0000\u03A9\u0313\u0000\u03A9\u0313\u0300\u0000\u03A9\u0313\u0300"d~ +"\u0345\u0000\u03A9\u0313\u0301\u0000\u03A9\u0313\u0301\u0345\u0000\u03A9\u0313\u0342\u0000\u03A9\u0313\u0342\u0345"d~ +"\u0000\u03A9\u0313\u0345\u0000\u03A9\u0314\u0000\u03A9\u0314\u0300\u0000\u03A9\u0314\u0300\u0345\u0000\u03A9\u0314"d~ +"\u0301\u0000\u03A9\u0314\u0301\u0345\u0000\u03A9\u0314\u0342\u0000\u03A9\u0314\u0342\u0345\u0000\u03A9\u0314\u0345"d~ +"\u0000\u03A9\u0345\u0000\u03B1\u0300\u0000\u03B1\u0300\u0345\u0000\u03B1\u0301\u0000\u03B1\u0301\u0345\u0000\u03B1"d~ +"\u0304\u0000\u03B1\u0306\u0000\u03B1\u0313\u0000\u03B1\u0313\u0300\u0000\u03B1\u0313\u0300\u0345\u0000\u03B1\u0313"d~ +"\u0301\u0000\u03B1\u0313\u0301\u0345\u0000\u03B1\u0313\u0342\u0000\u03B1\u0313\u0342\u0345\u0000\u03B1\u0313\u0345"d~ +"\u0000\u03B1\u0314\u0000\u03B1\u0314\u0300\u0000\u03B1\u0314\u0300\u0345\u0000\u03B1\u0314\u0301\u0000\u03B1\u0314"d~ +"\u0301\u0345\u0000\u03B1\u0314\u0342\u0000\u03B1\u0314\u0342\u0345\u0000\u03B1\u0314\u0345\u0000\u03B1\u0342\u0000"d~ +"\u03B1\u0342\u0345\u0000\u03B1\u0345\u0000\u03B5\u0300\u0000\u03B5\u0301\u0000\u03B5\u0313\u0000\u03B5\u0313\u0300"d~ +"\u0000\u03B5\u0313\u0301\u0000\u03B5\u0314\u0000\u03B5\u0314\u0300\u0000\u03B5\u0314\u0301\u0000\u03B7\u0300\u0000"d~ +"\u03B7\u0300\u0345\u0000\u03B7\u0301\u0000\u03B7\u0301\u0345\u0000\u03B7\u0313\u0000\u03B7\u0313\u0300\u0000\u03B7"d~ +"\u0313\u0300\u0345\u0000\u03B7\u0313\u0301\u0000\u03B7\u0313\u0301\u0345\u0000\u03B7\u0313\u0342\u0000\u03B7\u0313"d~ +"\u0342\u0345\u0000\u03B7\u0313\u0345\u0000\u03B7\u0314\u0000\u03B7\u0314\u0300\u0000\u03B7\u0314\u0300\u0345\u0000"d~ +"\u03B7\u0314\u0301\u0000\u03B7\u0314\u0301\u0345\u0000\u03B7\u0314\u0342\u0000\u03B7\u0314\u0342\u0345\u0000\u03B7"d~ +"\u0314\u0345\u0000\u03B7\u0342\u0000\u03B7\u0342\u0345\u0000\u03B7\u0345\u0000\u03B9\u0000\u03B9\u0300\u0000\u03B9"d~ +"\u0301\u0000\u03B9\u0304\u0000\u03B9\u0306\u0000\u03B9\u0308\u0000\u03B9\u0308\u0300\u0000\u03B9\u0308\u0301\u0000"d~ +"\u03B9\u0308\u0342\u0000\u03B9\u0313\u0000\u03B9\u0313\u0300\u0000\u03B9\u0313\u0301\u0000\u03B9\u0313\u0342\u0000"d~ +"\u03B9\u0314\u0000\u03B9\u0314\u0300\u0000\u03B9\u0314\u0301\u0000\u03B9\u0314\u0342\u0000\u03B9\u0342\u0000\u03BF"d~ +"\u0300\u0000\u03BF\u0301\u0000\u03BF\u0313\u0000\u03BF\u0313\u0300\u0000\u03BF\u0313\u0301\u0000\u03BF\u0314\u0000"d~ +"\u03BF\u0314\u0300\u0000\u03BF\u0314\u0301\u0000\u03C1\u0313\u0000\u03C1\u0314\u0000\u03C5\u0300\u0000\u03C5\u0301"d~ +"\u0000\u03C5\u0304\u0000\u03C5\u0306\u0000\u03C5\u0308\u0000\u03C5\u0308\u0300\u0000\u03C5\u0308\u0301\u0000\u03C5"d~ +"\u0308\u0342\u0000\u03C5\u0313\u0000\u03C5\u0313\u0300\u0000\u03C5\u0313\u0301\u0000\u03C5\u0313\u0342\u0000\u03C5"d~ +"\u0314\u0000\u03C5\u0314\u0300\u0000\u03C5\u0314\u0301\u0000\u03C5\u0314\u0342\u0000\u03C5\u0342\u0000\u03C9\u0300"d~ +"\u0000\u03C9\u0300\u0345\u0000\u03C9\u0301\u0000\u03C9\u0301\u0345\u0000\u03C9\u0313\u0000\u03C9\u0313\u0300\u0000"d~ +"\u03C9\u0313\u0300\u0345\u0000\u03C9\u0313\u0301\u0000\u03C9\u0313\u0301\u0345\u0000\u03C9\u0313\u0342\u0000\u03C9"d~ +"\u0313\u0342\u0345\u0000\u03C9\u0313\u0345\u0000\u03C9\u0314\u0000\u03C9\u0314\u0300\u0000\u03C9\u0314\u0300\u0345"d~ +"\u0000\u03C9\u0314\u0301\u0000\u03C9\u0314\u0301\u0345\u0000\u03C9\u0314\u0342\u0000\u03C9\u0314\u0342\u0345\u0000"d~ +"\u03C9\u0314\u0345\u0000\u03C9\u0342\u0000\u03C9\u0342\u0345\u0000\u03C9\u0345\u0000\u03D2\u0301\u0000\u03D2\u0308"d~ +"\u0000\u0406\u0308\u0000\u0410\u0306\u0000\u0410\u0308\u0000\u0413\u0301\u0000\u0415\u0300\u0000\u0415\u0306\u0000"d~ +"\u0415\u0308\u0000\u0416\u0306\u0000\u0416\u0308\u0000\u0417\u0308\u0000\u0418\u0300\u0000\u0418\u0304\u0000\u0418"d~ +"\u0306\u0000\u0418\u0308\u0000\u041A\u0301\u0000\u041E\u0308\u0000\u0423\u0304\u0000\u0423\u0306\u0000\u0423\u0308"d~ +"\u0000\u0423\u030B\u0000\u0427\u0308\u0000\u042B\u0308\u0000\u042D\u0308\u0000\u0430\u0306\u0000\u0430\u0308\u0000"d~ +"\u0433\u0301\u0000\u0435\u0300\u0000\u0435\u0306\u0000\u0435\u0308\u0000\u0436\u0306\u0000\u0436\u0308\u0000\u0437"d~ +"\u0308\u0000\u0438\u0300\u0000\u0438\u0304\u0000\u0438\u0306\u0000\u0438\u0308\u0000\u043A\u0301\u0000\u043E\u0308"d~ +"\u0000\u0443\u0304\u0000\u0443\u0306\u0000\u0443\u0308\u0000\u0443\u030B\u0000\u0447\u0308\u0000\u044B\u0308\u0000"d~ +"\u044D\u0308\u0000\u0456\u0308\u0000\u0474\u030F\u0000\u0475\u030F\u0000\u04D8\u0308\u0000\u04D9\u0308\u0000\u04E8"d~ +"\u0308\u0000\u04E9\u0308\u0000\u05D0\u05B7\u0000\u05D0\u05B8\u0000\u05D0\u05BC\u0000\u05D1\u05BC\u0000\u05D1\u05BF"d~ +"\u0000\u05D2\u05BC\u0000\u05D3\u05BC\u0000\u05D4\u05BC\u0000\u05D5\u05B9\u0000\u05D5\u05BC\u0000\u05D6\u05BC\u0000"d~ +"\u05D8\u05BC\u0000\u05D9\u05B4\u0000\u05D9\u05BC\u0000\u05DA\u05BC\u0000\u05DB\u05BC\u0000\u05DB\u05BF\u0000\u05DC"d~ +"\u05BC\u0000\u05DE\u05BC\u0000\u05E0\u05BC\u0000\u05E1\u05BC\u0000\u05E3\u05BC\u0000\u05E4\u05BC\u0000\u05E4\u05BF"d~ +"\u0000\u05E6\u05BC\u0000\u05E7\u05BC\u0000\u05E8\u05BC\u0000\u05E9\u05BC\u0000\u05E9\u05BC\u05C1\u0000\u05E9\u05BC"d~ +"\u05C2\u0000\u05E9\u05C1\u0000\u05E9\u05C2\u0000\u05EA\u05BC\u0000\u05F2\u05B7\u0000\u0627\u0653\u0000\u0627\u0654"d~ +"\u0000\u0627\u0655\u0000\u0648\u0654\u0000\u064A\u0654\u0000\u06C1\u0654\u0000\u06D2\u0654\u0000\u06D5\u0654\u0000"d~ +"\u0915\u093C\u0000\u0916\u093C\u0000\u0917\u093C\u0000\u091C\u093C\u0000\u0921\u093C\u0000\u0922\u093C\u0000\u0928"d~ +"\u093C\u0000\u092B\u093C\u0000\u092F\u093C\u0000\u0930\u093C\u0000\u0933\u093C\u0000\u09A1\u09BC\u0000\u09A2\u09BC"d~ +"\u0000\u09AF\u09BC\u0000\u09C7\u09BE\u0000\u09C7\u09D7\u0000\u0A16\u0A3C\u0000\u0A17\u0A3C\u0000\u0A1C\u0A3C\u0000"d~ +"\u0A2B\u0A3C\u0000\u0A32\u0A3C\u0000\u0A38\u0A3C\u0000\u0B21\u0B3C\u0000\u0B22\u0B3C\u0000\u0B47\u0B3E\u0000\u0B47"d~ +"\u0B56\u0000\u0B47\u0B57\u0000\u0B92\u0BD7\u0000\u0BC6\u0BBE\u0000\u0BC6\u0BD7\u0000\u0BC7\u0BBE\u0000\u0C46\u0C56"d~ +"\u0000\u0CBF\u0CD5\u0000\u0CC6\u0CC2\u0000\u0CC6\u0CC2\u0CD5\u0000\u0CC6\u0CD5\u0000\u0CC6\u0CD6\u0000\u0D46\u0D3E"d~ +"\u0000\u0D46\u0D57\u0000\u0D47\u0D3E\u0000\u0DD9\u0DCA\u0000\u0DD9\u0DCF\u0000\u0DD9\u0DCF\u0DCA\u0000\u0DD9\u0DDF"d~ +"\u0000\u0F40\u0FB5\u0000\u0F42\u0FB7\u0000\u0F4C\u0FB7\u0000\u0F51\u0FB7\u0000\u0F56\u0FB7\u0000\u0F5B\u0FB7\u0000"d~ +"\u0F71\u0F72\u0000\u0F71\u0F74\u0000\u0F71\u0F80\u0000\u0F90\u0FB5\u0000\u0F92\u0FB7\u0000\u0F9C\u0FB7\u0000\u0FA1"d~ +"\u0FB7\u0000\u0FA6\u0FB7\u0000\u0FAB\u0FB7\u0000\u0FB2\u0F80\u0000\u0FB3\u0F80\u0000\u1025\u102E\u0000\u1B05\u1B35"d~ +"\u0000\u1B07\u1B35\u0000\u1B09\u1B35\u0000\u1B0B\u1B35\u0000\u1B0D\u1B35\u0000\u1B11\u1B35\u0000\u1B3A\u1B35\u0000"d~ +"\u1B3C\u1B35\u0000\u1B3E\u1B35\u0000\u1B3F\u1B35\u0000\u1B42\u1B35\u0000\u1FBF\u0300\u0000\u1FBF\u0301\u0000\u1FBF"d~ +"\u0342\u0000\u1FFE\u0300\u0000\u1FFE\u0301\u0000\u1FFE\u0342\u0000\u2002\u0000\u2003\u0000\u2190\u0338\u0000\u2192"d~ +"\u0338\u0000\u2194\u0338\u0000\u21D0\u0338\u0000\u21D2\u0338\u0000\u21D4\u0338\u0000\u2203\u0338\u0000\u2208\u0338"d~ +"\u0000\u220B\u0338\u0000\u2223\u0338\u0000\u2225\u0338\u0000\u223C\u0338\u0000\u2243\u0338\u0000\u2245\u0338\u0000"d~ +"\u2248\u0338\u0000\u224D\u0338\u0000\u2261\u0338\u0000\u2264\u0338\u0000\u2265\u0338\u0000\u2272\u0338\u0000\u2273"d~ +"\u0338\u0000\u2276\u0338\u0000\u2277\u0338\u0000\u227A\u0338\u0000\u227B\u0338\u0000\u227C\u0338\u0000\u227D\u0338"d~ +"\u0000\u2282\u0338\u0000\u2283\u0338\u0000\u2286\u0338\u0000\u2287\u0338\u0000\u2291\u0338\u0000\u2292\u0338\u0000"d~ +"\u22A2\u0338\u0000\u22A8\u0338\u0000\u22A9\u0338\u0000\u22AB\u0338\u0000\u22B2\u0338\u0000\u22B3\u0338\u0000\u22B4"d~ +"\u0338\u0000\u22B5\u0338\u0000\u2ADD\u0338\u0000\u3008\u0000\u3009\u0000\u3046\u3099\u0000\u304B\u3099\u0000\u304D"d~ +"\u3099\u0000\u304F\u3099\u0000\u3051\u3099\u0000\u3053\u3099\u0000\u3055\u3099\u0000\u3057\u3099\u0000\u3059\u3099"d~ +"\u0000\u305B\u3099\u0000\u305D\u3099\u0000\u305F\u3099\u0000\u3061\u3099\u0000\u3064\u3099\u0000\u3066\u3099\u0000"d~ +"\u3068\u3099\u0000\u306F\u3099\u0000\u306F\u309A\u0000\u3072\u3099\u0000\u3072\u309A\u0000\u3075\u3099\u0000\u3075"d~ +"\u309A\u0000\u3078\u3099\u0000\u3078\u309A\u0000\u307B\u3099\u0000\u307B\u309A\u0000\u309D\u3099\u0000\u30A6\u3099"d~ +"\u0000\u30AB\u3099\u0000\u30AD\u3099\u0000\u30AF\u3099\u0000\u30B1\u3099\u0000\u30B3\u3099\u0000\u30B5\u3099\u0000"d~ +"\u30B7\u3099\u0000\u30B9\u3099\u0000\u30BB\u3099\u0000\u30BD\u3099\u0000\u30BF\u3099\u0000\u30C1\u3099\u0000\u30C4"d~ +"\u3099\u0000\u30C6\u3099\u0000\u30C8\u3099\u0000\u30CF\u3099\u0000\u30CF\u309A\u0000\u30D2\u3099\u0000\u30D2\u309A"d~ +"\u0000\u30D5\u3099\u0000\u30D5\u309A\u0000\u30D8\u3099\u0000\u30D8\u309A\u0000\u30DB\u3099\u0000\u30DB\u309A\u0000"d~ +"\u30EF\u3099\u0000\u30F0\u3099\u0000\u30F1\u3099\u0000\u30F2\u3099\u0000\u30FD\u3099\u0000\u349E\u0000\u34B9\u0000"d~ +"\u34BB\u0000\u34DF\u0000\u3515\u0000\u36EE\u0000\u36FC\u0000\u3781\u0000\u382F\u0000\u3862\u0000\u387C\u0000\u38C7"d~ +"\u0000\u38E3\u0000\u391C\u0000\u393A\u0000\u3A2E\u0000\u3A6C\u0000\u3AE4\u0000\u3B08\u0000\u3B19\u0000\u3B49\u0000"d~ +"\u3B9D\u0000\u3C18\u0000\u3C4E\u0000\u3D33\u0000\u3D96\u0000\u3EAC\u0000\u3EB8\u0000\u3F1B\u0000\u3FFC\u0000\u4008"d~ +"\u0000\u4018\u0000\u4039\u0000\u4046\u0000\u4096\u0000\u40E3\u0000\u412F\u0000\u4202\u0000\u4227\u0000\u42A0\u0000"d~ +"\u4301\u0000\u4334\u0000\u4359\u0000\u43D5\u0000\u43D9\u0000\u440B\u0000\u446B\u0000\u452B\u0000\u455D\u0000\u4561"d~ +"\u0000\u456B\u0000\u45D7\u0000\u45F9\u0000\u4635\u0000\u46BE\u0000\u46C7\u0000\u4995\u0000\u49E6\u0000\u4A6E\u0000"d~ +"\u4A76\u0000\u4AB2\u0000\u4B33\u0000\u4BCE\u0000\u4CCE\u0000\u4CED\u0000\u4CF8\u0000\u4D56\u0000\u4E0D\u0000\u4E26"d~ +"\u0000\u4E32\u0000\u4E38\u0000\u4E39\u0000\u4E3D\u0000\u4E41\u0000\u4E82\u0000\u4E86\u0000\u4EAE\u0000\u4EC0\u0000"d~ +"\u4ECC\u0000\u4EE4\u0000\u4F60\u0000\u4F80\u0000\u4F86\u0000\u4F8B\u0000\u4FAE\u0000\u4FBB\u0000\u4FBF\u0000\u5002"d~ +"\u0000\u502B\u0000\u507A\u0000\u5099\u0000\u50CF\u0000\u50DA\u0000\u50E7\u0000\u5140\u0000\u5145\u0000\u514D\u0000"d~ +"\u5154\u0000\u5164\u0000\u5167\u0000\u5168\u0000\u5169\u0000\u516D\u0000\u5177\u0000\u5180\u0000\u518D\u0000\u5192"d~ +"\u0000\u5195\u0000\u5197\u0000\u51A4\u0000\u51AC\u0000\u51B5\u0000\u51B7\u0000\u51C9\u0000\u51CC\u0000\u51DC\u0000"d~ +"\u51DE\u0000\u51F5\u0000\u5203\u0000\u5207\u0000\u5217\u0000\u5229\u0000\u523A\u0000\u523B\u0000\u5246\u0000\u5272"d~ +"\u0000\u5277\u0000\u5289\u0000\u529B\u0000\u52A3\u0000\u52B3\u0000\u52C7\u0000\u52C9\u0000\u52D2\u0000\u52DE\u0000"d~ +"\u52E4\u0000\u52F5\u0000\u52FA\u0000\u5305\u0000\u5306\u0000\u5317\u0000\u533F\u0000\u5349\u0000\u5351\u0000\u535A"d~ +"\u0000\u5373\u0000\u5375\u0000\u537D\u0000\u537F\u0000\u53C3\u0000\u53CA\u0000\u53DF\u0000\u53E5\u0000\u53EB\u0000"d~ +"\u53F1\u0000\u5406\u0000\u540F\u0000\u541D\u0000\u5438\u0000\u5442\u0000\u5448\u0000\u5468\u0000\u549E\u0000\u54A2"d~ +"\u0000\u54BD\u0000\u54F6\u0000\u5510\u0000\u5553\u0000\u5555\u0000\u5563\u0000\u5584\u0000\u5587\u0000\u5599\u0000"d~ +"\u559D\u0000\u55AB\u0000\u55B3\u0000\u55C0\u0000\u55C2\u0000\u55E2\u0000\u5606\u0000\u5651\u0000\u5668\u0000\u5674"d~ +"\u0000\u56F9\u0000\u5716\u0000\u5717\u0000\u578B\u0000\u57CE\u0000\u57F4\u0000\u580D\u0000\u5831\u0000\u5832\u0000"d~ +"\u5840\u0000\u585A\u0000\u585E\u0000\u58A8\u0000\u58AC\u0000\u58B3\u0000\u58D8\u0000\u58DF\u0000\u58EE\u0000\u58F2"d~ +"\u0000\u58F7\u0000\u5906\u0000\u591A\u0000\u5922\u0000\u5944\u0000\u5948\u0000\u5951\u0000\u5954\u0000\u5962\u0000"d~ +"\u5973\u0000\u59D8\u0000\u59EC\u0000\u5A1B\u0000\u5A27\u0000\u5A62\u0000\u5A66\u0000\u5AB5\u0000\u5B08\u0000\u5B28"d~ +"\u0000\u5B3E\u0000\u5B85\u0000\u5BC3\u0000\u5BD8\u0000\u5BE7\u0000\u5BEE\u0000\u5BF3\u0000\u5BFF\u0000\u5C06\u0000"d~ +"\u5C22\u0000\u5C3F\u0000\u5C60\u0000\u5C62\u0000\u5C64\u0000\u5C65\u0000\u5C6E\u0000\u5C8D\u0000\u5CC0\u0000\u5D19"d~ +"\u0000\u5D43\u0000\u5D50\u0000\u5D6B\u0000\u5D6E\u0000\u5D7C\u0000\u5DB2\u0000\u5DBA\u0000\u5DE1\u0000\u5DE2\u0000"d~ +"\u5DFD\u0000\u5E28\u0000\u5E3D\u0000\u5E69\u0000\u5E74\u0000\u5EA6\u0000\u5EB0\u0000\u5EB3\u0000\u5EB6\u0000\u5EC9"d~ +"\u0000\u5ECA\u0000\u5ED2\u0000\u5ED3\u0000\u5ED9\u0000\u5EEC\u0000\u5EFE\u0000\u5F04\u0000\u5F22\u0000\u5F53\u0000"d~ +"\u5F62\u0000\u5F69\u0000\u5F6B\u0000\u5F8B\u0000\u5F9A\u0000\u5FA9\u0000\u5FAD\u0000\u5FCD\u0000\u5FD7\u0000\u5FF5"d~ +"\u0000\u5FF9\u0000\u6012\u0000\u601C\u0000\u6075\u0000\u6081\u0000\u6094\u0000\u60C7\u0000\u60D8\u0000\u60E1\u0000"d~ +"\u6108\u0000\u6144\u0000\u6148\u0000\u614C\u0000\u614E\u0000\u6160\u0000\u6168\u0000\u617A\u0000\u618E\u0000\u6190"d~ +"\u0000\u61A4\u0000\u61AF\u0000\u61B2\u0000\u61DE\u0000\u61F2\u0000\u61F6\u0000\u6200\u0000\u6210\u0000\u621B\u0000"d~ +"\u622E\u0000\u6234\u0000\u625D\u0000\u62B1\u0000\u62C9\u0000\u62CF\u0000\u62D3\u0000\u62D4\u0000\u62FC\u0000\u62FE"d~ +"\u0000\u633D\u0000\u6350\u0000\u6368\u0000\u637B\u0000\u6383\u0000\u63A0\u0000\u63A9\u0000\u63C4\u0000\u63C5\u0000"d~ +"\u63E4\u0000\u641C\u0000\u6422\u0000\u6452\u0000\u6469\u0000\u6477\u0000\u647E\u0000\u649A\u0000\u649D\u0000\u64C4"d~ +"\u0000\u654F\u0000\u6556\u0000\u656C\u0000\u6578\u0000\u6599\u0000\u65C5\u0000\u65E2\u0000\u65E3\u0000\u6613\u0000"d~ +"\u6649\u0000\u6674\u0000\u6688\u0000\u6691\u0000\u669C\u0000\u66B4\u0000\u66C6\u0000\u66F4\u0000\u66F8\u0000\u6700"d~ +"\u0000\u6717\u0000\u671B\u0000\u6721\u0000\u674E\u0000\u6753\u0000\u6756\u0000\u675E\u0000\u677B\u0000\u6785\u0000"d~ +"\u6797\u0000\u67F3\u0000\u67FA\u0000\u6817\u0000\u681F\u0000\u6852\u0000\u6881\u0000\u6885\u0000\u688E\u0000\u68A8"d~ +"\u0000\u6914\u0000\u6942\u0000\u69A3\u0000\u69EA\u0000\u6A02\u0000\u6A13\u0000\u6AA8\u0000\u6AD3\u0000\u6ADB\u0000"d~ +"\u6B04\u0000\u6B21\u0000\u6B54\u0000\u6B72\u0000\u6B77\u0000\u6B79\u0000\u6B9F\u0000\u6BAE\u0000\u6BBA\u0000\u6BBB"d~ +"\u0000\u6C4E\u0000\u6C67\u0000\u6C88\u0000\u6CBF\u0000\u6CCC\u0000\u6CCD\u0000\u6CE5\u0000\u6D16\u0000\u6D1B\u0000"d~ +"\u6D1E\u0000\u6D34\u0000\u6D3E\u0000\u6D41\u0000\u6D69\u0000\u6D6A\u0000\u6D77\u0000\u6D78\u0000\u6D85\u0000\u6DCB"d~ +"\u0000\u6DDA\u0000\u6DEA\u0000\u6DF9\u0000\u6E1A\u0000\u6E2F\u0000\u6E6E\u0000\u6E9C\u0000\u6EBA\u0000\u6EC7\u0000"d~ +"\u6ECB\u0000\u6ED1\u0000\u6EDB\u0000\u6F0F\u0000\u6F22\u0000\u6F23\u0000\u6F6E\u0000\u6FC6\u0000\u6FEB\u0000\u6FFE"d~ +"\u0000\u701B\u0000\u701E\u0000\u7039\u0000\u704A\u0000\u7070\u0000\u7077\u0000\u707D\u0000\u7099\u0000\u70AD\u0000"d~ +"\u70C8\u0000\u70D9\u0000\u7145\u0000\u7149\u0000\u716E\u0000\u719C\u0000\u71CE\u0000\u71D0\u0000\u7210\u0000\u721B"d~ +"\u0000\u7228\u0000\u722B\u0000\u7235\u0000\u7250\u0000\u7262\u0000\u7280\u0000\u7295\u0000\u72AF\u0000\u72C0\u0000"d~ +"\u72FC\u0000\u732A\u0000\u7375\u0000\u737A\u0000\u7387\u0000\u738B\u0000\u73A5\u0000\u73B2\u0000\u73DE\u0000\u7406"d~ +"\u0000\u7409\u0000\u7422\u0000\u7447\u0000\u745C\u0000\u7469\u0000\u7471\u0000\u7485\u0000\u7489\u0000\u7498\u0000"d~ +"\u74CA\u0000\u7506\u0000\u7524\u0000\u753B\u0000\u753E\u0000\u7559\u0000\u7565\u0000\u7570\u0000\u75E2\u0000\u7610"d~ +"\u0000\u761D\u0000\u761F\u0000\u7642\u0000\u7669\u0000\u76CA\u0000\u76DB\u0000\u76E7\u0000\u76F4\u0000\u7701\u0000"d~ +"\u771E\u0000\u771F\u0000\u7740\u0000\u774A\u0000\u778B\u0000\u77A7\u0000\u784E\u0000\u786B\u0000\u788C\u0000\u7891"d~ +"\u0000\u78CA\u0000\u78CC\u0000\u78FB\u0000\u792A\u0000\u793C\u0000\u793E\u0000\u7948\u0000\u7949\u0000\u7950\u0000"d~ +"\u7956\u0000\u795D\u0000\u795E\u0000\u7965\u0000\u797F\u0000\u798D\u0000\u798E\u0000\u798F\u0000\u79AE\u0000\u79CA"d~ +"\u0000\u79EB\u0000\u7A1C\u0000\u7A40\u0000\u7A4A\u0000\u7A4F\u0000\u7A81\u0000\u7AB1\u0000\u7ACB\u0000\u7AEE\u0000"d~ +"\u7B20\u0000\u7BC0\u0000\u7BC6\u0000\u7BC9\u0000\u7C3E\u0000\u7C60\u0000\u7C7B\u0000\u7C92\u0000\u7CBE\u0000\u7CD2"d~ +"\u0000\u7CD6\u0000\u7CE3\u0000\u7CE7\u0000\u7CE8\u0000\u7D00\u0000\u7D10\u0000\u7D22\u0000\u7D2F\u0000\u7D5B\u0000"d~ +"\u7D63\u0000\u7DA0\u0000\u7DBE\u0000\u7DC7\u0000\u7DF4\u0000\u7E02\u0000\u7E09\u0000\u7E37\u0000\u7E41\u0000\u7E45"d~ +"\u0000\u7F3E\u0000\u7F72\u0000\u7F79\u0000\u7F7A\u0000\u7F85\u0000\u7F95\u0000\u7F9A\u0000\u7FBD\u0000\u7FFA\u0000"d~ +"\u8001\u0000\u8005\u0000\u8046\u0000\u8060\u0000\u806F\u0000\u8070\u0000\u807E\u0000\u808B\u0000\u80AD\u0000\u80B2"d~ +"\u0000\u8103\u0000\u813E\u0000\u81D8\u0000\u81E8\u0000\u81ED\u0000\u8201\u0000\u8204\u0000\u8218\u0000\u826F\u0000"d~ +"\u8279\u0000\u828B\u0000\u8291\u0000\u829D\u0000\u82B1\u0000\u82B3\u0000\u82BD\u0000\u82E5\u0000\u82E6\u0000\u831D"d~ +"\u0000\u8323\u0000\u8336\u0000\u8352\u0000\u8353\u0000\u8363\u0000\u83AD\u0000\u83BD\u0000\u83C9\u0000\u83CA\u0000"d~ +"\u83CC\u0000\u83DC\u0000\u83E7\u0000\u83EF\u0000\u83F1\u0000\u843D\u0000\u8449\u0000\u8457\u0000\u84EE\u0000\u84F1"d~ +"\u0000\u84F3\u0000\u84FC\u0000\u8516\u0000\u8564\u0000\u85CD\u0000\u85FA\u0000\u8606\u0000\u8612\u0000\u862D\u0000"d~ +"\u863F\u0000\u8650\u0000\u865C\u0000\u8667\u0000\u8669\u0000\u8688\u0000\u86A9\u0000\u86E2\u0000\u870E\u0000\u8728"d~ +"\u0000\u876B\u0000\u8779\u0000\u8786\u0000\u87BA\u0000\u87E1\u0000\u8801\u0000\u881F\u0000\u884C\u0000\u8860\u0000"d~ +"\u8863\u0000\u88C2\u0000\u88CF\u0000\u88D7\u0000\u88DE\u0000\u88E1\u0000\u88F8\u0000\u88FA\u0000\u8910\u0000\u8941"d~ +"\u0000\u8964\u0000\u8986\u0000\u898B\u0000\u8996\u0000\u8AA0\u0000\u8AAA\u0000\u8ABF\u0000\u8ACB\u0000\u8AD2\u0000"d~ +"\u8AD6\u0000\u8AED\u0000\u8AF8\u0000\u8AFE\u0000\u8B01\u0000\u8B39\u0000\u8B58\u0000\u8B80\u0000\u8B8A\u0000\u8C48"d~ +"\u0000\u8C55\u0000\u8CAB\u0000\u8CC1\u0000\u8CC2\u0000\u8CC8\u0000\u8CD3\u0000\u8D08\u0000\u8D1B\u0000\u8D77\u0000"d~ +"\u8DBC\u0000\u8DCB\u0000\u8DEF\u0000\u8DF0\u0000\u8ECA\u0000\u8ED4\u0000\u8F26\u0000\u8F2A\u0000\u8F38\u0000\u8F3B"d~ +"\u0000\u8F62\u0000\u8F9E\u0000\u8FB0\u0000\u8FB6\u0000\u9023\u0000\u9038\u0000\u9072\u0000\u907C\u0000\u908F\u0000"d~ +"\u9094\u0000\u90CE\u0000\u90DE\u0000\u90F1\u0000\u90FD\u0000\u9111\u0000\u911B\u0000\u916A\u0000\u9199\u0000\u91B4"d~ +"\u0000\u91CC\u0000\u91CF\u0000\u91D1\u0000\u9234\u0000\u9238\u0000\u9276\u0000\u927C\u0000\u92D7\u0000\u92D8\u0000"d~ +"\u9304\u0000\u934A\u0000\u93F9\u0000\u9415\u0000\u958B\u0000\u95AD\u0000\u95B7\u0000\u962E\u0000\u964B\u0000\u964D"d~ +"\u0000\u9675\u0000\u9678\u0000\u967C\u0000\u9686\u0000\u96A3\u0000\u96B7\u0000\u96B8\u0000\u96C3\u0000\u96E2\u0000"d~ +"\u96E3\u0000\u96F6\u0000\u96F7\u0000\u9723\u0000\u9732\u0000\u9748\u0000\u9756\u0000\u97DB\u0000\u97E0\u0000\u97FF"d~ +"\u0000\u980B\u0000\u9818\u0000\u9829\u0000\u983B\u0000\u985E\u0000\u98E2\u0000\u98EF\u0000\u98FC\u0000\u9928\u0000"d~ +"\u9929\u0000\u99A7\u0000\u99C2\u0000\u99F1\u0000\u99FE\u0000\u9A6A\u0000\u9B12\u0000\u9B6F\u0000\u9C40\u0000\u9C57"d~ +"\u0000\u9CFD\u0000\u9D67\u0000\u9DB4\u0000\u9DFA\u0000\u9E1E\u0000\u9E7F\u0000\u9E97\u0000\u9E9F\u0000\u9EBB\u0000"d~ +"\u9ECE\u0000\u9EF9\u0000\u9EFE\u0000\u9F05\u0000\u9F0F\u0000\u9F16\u0000\u9F3B\u0000\u9F43\u0000\u9F8D\u0000\u9F8E"d~ +"\u0000\u9F9C\u0000\U000105D2\u0307\u0000\U000105DA\u0307\u0000\U00011099\U000110BA\u0000\U0001109B\U000110BA\u0000"d~ +"\U000110A5\U000110BA\u0000\U00011131\U00011127\u0000\U00011132\U00011127\u0000\U00011347\U0001133E\u0000\U00011347"d~ +"\U00011357\u0000\U00011382\U000113C9\u0000\U00011384\U000113BB\u0000\U0001138B\U000113C2\u0000\U00011390\U000113C9"d~ +"\u0000\U000113C2\U000113B8\u0000\U000113C2\U000113C2\u0000\U000113C2\U000113C9\u0000\U000114B9\U000114B0\u0000"d~ +"\U000114B9\U000114BA\u0000\U000114B9\U000114BD\u0000\U000115B8\U000115AF\u0000\U000115B9\U000115AF\u0000\U00011935"d~ +"\U00011930\u0000\U0001611E\U0001611E\u0000\U0001611E\U0001611E\U0001611F\u0000\U0001611E\U0001611E\U00016120\u0000"d~ +"\U0001611E\U0001611F\u0000\U0001611E\U00016120\u0000\U0001611E\U00016129\u0000\U0001611E\U00016129\U0001611F\u0000"d~ +"\U00016129\U0001611F\u0000\U00016D63\U00016D67\u0000\U00016D63\U00016D67\U00016D67\u0000\U00016D67\U00016D67\u0000"d~ +"\U0001D157\U0001D165\u0000\U0001D158\U0001D165\u0000\U0001D158\U0001D165\U0001D16E\u0000\U0001D158\U0001D165\U0001D16F"d~ +"\u0000\U0001D158\U0001D165\U0001D170\u0000\U0001D158\U0001D165\U0001D171\u0000\U0001D158\U0001D165\U0001D172\u0000"d~ +"\U0001D1B9\U0001D165\u0000\U0001D1B9\U0001D165\U0001D16E\u0000\U0001D1B9\U0001D165\U0001D16F\u0000\U0001D1BA\U0001D165"d~ +"\u0000\U0001D1BA\U0001D165\U0001D16E\u0000\U0001D1BA\U0001D165\U0001D16F\u0000\U00020122\u0000\U0002051C\u0000"d~ +"\U00020525\u0000\U0002054B\u0000\U0002063A\u0000\U00020804\u0000\U000208DE\u0000\U00020A2C\u0000\U00020B63\u0000"d~ +"\U000214E4\u0000\U000216A8\u0000\U000216EA\u0000\U000219C8\u0000\U00021B18\u0000\U00021D0B\u0000\U00021DE4\u0000"d~ +"\U00021DE6\u0000\U00022183\u0000\U0002219F\u0000\U00022331\u0000\U000226D4\u0000\U00022844\u0000\U0002284A\u0000"d~ +"\U00022B0C\u0000\U00022BF1\u0000\U0002300A\u0000\U000232B8\u0000\U0002335F\u0000\U00023393\u0000\U0002339C\u0000"d~ +"\U000233C3\u0000\U000233D5\u0000\U0002346D\u0000\U000236A3\u0000\U000238A7\u0000\U00023A8D\u0000\U00023AFA\u0000"d~ +"\U00023CBC\u0000\U00023D1E\u0000\U00023ED1\u0000\U00023F5E\u0000\U00023F8E\u0000\U00024263\u0000\U000242EE\u0000"d~ +"\U000243AB\u0000\U00024608\u0000\U00024735\u0000\U00024814\u0000\U00024C36\u0000\U00024C92\u0000\U00024FA1\u0000"d~ +"\U00024FB8\u0000\U00025044\u0000\U000250F2\u0000\U000250F3\u0000\U00025119\u0000\U00025133\u0000\U00025249\u0000"d~ +"\U0002541D\u0000\U00025626\u0000\U0002569A\u0000\U000256C5\u0000\U0002597C\u0000\U00025AA7\u0000\U00025BAB\u0000"d~ +"\U00025C80\u0000\U00025CD0\u0000\U00025F86\u0000\U000261DA\u0000\U00026228\u0000\U00026247\u0000\U000262D9\u0000"d~ +"\U0002633E\u0000\U000264DA\u0000\U00026523\u0000\U000265A8\u0000\U000267A7\u0000\U000267B5\u0000\U00026B3C\u0000"d~ +"\U00026C36\u0000\U00026CD5\u0000\U00026D6B\u0000\U00026F2C\u0000\U00026FB1\u0000\U000270D2\u0000\U000273CA\u0000"d~ +"\U00027667\u0000\U000278AE\u0000\U00027966\u0000\U00027CA8\u0000\U00027ED3\u0000\U00027F2F\u0000\U000285D2\u0000"d~ +"\U000285ED\u0000\U0002872E\u0000\U00028BFA\u0000\U00028D77\u0000\U00029145\u0000\U000291DF\u0000\U0002921A\u0000"d~ +"\U0002940A\u0000\U00029496\u0000\U000295B6\u0000\U00029B30\u0000\U0002A0CE\u0000\U0002A105\u0000\U0002A20E\u0000"d~ +"\U0002A291\u0000\U0002A392\u0000\U0002A600\u0000"d; +return t[]; +} +dstring decompCompatTable() nothrow @nogc pure @safe { +static immutable dchar[10489] t = +"\u0000\u0020\u0000\u0020\u0301\u0000\u0020\u0303\u0000\u0020\u0304\u0000\u0020\u0305\u0000\u0020\u0306\u0000\u0020"d~ +"\u0307\u0000\u0020\u0308\u0000\u0020\u0308\u0300\u0000\u0020\u0308\u0301\u0000\u0020\u0308\u0342\u0000\u0020\u030A"d~ +"\u0000\u0020\u030B\u0000\u0020\u0313\u0000\u0020\u0313\u0300\u0000\u0020\u0313\u0301\u0000\u0020\u0313\u0342\u0000"d~ +"\u0020\u0314\u0000\u0020\u0314\u0300\u0000\u0020\u0314\u0301\u0000\u0020\u0314\u0342\u0000\u0020\u0327\u0000\u0020"d~ +"\u0328\u0000\u0020\u0333\u0000\u0020\u0342\u0000\u0020\u0345\u0000\u0020\u064B\u0000\u0020\u064C\u0000\u0020\u064C"d~ +"\u0651\u0000\u0020\u064D\u0000\u0020\u064D\u0651\u0000\u0020\u064E\u0000\u0020\u064E\u0651\u0000\u0020\u064F\u0000"d~ +"\u0020\u064F\u0651\u0000\u0020\u0650\u0000\u0020\u0650\u0651\u0000\u0020\u0651\u0000\u0020\u0651\u0670\u0000\u0020"d~ +"\u0652\u0000\u0020\u3099\u0000\u0020\u309A\u0000\u0021\u0000\u0021\u0021\u0000\u0021\u003F\u0000\u0022\u0000\u0023"d~ +"\u0000\u0024\u0000\u0025\u0000\u0026\u0000\u0027\u0000\u0028\u0000\u0028\u0031\u0029\u0000\u0028\u0031\u0030\u0029"d~ +"\u0000\u0028\u0031\u0031\u0029\u0000\u0028\u0031\u0032\u0029\u0000\u0028\u0031\u0033\u0029\u0000\u0028\u0031\u0034"d~ +"\u0029\u0000\u0028\u0031\u0035\u0029\u0000\u0028\u0031\u0036\u0029\u0000\u0028\u0031\u0037\u0029\u0000\u0028\u0031"d~ +"\u0038\u0029\u0000\u0028\u0031\u0039\u0029\u0000\u0028\u0032\u0029\u0000\u0028\u0032\u0030\u0029\u0000\u0028\u0033"d~ +"\u0029\u0000\u0028\u0034\u0029\u0000\u0028\u0035\u0029\u0000\u0028\u0036\u0029\u0000\u0028\u0037\u0029\u0000\u0028"d~ +"\u0038\u0029\u0000\u0028\u0039\u0029\u0000\u0028\u0041\u0029\u0000\u0028\u0042\u0029\u0000\u0028\u0043\u0029\u0000"d~ +"\u0028\u0044\u0029\u0000\u0028\u0045\u0029\u0000\u0028\u0046\u0029\u0000\u0028\u0047\u0029\u0000\u0028\u0048\u0029"d~ +"\u0000\u0028\u0049\u0029\u0000\u0028\u004A\u0029\u0000\u0028\u004B\u0029\u0000\u0028\u004C\u0029\u0000\u0028\u004D"d~ +"\u0029\u0000\u0028\u004E\u0029\u0000\u0028\u004F\u0029\u0000\u0028\u0050\u0029\u0000\u0028\u0051\u0029\u0000\u0028"d~ +"\u0052\u0029\u0000\u0028\u0053\u0029\u0000\u0028\u0054\u0029\u0000\u0028\u0055\u0029\u0000\u0028\u0056\u0029\u0000"d~ +"\u0028\u0057\u0029\u0000\u0028\u0058\u0029\u0000\u0028\u0059\u0029\u0000\u0028\u005A\u0029\u0000\u0028\u0061\u0029"d~ +"\u0000\u0028\u0062\u0029\u0000\u0028\u0063\u0029\u0000\u0028\u0064\u0029\u0000\u0028\u0065\u0029\u0000\u0028\u0066"d~ +"\u0029\u0000\u0028\u0067\u0029\u0000\u0028\u0068\u0029\u0000\u0028\u0069\u0029\u0000\u0028\u006A\u0029\u0000\u0028"d~ +"\u006B\u0029\u0000\u0028\u006C\u0029\u0000\u0028\u006D\u0029\u0000\u0028\u006E\u0029\u0000\u0028\u006F\u0029\u0000"d~ +"\u0028\u0070\u0029\u0000\u0028\u0071\u0029\u0000\u0028\u0072\u0029\u0000\u0028\u0073\u0029\u0000\u0028\u0074\u0029"d~ +"\u0000\u0028\u0075\u0029\u0000\u0028\u0076\u0029\u0000\u0028\u0077\u0029\u0000\u0028\u0078\u0029\u0000\u0028\u0079"d~ +"\u0029\u0000\u0028\u007A\u0029\u0000\u0028\u1100\u0029\u0000\u0028\u1100\u1161\u0029\u0000\u0028\u1102\u0029\u0000"d~ +"\u0028\u1102\u1161\u0029\u0000\u0028\u1103\u0029\u0000\u0028\u1103\u1161\u0029\u0000\u0028\u1105\u0029\u0000\u0028"d~ +"\u1105\u1161\u0029\u0000\u0028\u1106\u0029\u0000\u0028\u1106\u1161\u0029\u0000\u0028\u1107\u0029\u0000\u0028\u1107"d~ +"\u1161\u0029\u0000\u0028\u1109\u0029\u0000\u0028\u1109\u1161\u0029\u0000\u0028\u110B\u0029\u0000\u0028\u110B\u1161"d~ +"\u0029\u0000\u0028\u110B\u1169\u110C\u1165\u11AB\u0029\u0000\u0028\u110B\u1169\u1112\u116E\u0029\u0000\u0028\u110C"d~ +"\u0029\u0000\u0028\u110C\u1161\u0029\u0000\u0028\u110C\u116E\u0029\u0000\u0028\u110E\u0029\u0000\u0028\u110E\u1161"d~ +"\u0029\u0000\u0028\u110F\u0029\u0000\u0028\u110F\u1161\u0029\u0000\u0028\u1110\u0029\u0000\u0028\u1110\u1161\u0029"d~ +"\u0000\u0028\u1111\u0029\u0000\u0028\u1111\u1161\u0029\u0000\u0028\u1112\u0029\u0000\u0028\u1112\u1161\u0029\u0000"d~ +"\u0028\u4E00\u0029\u0000\u0028\u4E03\u0029\u0000\u0028\u4E09\u0029\u0000\u0028\u4E5D\u0029\u0000\u0028\u4E8C\u0029"d~ +"\u0000\u0028\u4E94\u0029\u0000\u0028\u4EE3\u0029\u0000\u0028\u4F01\u0029\u0000\u0028\u4F11\u0029\u0000\u0028\u516B"d~ +"\u0029\u0000\u0028\u516D\u0029\u0000\u0028\u52B4\u0029\u0000\u0028\u5341\u0029\u0000\u0028\u5354\u0029\u0000\u0028"d~ +"\u540D\u0029\u0000\u0028\u547C\u0029\u0000\u0028\u56DB\u0029\u0000\u0028\u571F\u0029\u0000\u0028\u5B66\u0029\u0000"d~ +"\u0028\u65E5\u0029\u0000\u0028\u6708\u0029\u0000\u0028\u6709\u0029\u0000\u0028\u6728\u0029\u0000\u0028\u682A\u0029"d~ +"\u0000\u0028\u6C34\u0029\u0000\u0028\u706B\u0029\u0000\u0028\u7279\u0029\u0000\u0028\u76E3\u0029\u0000\u0028\u793E"d~ +"\u0029\u0000\u0028\u795D\u0029\u0000\u0028\u796D\u0029\u0000\u0028\u81EA\u0029\u0000\u0028\u81F3\u0029\u0000\u0028"d~ +"\u8CA1\u0029\u0000\u0028\u8CC7\u0029\u0000\u0028\u91D1\u0029\u0000\u0029\u0000\u002A\u0000\u002B\u0000\u002C\u0000"d~ +"\u002D\u0000\u002E\u0000\u002E\u002E\u0000\u002E\u002E\u002E\u0000\u002F\u0000\u0030\u0000\u0030\u002C\u0000\u0030"d~ +"\u002E\u0000\u0030\u2044\u0033\u0000\u0030\u70B9\u0000\u0031\u0000\u0031\u002C\u0000\u0031\u002E\u0000\u0031\u0030"d~ +"\u0000\u0031\u0030\u002E\u0000\u0031\u0030\u65E5\u0000\u0031\u0030\u6708\u0000\u0031\u0030\u70B9\u0000\u0031\u0031"d~ +"\u0000\u0031\u0031\u002E\u0000\u0031\u0031\u65E5\u0000\u0031\u0031\u6708\u0000\u0031\u0031\u70B9\u0000\u0031\u0032"d~ +"\u0000\u0031\u0032\u002E\u0000\u0031\u0032\u65E5\u0000\u0031\u0032\u6708\u0000\u0031\u0032\u70B9\u0000\u0031\u0033"d~ +"\u0000\u0031\u0033\u002E\u0000\u0031\u0033\u65E5\u0000\u0031\u0033\u70B9\u0000\u0031\u0034\u0000\u0031\u0034\u002E"d~ +"\u0000\u0031\u0034\u65E5\u0000\u0031\u0034\u70B9\u0000\u0031\u0035\u0000\u0031\u0035\u002E\u0000\u0031\u0035\u65E5"d~ +"\u0000\u0031\u0035\u70B9\u0000\u0031\u0036\u0000\u0031\u0036\u002E\u0000\u0031\u0036\u65E5\u0000\u0031\u0036\u70B9"d~ +"\u0000\u0031\u0037\u0000\u0031\u0037\u002E\u0000\u0031\u0037\u65E5\u0000\u0031\u0037\u70B9\u0000\u0031\u0038\u0000"d~ +"\u0031\u0038\u002E\u0000\u0031\u0038\u65E5\u0000\u0031\u0038\u70B9\u0000\u0031\u0039\u0000\u0031\u0039\u002E\u0000"d~ +"\u0031\u0039\u65E5\u0000\u0031\u0039\u70B9\u0000\u0031\u2044\u0000\u0031\u2044\u0031\u0030\u0000\u0031\u2044\u0032"d~ +"\u0000\u0031\u2044\u0033\u0000\u0031\u2044\u0034\u0000\u0031\u2044\u0035\u0000\u0031\u2044\u0036\u0000\u0031\u2044"d~ +"\u0037\u0000\u0031\u2044\u0038\u0000\u0031\u2044\u0039\u0000\u0031\u65E5\u0000\u0031\u6708\u0000\u0031\u70B9\u0000"d~ +"\u0032\u0000\u0032\u002C\u0000\u0032\u002E\u0000\u0032\u0030\u0000\u0032\u0030\u002E\u0000\u0032\u0030\u65E5\u0000"d~ +"\u0032\u0030\u70B9\u0000\u0032\u0031\u0000\u0032\u0031\u65E5\u0000\u0032\u0031\u70B9\u0000\u0032\u0032\u0000\u0032"d~ +"\u0032\u65E5\u0000\u0032\u0032\u70B9\u0000\u0032\u0033\u0000\u0032\u0033\u65E5\u0000\u0032\u0033\u70B9\u0000\u0032"d~ +"\u0034\u0000\u0032\u0034\u65E5\u0000\u0032\u0034\u70B9\u0000\u0032\u0035\u0000\u0032\u0035\u65E5\u0000\u0032\u0036"d~ +"\u0000\u0032\u0036\u65E5\u0000\u0032\u0037\u0000\u0032\u0037\u65E5\u0000\u0032\u0038\u0000\u0032\u0038\u65E5\u0000"d~ +"\u0032\u0039\u0000\u0032\u0039\u65E5\u0000\u0032\u2044\u0033\u0000\u0032\u2044\u0035\u0000\u0032\u65E5\u0000\u0032"d~ +"\u6708\u0000\u0032\u70B9\u0000\u0033\u0000\u0033\u002C\u0000\u0033\u002E\u0000\u0033\u0030\u0000\u0033\u0030\u65E5"d~ +"\u0000\u0033\u0031\u0000\u0033\u0031\u65E5\u0000\u0033\u0032\u0000\u0033\u0033\u0000\u0033\u0034\u0000\u0033\u0035"d~ +"\u0000\u0033\u0036\u0000\u0033\u0037\u0000\u0033\u0038\u0000\u0033\u0039\u0000\u0033\u2044\u0034\u0000\u0033\u2044"d~ +"\u0035\u0000\u0033\u2044\u0038\u0000\u0033\u65E5\u0000\u0033\u6708\u0000\u0033\u70B9\u0000\u0034\u0000\u0034\u002C"d~ +"\u0000\u0034\u002E\u0000\u0034\u0030\u0000\u0034\u0031\u0000\u0034\u0032\u0000\u0034\u0033\u0000\u0034\u0034\u0000"d~ +"\u0034\u0035\u0000\u0034\u0036\u0000\u0034\u0037\u0000\u0034\u0038\u0000\u0034\u0039\u0000\u0034\u2044\u0035\u0000"d~ +"\u0034\u65E5\u0000\u0034\u6708\u0000\u0034\u70B9\u0000\u0035\u0000\u0035\u002C\u0000\u0035\u002E\u0000\u0035\u0030"d~ +"\u0000\u0035\u2044\u0036\u0000\u0035\u2044\u0038\u0000\u0035\u65E5\u0000\u0035\u6708\u0000\u0035\u70B9\u0000\u0036"d~ +"\u0000\u0036\u002C\u0000\u0036\u002E\u0000\u0036\u65E5\u0000\u0036\u6708\u0000\u0036\u70B9\u0000\u0037\u0000\u0037"d~ +"\u002C\u0000\u0037\u002E\u0000\u0037\u2044\u0038\u0000\u0037\u65E5\u0000\u0037\u6708\u0000\u0037\u70B9\u0000\u0038"d~ +"\u0000\u0038\u002C\u0000\u0038\u002E\u0000\u0038\u65E5\u0000\u0038\u6708\u0000\u0038\u70B9\u0000\u0039\u0000\u0039"d~ +"\u002C\u0000\u0039\u002E\u0000\u0039\u65E5\u0000\u0039\u6708\u0000\u0039\u70B9\u0000\u003A\u0000\u003A\u003A\u003D"d~ +"\u0000\u003B\u0000\u003C\u0000\u003C\u0338\u0000\u003D\u0000\u003D\u003D\u0000\u003D\u003D\u003D\u0000\u003D\u0338"d~ +"\u0000\u003E\u0000\u003E\u0338\u0000\u003F\u0000\u003F\u0021\u0000\u003F\u003F\u0000\u0040\u0000\u0041\u0000\u0041"d~ +"\u0055\u0000\u0041\u0300\u0000\u0041\u0301\u0000\u0041\u0302\u0000\u0041\u0302\u0300\u0000\u0041\u0302\u0301\u0000"d~ +"\u0041\u0302\u0303\u0000\u0041\u0302\u0309\u0000\u0041\u0303\u0000\u0041\u0304\u0000\u0041\u0306\u0000\u0041\u0306"d~ +"\u0300\u0000\u0041\u0306\u0301\u0000\u0041\u0306\u0303\u0000\u0041\u0306\u0309\u0000\u0041\u0307\u0000\u0041\u0307"d~ +"\u0304\u0000\u0041\u0308\u0000\u0041\u0308\u0304\u0000\u0041\u0309\u0000\u0041\u030A\u0000\u0041\u030A\u0301\u0000"d~ +"\u0041\u030C\u0000\u0041\u030F\u0000\u0041\u0311\u0000\u0041\u0323\u0000\u0041\u0323\u0302\u0000\u0041\u0323\u0306"d~ +"\u0000\u0041\u0325\u0000\u0041\u0328\u0000\u0041\u2215\u006D\u0000\u0042\u0000\u0042\u0071\u0000\u0042\u0307\u0000"d~ +"\u0042\u0323\u0000\u0042\u0331\u0000\u0043\u0000\u0043\u0044\u0000\u0043\u006F\u002E\u0000\u0043\u0301\u0000\u0043"d~ +"\u0302\u0000\u0043\u0307\u0000\u0043\u030C\u0000\u0043\u0327\u0000\u0043\u0327\u0301\u0000\u0043\u2215\u006B\u0067"d~ +"\u0000\u0044\u0000\u0044\u004A\u0000\u0044\u005A\u0000\u0044\u005A\u030C\u0000\u0044\u007A\u0000\u0044\u007A\u030C"d~ +"\u0000\u0044\u0307\u0000\u0044\u030C\u0000\u0044\u0323\u0000\u0044\u0327\u0000\u0044\u032D\u0000\u0044\u0331\u0000"d~ +"\u0045\u0000\u0045\u0300\u0000\u0045\u0301\u0000\u0045\u0302\u0000\u0045\u0302\u0300\u0000\u0045\u0302\u0301\u0000"d~ +"\u0045\u0302\u0303\u0000\u0045\u0302\u0309\u0000\u0045\u0303\u0000\u0045\u0304\u0000\u0045\u0304\u0300\u0000\u0045"d~ +"\u0304\u0301\u0000\u0045\u0306\u0000\u0045\u0307\u0000\u0045\u0308\u0000\u0045\u0309\u0000\u0045\u030C\u0000\u0045"d~ +"\u030F\u0000\u0045\u0311\u0000\u0045\u0323\u0000\u0045\u0323\u0302\u0000\u0045\u0327\u0000\u0045\u0327\u0306\u0000"d~ +"\u0045\u0328\u0000\u0045\u032D\u0000\u0045\u0330\u0000\u0046\u0000\u0046\u0041\u0058\u0000\u0046\u0307\u0000\u0047"d~ +"\u0000\u0047\u0042\u0000\u0047\u0048\u007A\u0000\u0047\u0050\u0061\u0000\u0047\u0079\u0000\u0047\u0301\u0000\u0047"d~ +"\u0302\u0000\u0047\u0304\u0000\u0047\u0306\u0000\u0047\u0307\u0000\u0047\u030C\u0000\u0047\u0327\u0000\u0048\u0000"d~ +"\u0048\u0050\u0000\u0048\u0056\u0000\u0048\u0067\u0000\u0048\u007A\u0000\u0048\u0302\u0000\u0048\u0307\u0000\u0048"d~ +"\u0308\u0000\u0048\u030C\u0000\u0048\u0323\u0000\u0048\u0327\u0000\u0048\u032E\u0000\u0049\u0000\u0049\u0049\u0000"d~ +"\u0049\u0049\u0049\u0000\u0049\u004A\u0000\u0049\u0055\u0000\u0049\u0056\u0000\u0049\u0058\u0000\u0049\u0300\u0000"d~ +"\u0049\u0301\u0000\u0049\u0302\u0000\u0049\u0303\u0000\u0049\u0304\u0000\u0049\u0306\u0000\u0049\u0307\u0000\u0049"d~ +"\u0308\u0000\u0049\u0308\u0301\u0000\u0049\u0309\u0000\u0049\u030C\u0000\u0049\u030F\u0000\u0049\u0311\u0000\u0049"d~ +"\u0323\u0000\u0049\u0328\u0000\u0049\u0330\u0000\u004A\u0000\u004A\u0302\u0000\u004B\u0000\u004B\u0042\u0000\u004B"d~ +"\u004B\u0000\u004B\u004D\u0000\u004B\u0301\u0000\u004B\u030C\u0000\u004B\u0323\u0000\u004B\u0327\u0000\u004B\u0331"d~ +"\u0000\u004C\u0000\u004C\u004A\u0000\u004C\u0054\u0044\u0000\u004C\u006A\u0000\u004C\u00B7\u0000\u004C\u0301\u0000"d~ +"\u004C\u030C\u0000\u004C\u0323\u0000\u004C\u0323\u0304\u0000\u004C\u0327\u0000\u004C\u032D\u0000\u004C\u0331\u0000"d~ +"\u004D\u0000\u004D\u0042\u0000\u004D\u0043\u0000\u004D\u0044\u0000\u004D\u0048\u007A\u0000\u004D\u0050\u0061\u0000"d~ +"\u004D\u0052\u0000\u004D\u0056\u0000\u004D\u0057\u0000\u004D\u0301\u0000\u004D\u0307\u0000\u004D\u0323\u0000\u004D"d~ +"\u03A9\u0000\u004E\u0000\u004E\u004A\u0000\u004E\u006A\u0000\u004E\u006F\u0000\u004E\u0300\u0000\u004E\u0301\u0000"d~ +"\u004E\u0303\u0000\u004E\u0307\u0000\u004E\u030C\u0000\u004E\u0323\u0000\u004E\u0327\u0000\u004E\u032D\u0000\u004E"d~ +"\u0331\u0000\u004F\u0000\u004F\u0300\u0000\u004F\u0301\u0000\u004F\u0302\u0000\u004F\u0302\u0300\u0000\u004F\u0302"d~ +"\u0301\u0000\u004F\u0302\u0303\u0000\u004F\u0302\u0309\u0000\u004F\u0303\u0000\u004F\u0303\u0301\u0000\u004F\u0303"d~ +"\u0304\u0000\u004F\u0303\u0308\u0000\u004F\u0304\u0000\u004F\u0304\u0300\u0000\u004F\u0304\u0301\u0000\u004F\u0306"d~ +"\u0000\u004F\u0307\u0000\u004F\u0307\u0304\u0000\u004F\u0308\u0000\u004F\u0308\u0304\u0000\u004F\u0309\u0000\u004F"d~ +"\u030B\u0000\u004F\u030C\u0000\u004F\u030F\u0000\u004F\u0311\u0000\u004F\u031B\u0000\u004F\u031B\u0300\u0000\u004F"d~ +"\u031B\u0301\u0000\u004F\u031B\u0303\u0000\u004F\u031B\u0309\u0000\u004F\u031B\u0323\u0000\u004F\u0323\u0000\u004F"d~ +"\u0323\u0302\u0000\u004F\u0328\u0000\u004F\u0328\u0304\u0000\u0050\u0000\u0050\u0048\u0000\u0050\u0050\u004D\u0000"d~ +"\u0050\u0050\u0056\u0000\u0050\u0052\u0000\u0050\u0054\u0045\u0000\u0050\u0061\u0000\u0050\u0301\u0000\u0050\u0307"d~ +"\u0000\u0051\u0000\u0052\u0000\u0052\u0073\u0000\u0052\u0301\u0000\u0052\u0307\u0000\u0052\u030C\u0000\u0052\u030F"d~ +"\u0000\u0052\u0311\u0000\u0052\u0323\u0000\u0052\u0323\u0304\u0000\u0052\u0327\u0000\u0052\u0331\u0000\u0053\u0000"d~ +"\u0053\u0044\u0000\u0053\u004D\u0000\u0053\u0053\u0000\u0053\u0076\u0000\u0053\u0301\u0000\u0053\u0301\u0307\u0000"d~ +"\u0053\u0302\u0000\u0053\u0307\u0000\u0053\u030C\u0000\u0053\u030C\u0307\u0000\u0053\u0323\u0000\u0053\u0323\u0307"d~ +"\u0000\u0053\u0326\u0000\u0053\u0327\u0000\u0054\u0000\u0054\u0045\u004C\u0000\u0054\u0048\u007A\u0000\u0054\u004D"d~ +"\u0000\u0054\u0307\u0000\u0054\u030C\u0000\u0054\u0323\u0000\u0054\u0326\u0000\u0054\u0327\u0000\u0054\u032D\u0000"d~ +"\u0054\u0331\u0000\u0055\u0000\u0055\u0300\u0000\u0055\u0301\u0000\u0055\u0302\u0000\u0055\u0303\u0000\u0055\u0303"d~ +"\u0301\u0000\u0055\u0304\u0000\u0055\u0304\u0308\u0000\u0055\u0306\u0000\u0055\u0308\u0000\u0055\u0308\u0300\u0000"d~ +"\u0055\u0308\u0301\u0000\u0055\u0308\u0304\u0000\u0055\u0308\u030C\u0000\u0055\u0309\u0000\u0055\u030A\u0000\u0055"d~ +"\u030B\u0000\u0055\u030C\u0000\u0055\u030F\u0000\u0055\u0311\u0000\u0055\u031B\u0000\u0055\u031B\u0300\u0000\u0055"d~ +"\u031B\u0301\u0000\u0055\u031B\u0303\u0000\u0055\u031B\u0309\u0000\u0055\u031B\u0323\u0000\u0055\u0323\u0000\u0055"d~ +"\u0324\u0000\u0055\u0328\u0000\u0055\u032D\u0000\u0055\u0330\u0000\u0056\u0000\u0056\u0049\u0000\u0056\u0049\u0049"d~ +"\u0000\u0056\u0049\u0049\u0049\u0000\u0056\u0303\u0000\u0056\u0323\u0000\u0056\u2215\u006D\u0000\u0057\u0000\u0057"d~ +"\u0043\u0000\u0057\u005A\u0000\u0057\u0062\u0000\u0057\u0300\u0000\u0057\u0301\u0000\u0057\u0302\u0000\u0057\u0307"d~ +"\u0000\u0057\u0308\u0000\u0057\u0323\u0000\u0058\u0000\u0058\u0049\u0000\u0058\u0049\u0049\u0000\u0058\u0307\u0000"d~ +"\u0058\u0308\u0000\u0059\u0000\u0059\u0300\u0000\u0059\u0301\u0000\u0059\u0302\u0000\u0059\u0303\u0000\u0059\u0304"d~ +"\u0000\u0059\u0307\u0000\u0059\u0308\u0000\u0059\u0309\u0000\u0059\u0323\u0000\u005A\u0000\u005A\u0301\u0000\u005A"d~ +"\u0302\u0000\u005A\u0307\u0000\u005A\u030C\u0000\u005A\u0323\u0000\u005A\u0331\u0000\u005B\u0000\u005C\u0000\u005D"d~ +"\u0000\u005E\u0000\u005F\u0000\u0060\u0000\u0061\u0000\u0061\u002E\u006D\u002E\u0000\u0061\u002F\u0063\u0000\u0061"d~ +"\u002F\u0073\u0000\u0061\u02BE\u0000\u0061\u0300\u0000\u0061\u0301\u0000\u0061\u0302\u0000\u0061\u0302\u0300\u0000"d~ +"\u0061\u0302\u0301\u0000\u0061\u0302\u0303\u0000\u0061\u0302\u0309\u0000\u0061\u0303\u0000\u0061\u0304\u0000\u0061"d~ +"\u0306\u0000\u0061\u0306\u0300\u0000\u0061\u0306\u0301\u0000\u0061\u0306\u0303\u0000\u0061\u0306\u0309\u0000\u0061"d~ +"\u0307\u0000\u0061\u0307\u0304\u0000\u0061\u0308\u0000\u0061\u0308\u0304\u0000\u0061\u0309\u0000\u0061\u030A\u0000"d~ +"\u0061\u030A\u0301\u0000\u0061\u030C\u0000\u0061\u030F\u0000\u0061\u0311\u0000\u0061\u0323\u0000\u0061\u0323\u0302"d~ +"\u0000\u0061\u0323\u0306\u0000\u0061\u0325\u0000\u0061\u0328\u0000\u0062\u0000\u0062\u0061\u0072\u0000\u0062\u0307"d~ +"\u0000\u0062\u0323\u0000\u0062\u0331\u0000\u0063\u0000\u0063\u002F\u006F\u0000\u0063\u002F\u0075\u0000\u0063\u0061"d~ +"\u006C\u0000\u0063\u0063\u0000\u0063\u0064\u0000\u0063\u006D\u0000\u0063\u006D\u0032\u0000\u0063\u006D\u0033\u0000"d~ +"\u0063\u0301\u0000\u0063\u0302\u0000\u0063\u0307\u0000\u0063\u030C\u0000\u0063\u0327\u0000\u0063\u0327\u0301\u0000"d~ +"\u0064\u0000\u0064\u0042\u0000\u0064\u0061\u0000\u0064\u006C\u0000\u0064\u006D\u0000\u0064\u006D\u0032\u0000\u0064"d~ +"\u006D\u0033\u0000\u0064\u007A\u0000\u0064\u007A\u030C\u0000\u0064\u0307\u0000\u0064\u030C\u0000\u0064\u0323\u0000"d~ +"\u0064\u0327\u0000\u0064\u032D\u0000\u0064\u0331\u0000\u0065\u0000\u0065\u0056\u0000\u0065\u0072\u0067\u0000\u0065"d~ +"\u0300\u0000\u0065\u0301\u0000\u0065\u0302\u0000\u0065\u0302\u0300\u0000\u0065\u0302\u0301\u0000\u0065\u0302\u0303"d~ +"\u0000\u0065\u0302\u0309\u0000\u0065\u0303\u0000\u0065\u0304\u0000\u0065\u0304\u0300\u0000\u0065\u0304\u0301\u0000"d~ +"\u0065\u0306\u0000\u0065\u0307\u0000\u0065\u0308\u0000\u0065\u0309\u0000\u0065\u030C\u0000\u0065\u030F\u0000\u0065"d~ +"\u0311\u0000\u0065\u0323\u0000\u0065\u0323\u0302\u0000\u0065\u0327\u0000\u0065\u0327\u0306\u0000\u0065\u0328\u0000"d~ +"\u0065\u032D\u0000\u0065\u0330\u0000\u0066\u0000\u0066\u0066\u0000\u0066\u0066\u0069\u0000\u0066\u0066\u006C\u0000"d~ +"\u0066\u0069\u0000\u0066\u006C\u0000\u0066\u006D\u0000\u0066\u0307\u0000\u0067\u0000\u0067\u0061\u006C\u0000\u0067"d~ +"\u0301\u0000\u0067\u0302\u0000\u0067\u0304\u0000\u0067\u0306\u0000\u0067\u0307\u0000\u0067\u030C\u0000\u0067\u0327"d~ +"\u0000\u0068\u0000\u0068\u0050\u0061\u0000\u0068\u0061\u0000\u0068\u0302\u0000\u0068\u0307\u0000\u0068\u0308\u0000"d~ +"\u0068\u030C\u0000\u0068\u0323\u0000\u0068\u0327\u0000\u0068\u032E\u0000\u0068\u0331\u0000\u0069\u0000\u0069\u0069"d~ +"\u0000\u0069\u0069\u0069\u0000\u0069\u006A\u0000\u0069\u006E\u0000\u0069\u0076\u0000\u0069\u0078\u0000\u0069\u0300"d~ +"\u0000\u0069\u0301\u0000\u0069\u0302\u0000\u0069\u0303\u0000\u0069\u0304\u0000\u0069\u0306\u0000\u0069\u0308\u0000"d~ +"\u0069\u0308\u0301\u0000\u0069\u0309\u0000\u0069\u030C\u0000\u0069\u030F\u0000\u0069\u0311\u0000\u0069\u0323\u0000"d~ +"\u0069\u0328\u0000\u0069\u0330\u0000\u006A\u0000\u006A\u0302\u0000\u006A\u030C\u0000\u006B\u0000\u006B\u0041\u0000"d~ +"\u006B\u0048\u007A\u0000\u006B\u0050\u0061\u0000\u006B\u0056\u0000\u006B\u0057\u0000\u006B\u0063\u0061\u006C\u0000"d~ +"\u006B\u0067\u0000\u006B\u006C\u0000\u006B\u006D\u0000\u006B\u006D\u0032\u0000\u006B\u006D\u0033\u0000\u006B\u0074"d~ +"\u0000\u006B\u0301\u0000\u006B\u030C\u0000\u006B\u0323\u0000\u006B\u0327\u0000\u006B\u0331\u0000\u006B\u03A9\u0000"d~ +"\u006C\u0000\u006C\u006A\u0000\u006C\u006D\u0000\u006C\u006E\u0000\u006C\u006F\u0067\u0000\u006C\u0078\u0000\u006C"d~ +"\u00B7\u0000\u006C\u0301\u0000\u006C\u030C\u0000\u006C\u0323\u0000\u006C\u0323\u0304\u0000\u006C\u0327\u0000\u006C"d~ +"\u032D\u0000\u006C\u0331\u0000\u006D\u0000\u006D\u0032\u0000\u006D\u0033\u0000\u006D\u0041\u0000\u006D\u0056\u0000"d~ +"\u006D\u0057\u0000\u006D\u0062\u0000\u006D\u0067\u0000\u006D\u0069\u006C\u0000\u006D\u006C\u0000\u006D\u006D\u0000"d~ +"\u006D\u006D\u0032\u0000\u006D\u006D\u0033\u0000\u006D\u006F\u006C\u0000\u006D\u0073\u0000\u006D\u0301\u0000\u006D"d~ +"\u0307\u0000\u006D\u0323\u0000\u006D\u2215\u0073\u0000\u006D\u2215\u0073\u0032\u0000\u006E\u0000\u006E\u0041\u0000"d~ +"\u006E\u0046\u0000\u006E\u0056\u0000\u006E\u0057\u0000\u006E\u006A\u0000\u006E\u006D\u0000\u006E\u0073\u0000\u006E"d~ +"\u0300\u0000\u006E\u0301\u0000\u006E\u0303\u0000\u006E\u0307\u0000\u006E\u030C\u0000\u006E\u0323\u0000\u006E\u0327"d~ +"\u0000\u006E\u032D\u0000\u006E\u0331\u0000\u006F\u0000\u006F\u0056\u0000\u006F\u0300\u0000\u006F\u0301\u0000\u006F"d~ +"\u0302\u0000\u006F\u0302\u0300\u0000\u006F\u0302\u0301\u0000\u006F\u0302\u0303\u0000\u006F\u0302\u0309\u0000\u006F"d~ +"\u0303\u0000\u006F\u0303\u0301\u0000\u006F\u0303\u0304\u0000\u006F\u0303\u0308\u0000\u006F\u0304\u0000\u006F\u0304"d~ +"\u0300\u0000\u006F\u0304\u0301\u0000\u006F\u0306\u0000\u006F\u0307\u0000\u006F\u0307\u0304\u0000\u006F\u0308\u0000"d~ +"\u006F\u0308\u0304\u0000\u006F\u0309\u0000\u006F\u030B\u0000\u006F\u030C\u0000\u006F\u030F\u0000\u006F\u0311\u0000"d~ +"\u006F\u031B\u0000\u006F\u031B\u0300\u0000\u006F\u031B\u0301\u0000\u006F\u031B\u0303\u0000\u006F\u031B\u0309\u0000"d~ +"\u006F\u031B\u0323\u0000\u006F\u0323\u0000\u006F\u0323\u0302\u0000\u006F\u0328\u0000\u006F\u0328\u0304\u0000\u0070"d~ +"\u0000\u0070\u002E\u006D\u002E\u0000\u0070\u0041\u0000\u0070\u0046\u0000\u0070\u0056\u0000\u0070\u0057\u0000\u0070"d~ +"\u0063\u0000\u0070\u0073\u0000\u0070\u0301\u0000\u0070\u0307\u0000\u0071\u0000\u0072\u0000\u0072\u0061\u0064\u0000"d~ +"\u0072\u0061\u0064\u2215\u0073\u0000\u0072\u0061\u0064\u2215\u0073\u0032\u0000\u0072\u0301\u0000\u0072\u0307\u0000"d~ +"\u0072\u030C\u0000\u0072\u030F\u0000\u0072\u0311\u0000\u0072\u0323\u0000\u0072\u0323\u0304\u0000\u0072\u0327\u0000"d~ +"\u0072\u0331\u0000\u0073\u0000\u0073\u0072\u0000\u0073\u0074\u0000\u0073\u0301\u0000\u0073\u0301\u0307\u0000\u0073"d~ +"\u0302\u0000\u0073\u0307\u0000\u0073\u030C\u0000\u0073\u030C\u0307\u0000\u0073\u0323\u0000\u0073\u0323\u0307\u0000"d~ +"\u0073\u0326\u0000\u0073\u0327\u0000\u0074\u0000\u0074\u0307\u0000\u0074\u0308\u0000\u0074\u030C\u0000\u0074\u0323"d~ +"\u0000\u0074\u0326\u0000\u0074\u0327\u0000\u0074\u032D\u0000\u0074\u0331\u0000\u0075\u0000\u0075\u0300\u0000\u0075"d~ +"\u0301\u0000\u0075\u0302\u0000\u0075\u0303\u0000\u0075\u0303\u0301\u0000\u0075\u0304\u0000\u0075\u0304\u0308\u0000"d~ +"\u0075\u0306\u0000\u0075\u0308\u0000\u0075\u0308\u0300\u0000\u0075\u0308\u0301\u0000\u0075\u0308\u0304\u0000\u0075"d~ +"\u0308\u030C\u0000\u0075\u0309\u0000\u0075\u030A\u0000\u0075\u030B\u0000\u0075\u030C\u0000\u0075\u030F\u0000\u0075"d~ +"\u0311\u0000\u0075\u031B\u0000\u0075\u031B\u0300\u0000\u0075\u031B\u0301\u0000\u0075\u031B\u0303\u0000\u0075\u031B"d~ +"\u0309\u0000\u0075\u031B\u0323\u0000\u0075\u0323\u0000\u0075\u0324\u0000\u0075\u0328\u0000\u0075\u032D\u0000\u0075"d~ +"\u0330\u0000\u0076\u0000\u0076\u0069\u0000\u0076\u0069\u0069\u0000\u0076\u0069\u0069\u0069\u0000\u0076\u0303\u0000"d~ +"\u0076\u0323\u0000\u0077\u0000\u0077\u0300\u0000\u0077\u0301\u0000\u0077\u0302\u0000\u0077\u0307\u0000\u0077\u0308"d~ +"\u0000\u0077\u030A\u0000\u0077\u0323\u0000\u0078\u0000\u0078\u0069\u0000\u0078\u0069\u0069\u0000\u0078\u0307\u0000"d~ +"\u0078\u0308\u0000\u0079\u0000\u0079\u0300\u0000\u0079\u0301\u0000\u0079\u0302\u0000\u0079\u0303\u0000\u0079\u0304"d~ +"\u0000\u0079\u0307\u0000\u0079\u0308\u0000\u0079\u0309\u0000\u0079\u030A\u0000\u0079\u0323\u0000\u007A\u0000\u007A"d~ +"\u0301\u0000\u007A\u0302\u0000\u007A\u0307\u0000\u007A\u030C\u0000\u007A\u0323\u0000\u007A\u0331\u0000\u007B\u0000"d~ +"\u007C\u0000\u007D\u0000\u007E\u0000\u00A2\u0000\u00A3\u0000\u00A5\u0000\u00A6\u0000\u00AC\u0000\u00B0\u0043\u0000"d~ +"\u00B0\u0046\u0000\u00B7\u0000\u00C6\u0000\u00C6\u0301\u0000\u00C6\u0304\u0000\u00D8\u0301\u0000\u00E6\u0000\u00E6"d~ +"\u0301\u0000\u00E6\u0304\u0000\u00F0\u0000\u00F8\u0000\u00F8\u0301\u0000\u0126\u0000\u0127\u0000\u0131\u0000\u014B"d~ +"\u0000\u0153\u0000\u018E\u0000\u0190\u0000\u01AB\u0000\u01B7\u030C\u0000\u01C0\u0000\u01C1\u0000\u01C2\u0000\u0222"d~ +"\u0000\u0237\u0000\u0250\u0000\u0251\u0000\u0252\u0000\u0253\u0000\u0254\u0000\u0255\u0000\u0256\u0000\u0257\u0000"d~ +"\u0258\u0000\u0259\u0000\u025B\u0000\u025C\u0000\u025E\u0000\u025F\u0000\u0260\u0000\u0261\u0000\u0262\u0000\u0263"d~ +"\u0000\u0264\u0000\u0265\u0000\u0266\u0000\u0267\u0000\u0268\u0000\u0269\u0000\u026A\u0000\u026B\u0000\u026C\u0000"d~ +"\u026D\u0000\u026E\u0000\u026F\u0000\u0270\u0000\u0271\u0000\u0272\u0000\u0273\u0000\u0274\u0000\u0275\u0000\u0276"d~ +"\u0000\u0277\u0000\u0278\u0000\u0279\u0000\u027A\u0000\u027B\u0000\u027D\u0000\u027E\u0000\u0280\u0000\u0281\u0000"d~ +"\u0282\u0000\u0283\u0000\u0284\u0000\u0288\u0000\u0289\u0000\u028A\u0000\u028B\u0000\u028C\u0000\u028D\u0000\u028E"d~ +"\u0000\u028F\u0000\u0290\u0000\u0291\u0000\u0292\u0000\u0292\u030C\u0000\u0295\u0000\u0298\u0000\u0299\u0000\u029B"d~ +"\u0000\u029C\u0000\u029D\u0000\u029F\u0000\u02A1\u0000\u02A2\u0000\u02A3\u0000\u02A4\u0000\u02A5\u0000\u02A6\u0000"d~ +"\u02A7\u0000\u02A8\u0000\u02A9\u0000\u02AA\u0000\u02AB\u0000\u02B9\u0000\u02BC\u006E\u0000\u02D0\u0000\u02D1\u0000"d~ +"\u0300\u0000\u0301\u0000\u0308\u0301\u0000\u0313\u0000\u0391\u0000\u0391\u0300\u0000\u0391\u0301\u0000\u0391\u0304"d~ +"\u0000\u0391\u0306\u0000\u0391\u0313\u0000\u0391\u0313\u0300\u0000\u0391\u0313\u0300\u0345\u0000\u0391\u0313\u0301"d~ +"\u0000\u0391\u0313\u0301\u0345\u0000\u0391\u0313\u0342\u0000\u0391\u0313\u0342\u0345\u0000\u0391\u0313\u0345\u0000"d~ +"\u0391\u0314\u0000\u0391\u0314\u0300\u0000\u0391\u0314\u0300\u0345\u0000\u0391\u0314\u0301\u0000\u0391\u0314\u0301"d~ +"\u0345\u0000\u0391\u0314\u0342\u0000\u0391\u0314\u0342\u0345\u0000\u0391\u0314\u0345\u0000\u0391\u0345\u0000\u0392"d~ +"\u0000\u0393\u0000\u0394\u0000\u0395\u0000\u0395\u0300\u0000\u0395\u0301\u0000\u0395\u0313\u0000\u0395\u0313\u0300"d~ +"\u0000\u0395\u0313\u0301\u0000\u0395\u0314\u0000\u0395\u0314\u0300\u0000\u0395\u0314\u0301\u0000\u0396\u0000\u0397"d~ +"\u0000\u0397\u0300\u0000\u0397\u0301\u0000\u0397\u0313\u0000\u0397\u0313\u0300\u0000\u0397\u0313\u0300\u0345\u0000"d~ +"\u0397\u0313\u0301\u0000\u0397\u0313\u0301\u0345\u0000\u0397\u0313\u0342\u0000\u0397\u0313\u0342\u0345\u0000\u0397"d~ +"\u0313\u0345\u0000\u0397\u0314\u0000\u0397\u0314\u0300\u0000\u0397\u0314\u0300\u0345\u0000\u0397\u0314\u0301\u0000"d~ +"\u0397\u0314\u0301\u0345\u0000\u0397\u0314\u0342\u0000\u0397\u0314\u0342\u0345\u0000\u0397\u0314\u0345\u0000\u0397"d~ +"\u0345\u0000\u0398\u0000\u0399\u0000\u0399\u0300\u0000\u0399\u0301\u0000\u0399\u0304\u0000\u0399\u0306\u0000\u0399"d~ +"\u0308\u0000\u0399\u0313\u0000\u0399\u0313\u0300\u0000\u0399\u0313\u0301\u0000\u0399\u0313\u0342\u0000\u0399\u0314"d~ +"\u0000\u0399\u0314\u0300\u0000\u0399\u0314\u0301\u0000\u0399\u0314\u0342\u0000\u039A\u0000\u039B\u0000\u039C\u0000"d~ +"\u039D\u0000\u039E\u0000\u039F\u0000\u039F\u0300\u0000\u039F\u0301\u0000\u039F\u0313\u0000\u039F\u0313\u0300\u0000"d~ +"\u039F\u0313\u0301\u0000\u039F\u0314\u0000\u039F\u0314\u0300\u0000\u039F\u0314\u0301\u0000\u03A0\u0000\u03A1\u0000"d~ +"\u03A1\u0314\u0000\u03A3\u0000\u03A4\u0000\u03A5\u0000\u03A5\u0300\u0000\u03A5\u0301\u0000\u03A5\u0304\u0000\u03A5"d~ +"\u0306\u0000\u03A5\u0308\u0000\u03A5\u0314\u0000\u03A5\u0314\u0300\u0000\u03A5\u0314\u0301\u0000\u03A5\u0314\u0342"d~ +"\u0000\u03A6\u0000\u03A7\u0000\u03A8\u0000\u03A9\u0000\u03A9\u0300\u0000\u03A9\u0301\u0000\u03A9\u0313\u0000\u03A9"d~ +"\u0313\u0300\u0000\u03A9\u0313\u0300\u0345\u0000\u03A9\u0313\u0301\u0000\u03A9\u0313\u0301\u0345\u0000\u03A9\u0313"d~ +"\u0342\u0000\u03A9\u0313\u0342\u0345\u0000\u03A9\u0313\u0345\u0000\u03A9\u0314\u0000\u03A9\u0314\u0300\u0000\u03A9"d~ +"\u0314\u0300\u0345\u0000\u03A9\u0314\u0301\u0000\u03A9\u0314\u0301\u0345\u0000\u03A9\u0314\u0342\u0000\u03A9\u0314"d~ +"\u0342\u0345\u0000\u03A9\u0314\u0345\u0000\u03A9\u0345\u0000\u03B1\u0000\u03B1\u0300\u0000\u03B1\u0300\u0345\u0000"d~ +"\u03B1\u0301\u0000\u03B1\u0301\u0345\u0000\u03B1\u0304\u0000\u03B1\u0306\u0000\u03B1\u0313\u0000\u03B1\u0313\u0300"d~ +"\u0000\u03B1\u0313\u0300\u0345\u0000\u03B1\u0313\u0301\u0000\u03B1\u0313\u0301\u0345\u0000\u03B1\u0313\u0342\u0000"d~ +"\u03B1\u0313\u0342\u0345\u0000\u03B1\u0313\u0345\u0000\u03B1\u0314\u0000\u03B1\u0314\u0300\u0000\u03B1\u0314\u0300"d~ +"\u0345\u0000\u03B1\u0314\u0301\u0000\u03B1\u0314\u0301\u0345\u0000\u03B1\u0314\u0342\u0000\u03B1\u0314\u0342\u0345"d~ +"\u0000\u03B1\u0314\u0345\u0000\u03B1\u0342\u0000\u03B1\u0342\u0345\u0000\u03B1\u0345\u0000\u03B2\u0000\u03B3\u0000"d~ +"\u03B4\u0000\u03B5\u0000\u03B5\u0300\u0000\u03B5\u0301\u0000\u03B5\u0313\u0000\u03B5\u0313\u0300\u0000\u03B5\u0313"d~ +"\u0301\u0000\u03B5\u0314\u0000\u03B5\u0314\u0300\u0000\u03B5\u0314\u0301\u0000\u03B6\u0000\u03B7\u0000\u03B7\u0300"d~ +"\u0000\u03B7\u0300\u0345\u0000\u03B7\u0301\u0000\u03B7\u0301\u0345\u0000\u03B7\u0313\u0000\u03B7\u0313\u0300\u0000"d~ +"\u03B7\u0313\u0300\u0345\u0000\u03B7\u0313\u0301\u0000\u03B7\u0313\u0301\u0345\u0000\u03B7\u0313\u0342\u0000\u03B7"d~ +"\u0313\u0342\u0345\u0000\u03B7\u0313\u0345\u0000\u03B7\u0314\u0000\u03B7\u0314\u0300\u0000\u03B7\u0314\u0300\u0345"d~ +"\u0000\u03B7\u0314\u0301\u0000\u03B7\u0314\u0301\u0345\u0000\u03B7\u0314\u0342\u0000\u03B7\u0314\u0342\u0345\u0000"d~ +"\u03B7\u0314\u0345\u0000\u03B7\u0342\u0000\u03B7\u0342\u0345\u0000\u03B7\u0345\u0000\u03B8\u0000\u03B9\u0000\u03B9"d~ +"\u0300\u0000\u03B9\u0301\u0000\u03B9\u0304\u0000\u03B9\u0306\u0000\u03B9\u0308\u0000\u03B9\u0308\u0300\u0000\u03B9"d~ +"\u0308\u0301\u0000\u03B9\u0308\u0342\u0000\u03B9\u0313\u0000\u03B9\u0313\u0300\u0000\u03B9\u0313\u0301\u0000\u03B9"d~ +"\u0313\u0342\u0000\u03B9\u0314\u0000\u03B9\u0314\u0300\u0000\u03B9\u0314\u0301\u0000\u03B9\u0314\u0342\u0000\u03B9"d~ +"\u0342\u0000\u03BA\u0000\u03BB\u0000\u03BC\u0000\u03BC\u0041\u0000\u03BC\u0046\u0000\u03BC\u0056\u0000\u03BC\u0057"d~ +"\u0000\u03BC\u0067\u0000\u03BC\u006C\u0000\u03BC\u006D\u0000\u03BC\u0073\u0000\u03BD\u0000\u03BE\u0000\u03BF\u0000"d~ +"\u03BF\u0300\u0000\u03BF\u0301\u0000\u03BF\u0313\u0000\u03BF\u0313\u0300\u0000\u03BF\u0313\u0301\u0000\u03BF\u0314"d~ +"\u0000\u03BF\u0314\u0300\u0000\u03BF\u0314\u0301\u0000\u03C0\u0000\u03C1\u0000\u03C1\u0313\u0000\u03C1\u0314\u0000"d~ +"\u03C2\u0000\u03C3\u0000\u03C4\u0000\u03C5\u0000\u03C5\u0300\u0000\u03C5\u0301\u0000\u03C5\u0304\u0000\u03C5\u0306"d~ +"\u0000\u03C5\u0308\u0000\u03C5\u0308\u0300\u0000\u03C5\u0308\u0301\u0000\u03C5\u0308\u0342\u0000\u03C5\u0313\u0000"d~ +"\u03C5\u0313\u0300\u0000\u03C5\u0313\u0301\u0000\u03C5\u0313\u0342\u0000\u03C5\u0314\u0000\u03C5\u0314\u0300\u0000"d~ +"\u03C5\u0314\u0301\u0000\u03C5\u0314\u0342\u0000\u03C5\u0342\u0000\u03C6\u0000\u03C7\u0000\u03C8\u0000\u03C9\u0000"d~ +"\u03C9\u0300\u0000\u03C9\u0300\u0345\u0000\u03C9\u0301\u0000\u03C9\u0301\u0345\u0000\u03C9\u0313\u0000\u03C9\u0313"d~ +"\u0300\u0000\u03C9\u0313\u0300\u0345\u0000\u03C9\u0313\u0301\u0000\u03C9\u0313\u0301\u0345\u0000\u03C9\u0313\u0342"d~ +"\u0000\u03C9\u0313\u0342\u0345\u0000\u03C9\u0313\u0345\u0000\u03C9\u0314\u0000\u03C9\u0314\u0300\u0000\u03C9\u0314"d~ +"\u0300\u0345\u0000\u03C9\u0314\u0301\u0000\u03C9\u0314\u0301\u0345\u0000\u03C9\u0314\u0342\u0000\u03C9\u0314\u0342"d~ +"\u0345\u0000\u03C9\u0314\u0345\u0000\u03C9\u0342\u0000\u03C9\u0342\u0345\u0000\u03C9\u0345\u0000\u03DC\u0000\u03DD"d~ +"\u0000\u0406\u0308\u0000\u0410\u0306\u0000\u0410\u0308\u0000\u0413\u0301\u0000\u0415\u0300\u0000\u0415\u0306\u0000"d~ +"\u0415\u0308\u0000\u0416\u0306\u0000\u0416\u0308\u0000\u0417\u0308\u0000\u0418\u0300\u0000\u0418\u0304\u0000\u0418"d~ +"\u0306\u0000\u0418\u0308\u0000\u041A\u0301\u0000\u041E\u0308\u0000\u0423\u0304\u0000\u0423\u0306\u0000\u0423\u0308"d~ +"\u0000\u0423\u030B\u0000\u0427\u0308\u0000\u042B\u0308\u0000\u042D\u0308\u0000\u0430\u0000\u0430\u0306\u0000\u0430"d~ +"\u0308\u0000\u0431\u0000\u0432\u0000\u0433\u0000\u0433\u0301\u0000\u0434\u0000\u0435\u0000\u0435\u0300\u0000\u0435"d~ +"\u0306\u0000\u0435\u0308\u0000\u0436\u0000\u0436\u0306\u0000\u0436\u0308\u0000\u0437\u0000\u0437\u0308\u0000\u0438"d~ +"\u0000\u0438\u0300\u0000\u0438\u0304\u0000\u0438\u0306\u0000\u0438\u0308\u0000\u043A\u0000\u043A\u0301\u0000\u043B"d~ +"\u0000\u043C\u0000\u043D\u0000\u043E\u0000\u043E\u0308\u0000\u043F\u0000\u0440\u0000\u0441\u0000\u0442\u0000\u0443"d~ +"\u0000\u0443\u0304\u0000\u0443\u0306\u0000\u0443\u0308\u0000\u0443\u030B\u0000\u0444\u0000\u0445\u0000\u0446\u0000"d~ +"\u0447\u0000\u0447\u0308\u0000\u0448\u0000\u044A\u0000\u044B\u0000\u044B\u0308\u0000\u044C\u0000\u044D\u0000\u044D"d~ +"\u0308\u0000\u044E\u0000\u0455\u0000\u0456\u0000\u0456\u0308\u0000\u0458\u0000\u045F\u0000\u0474\u030F\u0000\u0475"d~ +"\u030F\u0000\u0491\u0000\u04AB\u0000\u04AF\u0000\u04B1\u0000\u04CF\u0000\u04D8\u0308\u0000\u04D9\u0000\u04D9\u0308"d~ +"\u0000\u04E8\u0308\u0000\u04E9\u0000\u04E9\u0308\u0000\u0565\u0582\u0000\u0574\u0565\u0000\u0574\u056B\u0000\u0574"d~ +"\u056D\u0000\u0574\u0576\u0000\u057E\u0576\u0000\u05D0\u0000\u05D0\u05B7\u0000\u05D0\u05B8\u0000\u05D0\u05BC\u0000"d~ +"\u05D0\u05DC\u0000\u05D1\u0000\u05D1\u05BC\u0000\u05D1\u05BF\u0000\u05D2\u0000\u05D2\u05BC\u0000\u05D3\u0000\u05D3"d~ +"\u05BC\u0000\u05D4\u0000\u05D4\u05BC\u0000\u05D5\u05B9\u0000\u05D5\u05BC\u0000\u05D6\u05BC\u0000\u05D8\u05BC\u0000"d~ +"\u05D9\u05B4\u0000\u05D9\u05BC\u0000\u05DA\u05BC\u0000\u05DB\u0000\u05DB\u05BC\u0000\u05DB\u05BF\u0000\u05DC\u0000"d~ +"\u05DC\u05BC\u0000\u05DD\u0000\u05DE\u05BC\u0000\u05E0\u05BC\u0000\u05E1\u05BC\u0000\u05E2\u0000\u05E3\u05BC\u0000"d~ +"\u05E4\u05BC\u0000\u05E4\u05BF\u0000\u05E6\u05BC\u0000\u05E7\u05BC\u0000\u05E8\u0000\u05E8\u05BC\u0000\u05E9\u05BC"d~ +"\u0000\u05E9\u05BC\u05C1\u0000\u05E9\u05BC\u05C2\u0000\u05E9\u05C1\u0000\u05E9\u05C2\u0000\u05EA\u0000\u05EA\u05BC"d~ +"\u0000\u05F2\u05B7\u0000\u0621\u0000\u0627\u0000\u0627\u0643\u0628\u0631\u0000\u0627\u0644\u0644\u0647\u0000\u0627"d~ +"\u064B\u0000\u0627\u0653\u0000\u0627\u0654\u0000\u0627\u0655\u0000\u0627\u0674\u0000\u0628\u0000\u0628\u062C\u0000"d~ +"\u0628\u062D\u0000\u0628\u062D\u064A\u0000\u0628\u062E\u0000\u0628\u062E\u064A\u0000\u0628\u0631\u0000\u0628\u0632"d~ +"\u0000\u0628\u0645\u0000\u0628\u0646\u0000\u0628\u0647\u0000\u0628\u0649\u0000\u0628\u064A\u0000\u0629\u0000\u062A"d~ +"\u0000\u062A\u062C\u0000\u062A\u062C\u0645\u0000\u062A\u062C\u0649\u0000\u062A\u062C\u064A\u0000\u062A\u062D\u0000"d~ +"\u062A\u062D\u062C\u0000\u062A\u062D\u0645\u0000\u062A\u062E\u0000\u062A\u062E\u0645\u0000\u062A\u062E\u0649\u0000"d~ +"\u062A\u062E\u064A\u0000\u062A\u0631\u0000\u062A\u0632\u0000\u062A\u0645\u0000\u062A\u0645\u062C\u0000\u062A\u0645"d~ +"\u062D\u0000\u062A\u0645\u062E\u0000\u062A\u0645\u0649\u0000\u062A\u0645\u064A\u0000\u062A\u0646\u0000\u062A\u0647"d~ +"\u0000\u062A\u0649\u0000\u062A\u064A\u0000\u062B\u0000\u062B\u062C\u0000\u062B\u0631\u0000\u062B\u0632\u0000\u062B"d~ +"\u0645\u0000\u062B\u0646\u0000\u062B\u0647\u0000\u062B\u0649\u0000\u062B\u064A\u0000\u062C\u0000\u062C\u062D\u0000"d~ +"\u062C\u062D\u0649\u0000\u062C\u062D\u064A\u0000\u062C\u0644\u0020\u062C\u0644\u0627\u0644\u0647\u0000\u062C\u0645"d~ +"\u0000\u062C\u0645\u062D\u0000\u062C\u0645\u0649\u0000\u062C\u0645\u064A\u0000\u062C\u0649\u0000\u062C\u064A\u0000"d~ +"\u062D\u0000\u062D\u062C\u0000\u062D\u062C\u064A\u0000\u062D\u0645\u0000\u062D\u0645\u0649\u0000\u062D\u0645\u064A"d~ +"\u0000\u062D\u0649\u0000\u062D\u064A\u0000\u062E\u0000\u062E\u062C\u0000\u062E\u062D\u0000\u062E\u0645\u0000\u062E"d~ +"\u0649\u0000\u062E\u064A\u0000\u062F\u0000\u0630\u0000\u0630\u0670\u0000\u0631\u0000\u0631\u0633\u0648\u0644\u0000"d~ +"\u0631\u0670\u0000\u0631\u06CC\u0627\u0644\u0000\u0632\u0000\u0633\u0000\u0633\u062C\u0000\u0633\u062C\u062D\u0000"d~ +"\u0633\u062C\u0649\u0000\u0633\u062D\u0000\u0633\u062D\u062C\u0000\u0633\u062E\u0000\u0633\u062E\u0649\u0000\u0633"d~ +"\u062E\u064A\u0000\u0633\u0631\u0000\u0633\u0645\u0000\u0633\u0645\u062C\u0000\u0633\u0645\u062D\u0000\u0633\u0645"d~ +"\u0645\u0000\u0633\u0647\u0000\u0633\u0649\u0000\u0633\u064A\u0000\u0634\u0000\u0634\u062C\u0000\u0634\u062C\u064A"d~ +"\u0000\u0634\u062D\u0000\u0634\u062D\u0645\u0000\u0634\u062D\u064A\u0000\u0634\u062E\u0000\u0634\u0631\u0000\u0634"d~ +"\u0645\u0000\u0634\u0645\u062E\u0000\u0634\u0645\u0645\u0000\u0634\u0647\u0000\u0634\u0649\u0000\u0634\u064A\u0000"d~ +"\u0635\u0000\u0635\u062D\u0000\u0635\u062D\u062D\u0000\u0635\u062D\u064A\u0000\u0635\u062E\u0000\u0635\u0631\u0000"d~ +"\u0635\u0644\u0639\u0645\u0000\u0635\u0644\u0649\u0000\u0635\u0644\u0649\u0020\u0627\u0644\u0644\u0647\u0020\u0639"d~ +"\u0644\u064A\u0647\u0020\u0648\u0633\u0644\u0645\u0000\u0635\u0644\u06D2\u0000\u0635\u0645\u0000\u0635\u0645\u0645"d~ +"\u0000\u0635\u0649\u0000\u0635\u064A\u0000\u0636\u0000\u0636\u062C\u0000\u0636\u062D\u0000\u0636\u062D\u0649\u0000"d~ +"\u0636\u062D\u064A\u0000\u0636\u062E\u0000\u0636\u062E\u0645\u0000\u0636\u0631\u0000\u0636\u0645\u0000\u0636\u0649"d~ +"\u0000\u0636\u064A\u0000\u0637\u0000\u0637\u062D\u0000\u0637\u0645\u0000\u0637\u0645\u062D\u0000\u0637\u0645\u0645"d~ +"\u0000\u0637\u0645\u064A\u0000\u0637\u0649\u0000\u0637\u064A\u0000\u0638\u0000\u0638\u0645\u0000\u0639\u0000\u0639"d~ +"\u062C\u0000\u0639\u062C\u0645\u0000\u0639\u0644\u064A\u0647\u0000\u0639\u0645\u0000\u0639\u0645\u0645\u0000\u0639"d~ +"\u0645\u0649\u0000\u0639\u0645\u064A\u0000\u0639\u0649\u0000\u0639\u064A\u0000\u063A\u0000\u063A\u062C\u0000\u063A"d~ +"\u0645\u0000\u063A\u0645\u0645\u0000\u063A\u0645\u0649\u0000\u063A\u0645\u064A\u0000\u063A\u0649\u0000\u063A\u064A"d~ +"\u0000\u0640\u064B\u0000\u0640\u064E\u0000\u0640\u064E\u0651\u0000\u0640\u064F\u0000\u0640\u064F\u0651\u0000\u0640"d~ +"\u0650\u0000\u0640\u0650\u0651\u0000\u0640\u0651\u0000\u0640\u0652\u0000\u0641\u0000\u0641\u062C\u0000\u0641\u062D"d~ +"\u0000\u0641\u062E\u0000\u0641\u062E\u0645\u0000\u0641\u0645\u0000\u0641\u0645\u064A\u0000\u0641\u0649\u0000\u0641"d~ +"\u064A\u0000\u0642\u0000\u0642\u062D\u0000\u0642\u0644\u06D2\u0000\u0642\u0645\u0000\u0642\u0645\u062D\u0000\u0642"d~ +"\u0645\u0645\u0000\u0642\u0645\u064A\u0000\u0642\u0649\u0000\u0642\u064A\u0000\u0643\u0000\u0643\u0627\u0000\u0643"d~ +"\u062C\u0000\u0643\u062D\u0000\u0643\u062E\u0000\u0643\u0644\u0000\u0643\u0645\u0000\u0643\u0645\u0645\u0000\u0643"d~ +"\u0645\u064A\u0000\u0643\u0649\u0000\u0643\u064A\u0000\u0644\u0000\u0644\u0627\u0000\u0644\u0627\u0653\u0000\u0644"d~ +"\u0627\u0654\u0000\u0644\u0627\u0655\u0000\u0644\u062C\u0000\u0644\u062C\u062C\u0000\u0644\u062C\u0645\u0000\u0644"d~ +"\u062C\u064A\u0000\u0644\u062D\u0000\u0644\u062D\u0645\u0000\u0644\u062D\u0649\u0000\u0644\u062D\u064A\u0000\u0644"d~ +"\u062E\u0000\u0644\u062E\u0645\u0000\u0644\u0645\u0000\u0644\u0645\u062D\u0000\u0644\u0645\u064A\u0000\u0644\u0647"d~ +"\u0000\u0644\u0649\u0000\u0644\u064A\u0000\u0645\u0000\u0645\u0627\u0000\u0645\u062C\u0000\u0645\u062C\u062D\u0000"d~ +"\u0645\u062C\u062E\u0000\u0645\u062C\u0645\u0000\u0645\u062C\u064A\u0000\u0645\u062D\u0000\u0645\u062D\u062C\u0000"d~ +"\u0645\u062D\u0645\u0000\u0645\u062D\u0645\u062F\u0000\u0645\u062D\u064A\u0000\u0645\u062E\u0000\u0645\u062E\u062C"d~ +"\u0000\u0645\u062E\u0645\u0000\u0645\u062E\u064A\u0000\u0645\u0645\u0000\u0645\u0645\u064A\u0000\u0645\u0649\u0000"d~ +"\u0645\u064A\u0000\u0646\u0000\u0646\u062C\u0000\u0646\u062C\u062D\u0000\u0646\u062C\u0645\u0000\u0646\u062C\u0649"d~ +"\u0000\u0646\u062C\u064A\u0000\u0646\u062D\u0000\u0646\u062D\u0645\u0000\u0646\u062D\u0649\u0000\u0646\u062D\u064A"d~ +"\u0000\u0646\u062E\u0000\u0646\u0631\u0000\u0646\u0632\u0000\u0646\u0645\u0000\u0646\u0645\u0649\u0000\u0646\u0645"d~ +"\u064A\u0000\u0646\u0646\u0000\u0646\u0647\u0000\u0646\u0649\u0000\u0646\u064A\u0000\u0647\u0000\u0647\u062C\u0000"d~ +"\u0647\u0645\u0000\u0647\u0645\u062C\u0000\u0647\u0645\u0645\u0000\u0647\u0649\u0000\u0647\u064A\u0000\u0647\u0670"d~ +"\u0000\u0648\u0000\u0648\u0633\u0644\u0645\u0000\u0648\u0654\u0000\u0648\u0674\u0000\u0649\u0000\u0649\u0670\u0000"d~ +"\u064A\u0000\u064A\u062C\u0000\u064A\u062C\u064A\u0000\u064A\u062D\u0000\u064A\u062D\u064A\u0000\u064A\u062E\u0000"d~ +"\u064A\u0631\u0000\u064A\u0632\u0000\u064A\u0645\u0000\u064A\u0645\u0645\u0000\u064A\u0645\u064A\u0000\u064A\u0646"d~ +"\u0000\u064A\u0647\u0000\u064A\u0649\u0000\u064A\u064A\u0000\u064A\u0654\u0000\u064A\u0654\u0627\u0000\u064A\u0654"d~ +"\u062C\u0000\u064A\u0654\u062D\u0000\u064A\u0654\u062E\u0000\u064A\u0654\u0631\u0000\u064A\u0654\u0632\u0000\u064A"d~ +"\u0654\u0645\u0000\u064A\u0654\u0646\u0000\u064A\u0654\u0647\u0000\u064A\u0654\u0648\u0000\u064A\u0654\u0649\u0000"d~ +"\u064A\u0654\u064A\u0000\u064A\u0654\u06C6\u0000\u064A\u0654\u06C7\u0000\u064A\u0654\u06C8\u0000\u064A\u0654\u06D0"d~ +"\u0000\u064A\u0654\u06D5\u0000\u064A\u0674\u0000\u066E\u0000\u066F\u0000\u0671\u0000\u0679\u0000\u067A\u0000\u067B"d~ +"\u0000\u067E\u0000\u067F\u0000\u0680\u0000\u0683\u0000\u0684\u0000\u0686\u0000\u0687\u0000\u0688\u0000\u068C\u0000"d~ +"\u068D\u0000\u068E\u0000\u0691\u0000\u0698\u0000\u06A1\u0000\u06A4\u0000\u06A6\u0000\u06A9\u0000\u06AD\u0000\u06AF"d~ +"\u0000\u06B1\u0000\u06B3\u0000\u06BA\u0000\u06BB\u0000\u06BE\u0000\u06C1\u0000\u06C1\u0654\u0000\u06C5\u0000\u06C6"d~ +"\u0000\u06C7\u0000\u06C7\u0674\u0000\u06C8\u0000\u06C9\u0000\u06CB\u0000\u06CC\u0000\u06D0\u0000\u06D2\u0000\u06D2"d~ +"\u0654\u0000\u06D5\u0654\u0000\u0915\u093C\u0000\u0916\u093C\u0000\u0917\u093C\u0000\u091C\u093C\u0000\u0921\u093C"d~ +"\u0000\u0922\u093C\u0000\u0928\u093C\u0000\u092B\u093C\u0000\u092F\u093C\u0000\u0930\u093C\u0000\u0933\u093C\u0000"d~ +"\u09A1\u09BC\u0000\u09A2\u09BC\u0000\u09AF\u09BC\u0000\u09C7\u09BE\u0000\u09C7\u09D7\u0000\u0A16\u0A3C\u0000\u0A17"d~ +"\u0A3C\u0000\u0A1C\u0A3C\u0000\u0A2B\u0A3C\u0000\u0A32\u0A3C\u0000\u0A38\u0A3C\u0000\u0B21\u0B3C\u0000\u0B22\u0B3C"d~ +"\u0000\u0B47\u0B3E\u0000\u0B47\u0B56\u0000\u0B47\u0B57\u0000\u0B92\u0BD7\u0000\u0BC6\u0BBE\u0000\u0BC6\u0BD7\u0000"d~ +"\u0BC7\u0BBE\u0000\u0C46\u0C56\u0000\u0CBF\u0CD5\u0000\u0CC6\u0CC2\u0000\u0CC6\u0CC2\u0CD5\u0000\u0CC6\u0CD5\u0000"d~ +"\u0CC6\u0CD6\u0000\u0D46\u0D3E\u0000\u0D46\u0D57\u0000\u0D47\u0D3E\u0000\u0DD9\u0DCA\u0000\u0DD9\u0DCF\u0000\u0DD9"d~ +"\u0DCF\u0DCA\u0000\u0DD9\u0DDF\u0000\u0E4D\u0E32\u0000\u0EAB\u0E99\u0000\u0EAB\u0EA1\u0000\u0ECD\u0EB2\u0000\u0F0B"d~ +"\u0000\u0F40\u0FB5\u0000\u0F42\u0FB7\u0000\u0F4C\u0FB7\u0000\u0F51\u0FB7\u0000\u0F56\u0FB7\u0000\u0F5B\u0FB7\u0000"d~ +"\u0F71\u0F72\u0000\u0F71\u0F74\u0000\u0F71\u0F80\u0000\u0F90\u0FB5\u0000\u0F92\u0FB7\u0000\u0F9C\u0FB7\u0000\u0FA1"d~ +"\u0FB7\u0000\u0FA6\u0FB7\u0000\u0FAB\u0FB7\u0000\u0FB2\u0F71\u0F80\u0000\u0FB2\u0F80\u0000\u0FB3\u0F71\u0F80\u0000"d~ +"\u0FB3\u0F80\u0000\u1025\u102E\u0000\u10DC\u0000\u1100\u0000\u1100\u1161\u0000\u1101\u0000\u1102\u0000\u1102\u1161"d~ +"\u0000\u1103\u0000\u1103\u1161\u0000\u1104\u0000\u1105\u0000\u1105\u1161\u0000\u1106\u0000\u1106\u1161\u0000\u1107"d~ +"\u0000\u1107\u1161\u0000\u1108\u0000\u1109\u0000\u1109\u1161\u0000\u110A\u0000\u110B\u0000\u110B\u1161\u0000\u110B"d~ +"\u116E\u0000\u110C\u0000\u110C\u1161\u0000\u110C\u116E\u110B\u1174\u0000\u110D\u0000\u110E\u0000\u110E\u1161\u0000"d~ +"\u110E\u1161\u11B7\u1100\u1169\u0000\u110F\u0000\u110F\u1161\u0000\u1110\u0000\u1110\u1161\u0000\u1111\u0000\u1111"d~ +"\u1161\u0000\u1112\u0000\u1112\u1161\u0000\u1114\u0000\u1115\u0000\u111A\u0000\u111C\u0000\u111D\u0000\u111E\u0000"d~ +"\u1120\u0000\u1121\u0000\u1122\u0000\u1123\u0000\u1127\u0000\u1129\u0000\u112B\u0000\u112C\u0000\u112D\u0000\u112E"d~ +"\u0000\u112F\u0000\u1132\u0000\u1136\u0000\u1140\u0000\u1147\u0000\u114C\u0000\u1157\u0000\u1158\u0000\u1159\u0000"d~ +"\u1160\u0000\u1161\u0000\u1162\u0000\u1163\u0000\u1164\u0000\u1165\u0000\u1166\u0000\u1167\u0000\u1168\u0000\u1169"d~ +"\u0000\u116A\u0000\u116B\u0000\u116C\u0000\u116D\u0000\u116E\u0000\u116F\u0000\u1170\u0000\u1171\u0000\u1172\u0000"d~ +"\u1173\u0000\u1174\u0000\u1175\u0000\u1184\u0000\u1185\u0000\u1188\u0000\u1191\u0000\u1192\u0000\u1194\u0000\u119E"d~ +"\u0000\u11A1\u0000\u11AA\u0000\u11AC\u0000\u11AD\u0000\u11B0\u0000\u11B1\u0000\u11B2\u0000\u11B3\u0000\u11B4\u0000"d~ +"\u11B5\u0000\u11C7\u0000\u11C8\u0000\u11CC\u0000\u11CE\u0000\u11D3\u0000\u11D7\u0000\u11D9\u0000\u11DD\u0000\u11DF"d~ +"\u0000\u11F1\u0000\u11F2\u0000\u1B05\u1B35\u0000\u1B07\u1B35\u0000\u1B09\u1B35\u0000\u1B0B\u1B35\u0000\u1B0D\u1B35"d~ +"\u0000\u1B11\u1B35\u0000\u1B3A\u1B35\u0000\u1B3C\u1B35\u0000\u1B3E\u1B35\u0000\u1B3F\u1B35\u0000\u1B42\u1B35\u0000"d~ +"\u1D02\u0000\u1D16\u0000\u1D17\u0000\u1D1C\u0000\u1D1D\u0000\u1D25\u0000\u1D7B\u0000\u1D85\u0000\u1D91\u0000\u2010"d~ +"\u0000\u2013\u0000\u2014\u0000\u2032\u2032\u0000\u2032\u2032\u2032\u0000\u2032\u2032\u2032\u2032\u0000\u2035\u2035"d~ +"\u0000\u2035\u2035\u2035\u0000\u20A9\u0000\u2190\u0000\u2190\u0338\u0000\u2191\u0000\u2192\u0000\u2192\u0338\u0000"d~ +"\u2193\u0000\u2194\u0338\u0000\u21D0\u0338\u0000\u21D2\u0338\u0000\u21D4\u0338\u0000\u2202\u0000\u2203\u0338\u0000"d~ +"\u2207\u0000\u2208\u0338\u0000\u220B\u0338\u0000\u2211\u0000\u2212\u0000\u2223\u0338\u0000\u2225\u0338\u0000\u222B"d~ +"\u222B\u0000\u222B\u222B\u222B\u0000\u222B\u222B\u222B\u222B\u0000\u222E\u222E\u0000\u222E\u222E\u222E\u0000\u223C"d~ +"\u0338\u0000\u2243\u0338\u0000\u2245\u0338\u0000\u2248\u0338\u0000\u224D\u0338\u0000\u2261\u0338\u0000\u2264\u0338"d~ +"\u0000\u2265\u0338\u0000\u2272\u0338\u0000\u2273\u0338\u0000\u2276\u0338\u0000\u2277\u0338\u0000\u227A\u0338\u0000"d~ +"\u227B\u0338\u0000\u227C\u0338\u0000\u227D\u0338\u0000\u2282\u0338\u0000\u2283\u0338\u0000\u2286\u0338\u0000\u2287"d~ +"\u0338\u0000\u2291\u0338\u0000\u2292\u0338\u0000\u22A2\u0338\u0000\u22A8\u0338\u0000\u22A9\u0338\u0000\u22AB\u0338"d~ +"\u0000\u22B2\u0338\u0000\u22B3\u0338\u0000\u22B4\u0338\u0000\u22B5\u0338\u0000\u2502\u0000\u25A0\u0000\u25CB\u0000"d~ +"\u2985\u0000\u2986\u0000\u2ADD\u0338\u0000\u2C71\u0000\u2D61\u0000\u3001\u0000\u3002\u0000\u3008\u0000\u3009\u0000"d~ +"\u300A\u0000\u300B\u0000\u300C\u0000\u300D\u0000\u300E\u0000\u300F\u0000\u3010\u0000\u3011\u0000\u3012\u0000\u3014"d~ +"\u0000\u3014\u0053\u3015\u0000\u3014\u4E09\u3015\u0000\u3014\u4E8C\u3015\u0000\u3014\u52DD\u3015\u0000\u3014\u5B89"d~ +"\u3015\u0000\u3014\u6253\u3015\u0000\u3014\u6557\u3015\u0000\u3014\u672C\u3015\u0000\u3014\u70B9\u3015\u0000\u3014"d~ +"\u76D7\u3015\u0000\u3015\u0000\u3016\u0000\u3017\u0000\u3046\u3099\u0000\u304B\u3099\u0000\u304D\u3099\u0000\u304F"d~ +"\u3099\u0000\u3051\u3099\u0000\u3053\u3099\u0000\u3055\u3099\u0000\u3057\u3099\u0000\u3059\u3099\u0000\u305B\u3099"d~ +"\u0000\u305D\u3099\u0000\u305F\u3099\u0000\u3061\u3099\u0000\u3064\u3099\u0000\u3066\u3099\u0000\u3068\u3099\u0000"d~ +"\u306F\u3099\u0000\u306F\u309A\u0000\u3072\u3099\u0000\u3072\u309A\u0000\u3075\u3099\u0000\u3075\u309A\u0000\u3078"d~ +"\u3099\u0000\u3078\u309A\u0000\u307B\u304B\u0000\u307B\u3099\u0000\u307B\u309A\u0000\u3088\u308A\u0000\u3099\u0000"d~ +"\u309A\u0000\u309D\u3099\u0000\u30A1\u0000\u30A2\u0000\u30A2\u30CF\u309A\u30FC\u30C8\u0000\u30A2\u30EB\u30D5\u30A1"d~ +"\u0000\u30A2\u30F3\u30D8\u309A\u30A2\u0000\u30A2\u30FC\u30EB\u0000\u30A3\u0000\u30A4\u0000\u30A4\u30CB\u30F3\u30AF"d~ +"\u3099\u0000\u30A4\u30F3\u30C1\u0000\u30A5\u0000\u30A6\u0000\u30A6\u3099\u0000\u30A6\u30A9\u30F3\u0000\u30A7\u0000"d~ +"\u30A8\u0000\u30A8\u30B9\u30AF\u30FC\u30C8\u3099\u0000\u30A8\u30FC\u30AB\u30FC\u0000\u30A9\u0000\u30AA\u0000\u30AA"d~ +"\u30F3\u30B9\u0000\u30AA\u30FC\u30E0\u0000\u30AB\u0000\u30AB\u3099\u0000\u30AB\u3099\u30ED\u30F3\u0000\u30AB\u3099"d~ +"\u30F3\u30DE\u0000\u30AB\u30A4\u30EA\u0000\u30AB\u30E9\u30C3\u30C8\u0000\u30AB\u30ED\u30EA\u30FC\u0000\u30AD\u0000"d~ +"\u30AD\u3099\u0000\u30AD\u3099\u30AB\u3099\u0000\u30AD\u3099\u30CB\u30FC\u0000\u30AD\u3099\u30EB\u30BF\u3099\u30FC"d~ +"\u0000\u30AD\u30E5\u30EA\u30FC\u0000\u30AD\u30ED\u0000\u30AD\u30ED\u30AF\u3099\u30E9\u30E0\u0000\u30AD\u30ED\u30E1"d~ +"\u30FC\u30C8\u30EB\u0000\u30AD\u30ED\u30EF\u30C3\u30C8\u0000\u30AF\u0000\u30AF\u3099\u0000\u30AF\u3099\u30E9\u30E0"d~ +"\u0000\u30AF\u3099\u30E9\u30E0\u30C8\u30F3\u0000\u30AF\u30EB\u30BB\u3099\u30A4\u30ED\u0000\u30AF\u30ED\u30FC\u30CD"d~ +"\u0000\u30B1\u0000\u30B1\u3099\u0000\u30B1\u30FC\u30B9\u0000\u30B3\u0000\u30B3\u3099\u0000\u30B3\u30B3\u0000\u30B3"d~ +"\u30C8\u0000\u30B3\u30EB\u30CA\u0000\u30B3\u30FC\u30DB\u309A\u0000\u30B5\u0000\u30B5\u3099\u0000\u30B5\u30A4\u30AF"d~ +"\u30EB\u0000\u30B5\u30F3\u30C1\u30FC\u30E0\u0000\u30B7\u0000\u30B7\u3099\u0000\u30B7\u30EA\u30F3\u30AF\u3099\u0000"d~ +"\u30B9\u0000\u30B9\u3099\u0000\u30BB\u0000\u30BB\u3099\u0000\u30BB\u30F3\u30C1\u0000\u30BB\u30F3\u30C8\u0000\u30BD"d~ +"\u0000\u30BD\u3099\u0000\u30BF\u0000\u30BF\u3099\u0000\u30BF\u3099\u30FC\u30B9\u0000\u30C1\u0000\u30C1\u3099\u0000"d~ +"\u30C3\u0000\u30C4\u0000\u30C4\u3099\u0000\u30C6\u0000\u30C6\u3099\u0000\u30C6\u3099\u30B7\u0000\u30C8\u0000\u30C8"d~ +"\u3099\u0000\u30C8\u3099\u30EB\u0000\u30C8\u30F3\u0000\u30CA\u0000\u30CA\u30CE\u0000\u30CB\u0000\u30CC\u0000\u30CD"d~ +"\u0000\u30CE\u0000\u30CE\u30C3\u30C8\u0000\u30CF\u0000\u30CF\u3099\u0000\u30CF\u3099\u30FC\u30EC\u30EB\u0000\u30CF"d~ +"\u309A\u0000\u30CF\u309A\u30FC\u30BB\u30F3\u30C8\u0000\u30CF\u309A\u30FC\u30C4\u0000\u30CF\u30A4\u30C4\u0000\u30D2"d~ +"\u0000\u30D2\u3099\u0000\u30D2\u3099\u30EB\u0000\u30D2\u309A\u0000\u30D2\u309A\u30A2\u30B9\u30C8\u30EB\u0000\u30D2"d~ +"\u309A\u30AF\u30EB\u0000\u30D2\u309A\u30B3\u0000\u30D5\u0000\u30D5\u3099\u0000\u30D5\u3099\u30C3\u30B7\u30A7\u30EB"d~ +"\u0000\u30D5\u309A\u0000\u30D5\u30A1\u30E9\u30C3\u30C8\u3099\u0000\u30D5\u30A3\u30FC\u30C8\u0000\u30D5\u30E9\u30F3"d~ +"\u0000\u30D8\u0000\u30D8\u3099\u0000\u30D8\u3099\u30FC\u30BF\u0000\u30D8\u309A\u0000\u30D8\u309A\u30BD\u0000\u30D8"d~ +"\u309A\u30CB\u30D2\u0000\u30D8\u309A\u30F3\u30B9\u0000\u30D8\u309A\u30FC\u30B7\u3099\u0000\u30D8\u30AF\u30BF\u30FC"d~ +"\u30EB\u0000\u30D8\u30EB\u30C4\u0000\u30DB\u0000\u30DB\u3099\u0000\u30DB\u3099\u30EB\u30C8\u0000\u30DB\u309A\u0000"d~ +"\u30DB\u309A\u30A4\u30F3\u30C8\u0000\u30DB\u309A\u30F3\u30C8\u3099\u0000\u30DB\u30F3\u0000\u30DB\u30FC\u30EB\u0000"d~ +"\u30DB\u30FC\u30F3\u0000\u30DE\u0000\u30DE\u30A4\u30AF\u30ED\u0000\u30DE\u30A4\u30EB\u0000\u30DE\u30C3\u30CF\u0000"d~ +"\u30DE\u30EB\u30AF\u0000\u30DE\u30F3\u30B7\u30E7\u30F3\u0000\u30DF\u0000\u30DF\u30AF\u30ED\u30F3\u0000\u30DF\u30EA"d~ +"\u0000\u30DF\u30EA\u30CF\u3099\u30FC\u30EB\u0000\u30E0\u0000\u30E1\u0000\u30E1\u30AB\u3099\u0000\u30E1\u30AB\u3099"d~ +"\u30C8\u30F3\u0000\u30E1\u30FC\u30C8\u30EB\u0000\u30E2\u0000\u30E3\u0000\u30E4\u0000\u30E4\u30FC\u30C8\u3099\u0000"d~ +"\u30E4\u30FC\u30EB\u0000\u30E5\u0000\u30E6\u0000\u30E6\u30A2\u30F3\u0000\u30E7\u0000\u30E8\u0000\u30E9\u0000\u30EA"d~ +"\u0000\u30EA\u30C3\u30C8\u30EB\u0000\u30EA\u30E9\u0000\u30EB\u0000\u30EB\u30D2\u309A\u30FC\u0000\u30EB\u30FC\u30D5"d~ +"\u3099\u30EB\u0000\u30EC\u0000\u30EC\u30E0\u0000\u30EC\u30F3\u30C8\u30B1\u3099\u30F3\u0000\u30ED\u0000\u30EF\u0000"d~ +"\u30EF\u3099\u0000\u30EF\u30C3\u30C8\u0000\u30F0\u0000\u30F0\u3099\u0000\u30F1\u0000\u30F1\u3099\u0000\u30F2\u0000"d~ +"\u30F2\u3099\u0000\u30F3\u0000\u30FB\u0000\u30FC\u0000\u30FD\u3099\u0000\u349E\u0000\u34B9\u0000\u34BB\u0000\u34DF"d~ +"\u0000\u3515\u0000\u36EE\u0000\u36FC\u0000\u3781\u0000\u382F\u0000\u3862\u0000\u387C\u0000\u38C7\u0000\u38E3\u0000"d~ +"\u391C\u0000\u393A\u0000\u3A2E\u0000\u3A6C\u0000\u3AE4\u0000\u3B08\u0000\u3B19\u0000\u3B49\u0000\u3B9D\u0000\u3C18"d~ +"\u0000\u3C4E\u0000\u3D33\u0000\u3D96\u0000\u3EAC\u0000\u3EB8\u0000\u3F1B\u0000\u3FFC\u0000\u4008\u0000\u4018\u0000"d~ +"\u4039\u0000\u4046\u0000\u4096\u0000\u40E3\u0000\u412F\u0000\u4202\u0000\u4227\u0000\u42A0\u0000\u4301\u0000\u4334"d~ +"\u0000\u4359\u0000\u43D5\u0000\u43D9\u0000\u440B\u0000\u446B\u0000\u452B\u0000\u455D\u0000\u4561\u0000\u456B\u0000"d~ +"\u45D7\u0000\u45F9\u0000\u4635\u0000\u46BE\u0000\u46C7\u0000\u4995\u0000\u49E6\u0000\u4A6E\u0000\u4A76\u0000\u4AB2"d~ +"\u0000\u4B33\u0000\u4BCE\u0000\u4CCE\u0000\u4CED\u0000\u4CF8\u0000\u4D56\u0000\u4E00\u0000\u4E01\u0000\u4E03\u0000"d~ +"\u4E09\u0000\u4E0A\u0000\u4E0B\u0000\u4E0D\u0000\u4E19\u0000\u4E26\u0000\u4E28\u0000\u4E2D\u0000\u4E32\u0000\u4E36"d~ +"\u0000\u4E38\u0000\u4E39\u0000\u4E3D\u0000\u4E3F\u0000\u4E41\u0000\u4E59\u0000\u4E5D\u0000\u4E82\u0000\u4E85\u0000"d~ +"\u4E86\u0000\u4E8C\u0000\u4E94\u0000\u4EA0\u0000\u4EA4\u0000\u4EAE\u0000\u4EBA\u0000\u4EC0\u0000\u4ECC\u0000\u4EE4"d~ +"\u0000\u4EE4\u548C\u0000\u4F01\u0000\u4F11\u0000\u4F60\u0000\u4F80\u0000\u4F86\u0000\u4F8B\u0000\u4FAE\u0000\u4FBB"d~ +"\u0000\u4FBF\u0000\u5002\u0000\u502B\u0000\u507A\u0000\u5099\u0000\u50CF\u0000\u50DA\u0000\u50E7\u0000\u512A\u0000"d~ +"\u513F\u0000\u5140\u0000\u5145\u0000\u514D\u0000\u5154\u0000\u5164\u0000\u5165\u0000\u5167\u0000\u5168\u0000\u5169"d~ +"\u0000\u516B\u0000\u516D\u0000\u5177\u0000\u5180\u0000\u5182\u0000\u518D\u0000\u5192\u0000\u5195\u0000\u5196\u0000"d~ +"\u5197\u0000\u5199\u0000\u51A4\u0000\u51AB\u0000\u51AC\u0000\u51B5\u0000\u51B7\u0000\u51C9\u0000\u51CC\u0000\u51DC"d~ +"\u0000\u51DE\u0000\u51E0\u0000\u51F5\u0000\u5200\u0000\u5203\u0000\u5207\u0000\u5217\u0000\u521D\u0000\u5229\u0000"d~ +"\u523A\u0000\u523B\u0000\u5246\u0000\u524D\u0000\u5272\u0000\u5277\u0000\u5289\u0000\u529B\u0000\u52A3\u0000\u52B3"d~ +"\u0000\u52B4\u0000\u52C7\u0000\u52C9\u0000\u52D2\u0000\u52DE\u0000\u52E4\u0000\u52F5\u0000\u52F9\u0000\u52FA\u0000"d~ +"\u5305\u0000\u5306\u0000\u5315\u0000\u5317\u0000\u531A\u0000\u5338\u0000\u533B\u0000\u533F\u0000\u5341\u0000\u5344"d~ +"\u0000\u5345\u0000\u5349\u0000\u5351\u0000\u5354\u0000\u535A\u0000\u535C\u0000\u5369\u0000\u5370\u0000\u5373\u0000"d~ +"\u5375\u0000\u537D\u0000\u537F\u0000\u5382\u0000\u53B6\u0000\u53C3\u0000\u53C8\u0000\u53CA\u0000\u53CC\u0000\u53DF"d~ +"\u0000\u53E3\u0000\u53E5\u0000\u53EB\u0000\u53EF\u0000\u53F1\u0000\u53F3\u0000\u5406\u0000\u5408\u0000\u540D\u0000"d~ +"\u540F\u0000\u541D\u0000\u5438\u0000\u5439\u0000\u5442\u0000\u5448\u0000\u5468\u0000\u549E\u0000\u54A2\u0000\u54BD"d~ +"\u0000\u54F6\u0000\u5510\u0000\u554F\u0000\u5553\u0000\u5555\u0000\u5563\u0000\u5584\u0000\u5587\u0000\u5599\u0000"d~ +"\u559D\u0000\u55AB\u0000\u55B3\u0000\u55B6\u0000\u55C0\u0000\u55C2\u0000\u55E2\u0000\u5606\u0000\u5651\u0000\u5668"d~ +"\u0000\u5674\u0000\u56D7\u0000\u56DB\u0000\u56F9\u0000\u5716\u0000\u5717\u0000\u571F\u0000\u5730\u0000\u578B\u0000"d~ +"\u57CE\u0000\u57F4\u0000\u580D\u0000\u5831\u0000\u5832\u0000\u5840\u0000\u585A\u0000\u585E\u0000\u58A8\u0000\u58AC"d~ +"\u0000\u58B3\u0000\u58D8\u0000\u58DF\u0000\u58EB\u0000\u58EE\u0000\u58F0\u0000\u58F2\u0000\u58F7\u0000\u5902\u0000"d~ +"\u5906\u0000\u590A\u0000\u5915\u0000\u591A\u0000\u591C\u0000\u5922\u0000\u5927\u0000\u5927\u6B63\u0000\u5929\u0000"d~ +"\u5944\u0000\u5948\u0000\u5951\u0000\u5954\u0000\u5962\u0000\u5973\u0000\u59D8\u0000\u59EC\u0000\u5A1B\u0000\u5A27"d~ +"\u0000\u5A62\u0000\u5A66\u0000\u5AB5\u0000\u5B08\u0000\u5B28\u0000\u5B3E\u0000\u5B50\u0000\u5B57\u0000\u5B66\u0000"d~ +"\u5B80\u0000\u5B85\u0000\u5B97\u0000\u5BC3\u0000\u5BD8\u0000\u5BE7\u0000\u5BEE\u0000\u5BF3\u0000\u5BF8\u0000\u5BFF"d~ +"\u0000\u5C06\u0000\u5C0F\u0000\u5C22\u0000\u5C38\u0000\u5C3F\u0000\u5C60\u0000\u5C62\u0000\u5C64\u0000\u5C65\u0000"d~ +"\u5C6E\u0000\u5C71\u0000\u5C8D\u0000\u5CC0\u0000\u5D19\u0000\u5D43\u0000\u5D50\u0000\u5D6B\u0000\u5D6E\u0000\u5D7C"d~ +"\u0000\u5DB2\u0000\u5DBA\u0000\u5DDB\u0000\u5DE1\u0000\u5DE2\u0000\u5DE5\u0000\u5DE6\u0000\u5DF1\u0000\u5DFD\u0000"d~ +"\u5DFE\u0000\u5E28\u0000\u5E3D\u0000\u5E69\u0000\u5E72\u0000\u5E73\u6210\u0000\u5E74\u0000\u5E7A\u0000\u5E7C\u0000"d~ +"\u5E7F\u0000\u5EA6\u0000\u5EB0\u0000\u5EB3\u0000\u5EB6\u0000\u5EC9\u0000\u5ECA\u0000\u5ED2\u0000\u5ED3\u0000\u5ED9"d~ +"\u0000\u5EEC\u0000\u5EF4\u0000\u5EFE\u0000\u5F04\u0000\u5F0B\u0000\u5F13\u0000\u5F22\u0000\u5F50\u0000\u5F53\u0000"d~ +"\u5F61\u0000\u5F62\u0000\u5F69\u0000\u5F6B\u0000\u5F73\u0000\u5F8B\u0000\u5F8C\u0000\u5F97\u0000\u5F9A\u0000\u5FA9"d~ +"\u0000\u5FAD\u0000\u5FC3\u0000\u5FCD\u0000\u5FD7\u0000\u5FF5\u0000\u5FF9\u0000\u6012\u0000\u601C\u0000\u6075\u0000"d~ +"\u6081\u0000\u6094\u0000\u60C7\u0000\u60D8\u0000\u60E1\u0000\u6108\u0000\u6144\u0000\u6148\u0000\u614C\u0000\u614E"d~ +"\u0000\u6160\u0000\u6168\u0000\u617A\u0000\u618E\u0000\u6190\u0000\u61A4\u0000\u61AF\u0000\u61B2\u0000\u61DE\u0000"d~ +"\u61F2\u0000\u61F6\u0000\u6200\u0000\u6208\u0000\u6210\u0000\u621B\u0000\u622E\u0000\u6234\u0000\u6236\u0000\u624B"d~ +"\u0000\u6253\u0000\u625D\u0000\u6295\u0000\u62B1\u0000\u62C9\u0000\u62CF\u0000\u62D3\u0000\u62D4\u0000\u62FC\u0000"d~ +"\u62FE\u0000\u6307\u0000\u633D\u0000\u6350\u0000\u6355\u0000\u6368\u0000\u637B\u0000\u6383\u0000\u63A0\u0000\u63A9"d~ +"\u0000\u63C4\u0000\u63C5\u0000\u63E4\u0000\u641C\u0000\u6422\u0000\u6452\u0000\u6469\u0000\u6477\u0000\u647E\u0000"d~ +"\u649A\u0000\u649D\u0000\u64C4\u0000\u652F\u0000\u6534\u0000\u654F\u0000\u6556\u0000\u656C\u0000\u6578\u0000\u6587"d~ +"\u0000\u6597\u0000\u6599\u0000\u65A4\u0000\u65B0\u0000\u65B9\u0000\u65C5\u0000\u65E0\u0000\u65E2\u0000\u65E3\u0000"d~ +"\u65E5\u0000\u660E\u6CBB\u0000\u6613\u0000\u6620\u0000\u662D\u548C\u0000\u6649\u0000\u6674\u0000\u6688\u0000\u6691"d~ +"\u0000\u669C\u0000\u66B4\u0000\u66C6\u0000\u66F0\u0000\u66F4\u0000\u66F8\u0000\u6700\u0000\u6708\u0000\u6709\u0000"d~ +"\u6717\u0000\u671B\u0000\u6721\u0000\u6728\u0000\u674E\u0000\u6753\u0000\u6756\u0000\u675E\u0000\u677B\u0000\u6785"d~ +"\u0000\u6797\u0000\u67F3\u0000\u67FA\u0000\u6817\u0000\u681F\u0000\u682A\u0000\u682A\u5F0F\u4F1A\u793E\u0000\u6852"d~ +"\u0000\u6881\u0000\u6885\u0000\u688E\u0000\u68A8\u0000\u6914\u0000\u6942\u0000\u69A3\u0000\u69EA\u0000\u6A02\u0000"d~ +"\u6A13\u0000\u6AA8\u0000\u6AD3\u0000\u6ADB\u0000\u6B04\u0000\u6B20\u0000\u6B21\u0000\u6B54\u0000\u6B62\u0000\u6B63"d~ +"\u0000\u6B72\u0000\u6B77\u0000\u6B79\u0000\u6B9F\u0000\u6BAE\u0000\u6BB3\u0000\u6BBA\u0000\u6BBB\u0000\u6BCB\u0000"d~ +"\u6BCD\u0000\u6BD4\u0000\u6BDB\u0000\u6C0F\u0000\u6C14\u0000\u6C34\u0000\u6C4E\u0000\u6C67\u0000\u6C88\u0000\u6CBF"d~ +"\u0000\u6CCC\u0000\u6CCD\u0000\u6CE5\u0000\u6CE8\u0000\u6D16\u0000\u6D1B\u0000\u6D1E\u0000\u6D34\u0000\u6D3E\u0000"d~ +"\u6D41\u0000\u6D69\u0000\u6D6A\u0000\u6D77\u0000\u6D78\u0000\u6D85\u0000\u6DCB\u0000\u6DDA\u0000\u6DEA\u0000\u6DF9"d~ +"\u0000\u6E1A\u0000\u6E2F\u0000\u6E6E\u0000\u6E80\u0000\u6E9C\u0000\u6EBA\u0000\u6EC7\u0000\u6ECB\u0000\u6ED1\u0000"d~ +"\u6EDB\u0000\u6F0F\u0000\u6F14\u0000\u6F22\u0000\u6F23\u0000\u6F6E\u0000\u6FC6\u0000\u6FEB\u0000\u6FFE\u0000\u701B"d~ +"\u0000\u701E\u0000\u7039\u0000\u704A\u0000\u706B\u0000\u7070\u0000\u7077\u0000\u707D\u0000\u7099\u0000\u70AD\u0000"d~ +"\u70C8\u0000\u70D9\u0000\u7121\u0000\u7145\u0000\u7149\u0000\u716E\u0000\u719C\u0000\u71CE\u0000\u71D0\u0000\u7210"d~ +"\u0000\u721B\u0000\u7228\u0000\u722A\u0000\u722B\u0000\u7235\u0000\u7236\u0000\u723B\u0000\u723F\u0000\u7247\u0000"d~ +"\u7250\u0000\u7259\u0000\u725B\u0000\u7262\u0000\u7279\u0000\u7280\u0000\u7295\u0000\u72AC\u0000\u72AF\u0000\u72C0"d~ +"\u0000\u72FC\u0000\u732A\u0000\u7375\u0000\u737A\u0000\u7384\u0000\u7387\u0000\u7389\u0000\u738B\u0000\u73A5\u0000"d~ +"\u73B2\u0000\u73DE\u0000\u7406\u0000\u7409\u0000\u7422\u0000\u7447\u0000\u745C\u0000\u7469\u0000\u7471\u0000\u7485"d~ +"\u0000\u7489\u0000\u7498\u0000\u74CA\u0000\u74DC\u0000\u74E6\u0000\u7506\u0000\u7518\u0000\u751F\u0000\u7524\u0000"d~ +"\u7528\u0000\u7530\u0000\u7532\u0000\u7533\u0000\u7537\u0000\u753B\u0000\u753E\u0000\u7559\u0000\u7565\u0000\u7570"d~ +"\u0000\u758B\u0000\u7592\u0000\u75E2\u0000\u7610\u0000\u761D\u0000\u761F\u0000\u7642\u0000\u7669\u0000\u7676\u0000"d~ +"\u767D\u0000\u76AE\u0000\u76BF\u0000\u76CA\u0000\u76DB\u0000\u76E3\u0000\u76E7\u0000\u76EE\u0000\u76F4\u0000\u7701"d~ +"\u0000\u771E\u0000\u771F\u0000\u7740\u0000\u774A\u0000\u778B\u0000\u77A7\u0000\u77DB\u0000\u77E2\u0000\u77F3\u0000"d~ +"\u784E\u0000\u786B\u0000\u788C\u0000\u7891\u0000\u78CA\u0000\u78CC\u0000\u78FB\u0000\u792A\u0000\u793A\u0000\u793C"d~ +"\u0000\u793E\u0000\u7948\u0000\u7949\u0000\u7950\u0000\u7956\u0000\u795D\u0000\u795E\u0000\u7965\u0000\u797F\u0000"d~ +"\u7981\u0000\u798D\u0000\u798E\u0000\u798F\u0000\u79AE\u0000\u79B8\u0000\u79BE\u0000\u79CA\u0000\u79D8\u0000\u79EB"d~ +"\u0000\u7A1C\u0000\u7A40\u0000\u7A4A\u0000\u7A4F\u0000\u7A74\u0000\u7A7A\u0000\u7A81\u0000\u7AB1\u0000\u7ACB\u0000"d~ +"\u7AEE\u0000\u7AF9\u0000\u7B20\u0000\u7B8F\u0000\u7BC0\u0000\u7BC6\u0000\u7BC9\u0000\u7C3E\u0000\u7C60\u0000\u7C73"d~ +"\u0000\u7C7B\u0000\u7C92\u0000\u7CBE\u0000\u7CD2\u0000\u7CD6\u0000\u7CE3\u0000\u7CE7\u0000\u7CE8\u0000\u7CF8\u0000"d~ +"\u7D00\u0000\u7D10\u0000\u7D22\u0000\u7D2F\u0000\u7D42\u0000\u7D5B\u0000\u7D63\u0000\u7DA0\u0000\u7DBE\u0000\u7DC7"d~ +"\u0000\u7DF4\u0000\u7E02\u0000\u7E09\u0000\u7E37\u0000\u7E41\u0000\u7E45\u0000\u7F36\u0000\u7F3E\u0000\u7F51\u0000"d~ +"\u7F72\u0000\u7F79\u0000\u7F7A\u0000\u7F85\u0000\u7F8A\u0000\u7F95\u0000\u7F9A\u0000\u7FBD\u0000\u7FFA\u0000\u8001"d~ +"\u0000\u8005\u0000\u800C\u0000\u8012\u0000\u8033\u0000\u8046\u0000\u8060\u0000\u806F\u0000\u8070\u0000\u807E\u0000"d~ +"\u807F\u0000\u8089\u0000\u808B\u0000\u80AD\u0000\u80B2\u0000\u8103\u0000\u813E\u0000\u81D8\u0000\u81E3\u0000\u81E8"d~ +"\u0000\u81EA\u0000\u81ED\u0000\u81F3\u0000\u81FC\u0000\u8201\u0000\u8204\u0000\u820C\u0000\u8218\u0000\u821B\u0000"d~ +"\u821F\u0000\u826E\u0000\u826F\u0000\u8272\u0000\u8278\u0000\u8279\u0000\u828B\u0000\u8291\u0000\u829D\u0000\u82B1"d~ +"\u0000\u82B3\u0000\u82BD\u0000\u82E5\u0000\u82E6\u0000\u831D\u0000\u8323\u0000\u8336\u0000\u8352\u0000\u8353\u0000"d~ +"\u8363\u0000\u83AD\u0000\u83BD\u0000\u83C9\u0000\u83CA\u0000\u83CC\u0000\u83DC\u0000\u83E7\u0000\u83EF\u0000\u83F1"d~ +"\u0000\u843D\u0000\u8449\u0000\u8457\u0000\u84EE\u0000\u84F1\u0000\u84F3\u0000\u84FC\u0000\u8516\u0000\u8564\u0000"d~ +"\u85CD\u0000\u85FA\u0000\u8606\u0000\u8612\u0000\u862D\u0000\u863F\u0000\u864D\u0000\u8650\u0000\u865C\u0000\u8667"d~ +"\u0000\u8669\u0000\u866B\u0000\u8688\u0000\u86A9\u0000\u86E2\u0000\u870E\u0000\u8728\u0000\u876B\u0000\u8779\u0000"d~ +"\u8786\u0000\u87BA\u0000\u87E1\u0000\u8801\u0000\u881F\u0000\u8840\u0000\u884C\u0000\u8860\u0000\u8863\u0000\u88C2"d~ +"\u0000\u88CF\u0000\u88D7\u0000\u88DE\u0000\u88E1\u0000\u88F8\u0000\u88FA\u0000\u8910\u0000\u8941\u0000\u8964\u0000"d~ +"\u897E\u0000\u8986\u0000\u898B\u0000\u8996\u0000\u89D2\u0000\u89E3\u0000\u8A00\u0000\u8AA0\u0000\u8AAA\u0000\u8ABF"d~ +"\u0000\u8ACB\u0000\u8AD2\u0000\u8AD6\u0000\u8AED\u0000\u8AF8\u0000\u8AFE\u0000\u8B01\u0000\u8B39\u0000\u8B58\u0000"d~ +"\u8B80\u0000\u8B8A\u0000\u8C37\u0000\u8C46\u0000\u8C48\u0000\u8C55\u0000\u8C78\u0000\u8C9D\u0000\u8CA1\u0000\u8CA9"d~ +"\u0000\u8CAB\u0000\u8CC1\u0000\u8CC2\u0000\u8CC7\u0000\u8CC8\u0000\u8CD3\u0000\u8D08\u0000\u8D1B\u0000\u8D64\u0000"d~ +"\u8D70\u0000\u8D77\u0000\u8DB3\u0000\u8DBC\u0000\u8DCB\u0000\u8DEF\u0000\u8DF0\u0000\u8EAB\u0000\u8ECA\u0000\u8ED4"d~ +"\u0000\u8F26\u0000\u8F2A\u0000\u8F38\u0000\u8F3B\u0000\u8F62\u0000\u8F9B\u0000\u8F9E\u0000\u8FB0\u0000\u8FB5\u0000"d~ +"\u8FB6\u0000\u9023\u0000\u9038\u0000\u904A\u0000\u9069\u0000\u9072\u0000\u907C\u0000\u908F\u0000\u9091\u0000\u9094"d~ +"\u0000\u90CE\u0000\u90DE\u0000\u90F1\u0000\u90FD\u0000\u9111\u0000\u911B\u0000\u9149\u0000\u914D\u0000\u916A\u0000"d~ +"\u9199\u0000\u91B4\u0000\u91C6\u0000\u91CC\u0000\u91CF\u0000\u91D1\u0000\u9234\u0000\u9238\u0000\u9276\u0000\u927C"d~ +"\u0000\u92D7\u0000\u92D8\u0000\u9304\u0000\u934A\u0000\u93F9\u0000\u9415\u0000\u9577\u0000\u9580\u0000\u958B\u0000"d~ +"\u95AD\u0000\u95B7\u0000\u961C\u0000\u962E\u0000\u964B\u0000\u964D\u0000\u9675\u0000\u9678\u0000\u967C\u0000\u9686"d~ +"\u0000\u96A3\u0000\u96B6\u0000\u96B7\u0000\u96B8\u0000\u96B9\u0000\u96C3\u0000\u96E2\u0000\u96E3\u0000\u96E8\u0000"d~ +"\u96F6\u0000\u96F7\u0000\u9723\u0000\u9732\u0000\u9748\u0000\u9751\u0000\u9756\u0000\u975E\u0000\u9762\u0000\u9769"d~ +"\u0000\u97CB\u0000\u97DB\u0000\u97E0\u0000\u97ED\u0000\u97F3\u0000\u97FF\u0000\u9801\u0000\u9805\u0000\u980B\u0000"d~ +"\u9818\u0000\u9829\u0000\u983B\u0000\u985E\u0000\u98A8\u0000\u98DB\u0000\u98DF\u0000\u98E2\u0000\u98EF\u0000\u98FC"d~ +"\u0000\u9928\u0000\u9929\u0000\u9996\u0000\u9999\u0000\u99A7\u0000\u99AC\u0000\u99C2\u0000\u99F1\u0000\u99FE\u0000"d~ +"\u9A6A\u0000\u9AA8\u0000\u9AD8\u0000\u9ADF\u0000\u9B12\u0000\u9B25\u0000\u9B2F\u0000\u9B32\u0000\u9B3C\u0000\u9B5A"d~ +"\u0000\u9B6F\u0000\u9C40\u0000\u9C57\u0000\u9CE5\u0000\u9CFD\u0000\u9D67\u0000\u9DB4\u0000\u9DFA\u0000\u9E1E\u0000"d~ +"\u9E75\u0000\u9E7F\u0000\u9E97\u0000\u9E9F\u0000\u9EA5\u0000\u9EBB\u0000\u9EC3\u0000\u9ECD\u0000\u9ECE\u0000\u9ED1"d~ +"\u0000\u9EF9\u0000\u9EFD\u0000\u9EFE\u0000\u9F05\u0000\u9F0E\u0000\u9F0F\u0000\u9F13\u0000\u9F16\u0000\u9F20\u0000"d~ +"\u9F3B\u0000\u9F43\u0000\u9F4A\u0000\u9F52\u0000\u9F8D\u0000\u9F8E\u0000\u9F9C\u0000\u9F9F\u0000\u9FA0\u0000\uA651"d~ +"\u0000\uA689\u0000\uA727\u0000\uA76F\u0000\uA78E\u0000\uAB37\u0000\uAB52\u0000\uAB66\u0000\uAB67\u0000\U000105D2"d~ +"\u0307\u0000\U000105DA\u0307\u0000\U00011099\U000110BA\u0000\U0001109B\U000110BA\u0000\U000110A5\U000110BA\u0000"d~ +"\U00011131\U00011127\u0000\U00011132\U00011127\u0000\U00011347\U0001133E\u0000\U00011347\U00011357\u0000\U00011382"d~ +"\U000113C9\u0000\U00011384\U000113BB\u0000\U0001138B\U000113C2\u0000\U00011390\U000113C9\u0000\U000113C2\U000113B8"d~ +"\u0000\U000113C2\U000113C2\u0000\U000113C2\U000113C9\u0000\U000114B9\U000114B0\u0000\U000114B9\U000114BA\u0000"d~ +"\U000114B9\U000114BD\u0000\U000115B8\U000115AF\u0000\U000115B9\U000115AF\u0000\U00011935\U00011930\u0000\U0001611E"d~ +"\U0001611E\u0000\U0001611E\U0001611E\U0001611F\u0000\U0001611E\U0001611E\U00016120\u0000\U0001611E\U0001611F\u0000"d~ +"\U0001611E\U00016120\u0000\U0001611E\U00016129\u0000\U0001611E\U00016129\U0001611F\u0000\U00016129\U0001611F\u0000"d~ +"\U00016D63\U00016D67\u0000\U00016D63\U00016D67\U00016D67\u0000\U00016D67\U00016D67\u0000\U0001D157\U0001D165\u0000"d~ +"\U0001D158\U0001D165\u0000\U0001D158\U0001D165\U0001D16E\u0000\U0001D158\U0001D165\U0001D16F\u0000\U0001D158\U0001D165"d~ +"\U0001D170\u0000\U0001D158\U0001D165\U0001D171\u0000\U0001D158\U0001D165\U0001D172\u0000\U0001D1B9\U0001D165\u0000"d~ +"\U0001D1B9\U0001D165\U0001D16E\u0000\U0001D1B9\U0001D165\U0001D16F\u0000\U0001D1BA\U0001D165\u0000\U0001D1BA\U0001D165"d~ +"\U0001D16E\u0000\U0001D1BA\U0001D165\U0001D16F\u0000\U0001DF04\u0000\U0001DF05\u0000\U0001DF06\u0000\U0001DF08"d~ +"\u0000\U0001DF0A\u0000\U0001DF1E\u0000\U00020122\u0000\U0002051C\u0000\U00020525\u0000\U0002054B\u0000\U0002063A"d~ +"\u0000\U00020804\u0000\U000208DE\u0000\U00020A2C\u0000\U00020B63\u0000\U000214E4\u0000\U000216A8\u0000\U000216EA"d~ +"\u0000\U000219C8\u0000\U00021B18\u0000\U00021D0B\u0000\U00021DE4\u0000\U00021DE6\u0000\U00022183\u0000\U0002219F"d~ +"\u0000\U00022331\u0000\U000226D4\u0000\U00022844\u0000\U0002284A\u0000\U00022B0C\u0000\U00022BF1\u0000\U0002300A"d~ +"\u0000\U000232B8\u0000\U0002335F\u0000\U00023393\u0000\U0002339C\u0000\U000233C3\u0000\U000233D5\u0000\U0002346D"d~ +"\u0000\U000236A3\u0000\U000238A7\u0000\U00023A8D\u0000\U00023AFA\u0000\U00023CBC\u0000\U00023D1E\u0000\U00023ED1"d~ +"\u0000\U00023F5E\u0000\U00023F8E\u0000\U00024263\u0000\U000242EE\u0000\U000243AB\u0000\U00024608\u0000\U00024735"d~ +"\u0000\U00024814\u0000\U00024C36\u0000\U00024C92\u0000\U00024FA1\u0000\U00024FB8\u0000\U00025044\u0000\U000250F2"d~ +"\u0000\U000250F3\u0000\U00025119\u0000\U00025133\u0000\U00025249\u0000\U0002541D\u0000\U00025626\u0000\U0002569A"d~ +"\u0000\U000256C5\u0000\U0002597C\u0000\U00025AA7\u0000\U00025BAB\u0000\U00025C80\u0000\U00025CD0\u0000\U00025F86"d~ +"\u0000\U000261DA\u0000\U00026228\u0000\U00026247\u0000\U000262D9\u0000\U0002633E\u0000\U000264DA\u0000\U00026523"d~ +"\u0000\U000265A8\u0000\U000267A7\u0000\U000267B5\u0000\U00026B3C\u0000\U00026C36\u0000\U00026CD5\u0000\U00026D6B"d~ +"\u0000\U00026F2C\u0000\U00026FB1\u0000\U000270D2\u0000\U000273CA\u0000\U00027667\u0000\U000278AE\u0000\U00027966"d~ +"\u0000\U00027CA8\u0000\U00027ED3\u0000\U00027F2F\u0000\U000285D2\u0000\U000285ED\u0000\U0002872E\u0000\U00028BFA"d~ +"\u0000\U00028D77\u0000\U00029145\u0000\U000291DF\u0000\U0002921A\u0000\U0002940A\u0000\U00029496\u0000\U000295B6"d~ +"\u0000\U00029B30\u0000\U0002A0CE\u0000\U0002A105\u0000\U0002A20E\u0000\U0002A291\u0000\U0002A392\u0000\U0002A600"d~ +"\u0000"d; +return t[]; } } diff --git a/std/internal/unicode_grapheme.d b/std/internal/unicode_grapheme.d index 093ebd1c19f..37df7afd56c 100644 --- a/std/internal/unicode_grapheme.d +++ b/std/internal/unicode_grapheme.d @@ -19,19 +19,277 @@ package(std): static if (size_t.sizeof == 4) { //832 bytes -enum hangulLVTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x80], [ 0x100, 0x80, 0xa00], [ 0x0, 0x20100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x80001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x10000001, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x10, 0x1000000, 0x100000, 0x10000, 0x1000, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum hangulLVTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000080", +x" +000001000000008000000A00", +x" +000000000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000020001000400030006000500010007000300020005000400070006000200010004000300060005 +000100070003000200050004000700060002000100040003000600050001000700030002000500040007000600080001 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001000000101000000001000000001000000001000000001000000001010000001 +010000000010000000010000000010000000010000000010100000010100000000100000000100000000100000000100 +000000101000000101000000001000000001000000001000000001000000001010000001010000000010000000010000 +000010000000010000000010100000010100000000100000000100000000100000000100000000101000000101000000 +001000000001000000001000000001000000001010000001010000000010000000010000000010000000010000000010 +010000000010000000010000000010000000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); //832 bytes -enum hangulLVTTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x80], [ 0x100, 0x80, 0xa00], [ 0x0, 0x20100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x20001, 0x40003, 0x60005, 0x10007, 0x30002, 0x50004, 0x70006, 0x80001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xeffffffe, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xffffffef, 0xfeffffff, 0xffefffff, 0xfffeffff, 0xffffefff, 0xfffffeff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//896 bytes -enum prependTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x80], [ 0x100, 0x80, 0xc00], [ 0x1010100, 0x1010101, 0x1010102, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20001, 0x3, 0x0, 0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60005, 0x0, 0x0, 0x0, 0x70000, 0x8, 0x90000, 0xa0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30000, 0x0, 0x0, 0x4, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x80000000, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000, 0x0, 0x0, 0x3f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum hangulLVTTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000080", +x" +000001000000008000000A00", +x" +000000000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000020001000400030006000500010007000300020005000400070006000200010004000300060005 +000100070003000200050004000700060002000100040003000600050001000700030002000500040007000600080001 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000EFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFE +FEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFF +FFFFFFEFEFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFF +FFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFEFEFFFFFF +FFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFEFFFFFFEFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEF +FEFFFFFFFFEFFFFFFFFEFFFFFFFFEFFFFFFFFEFF0000000F000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//928 bytes +enum prependTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000080", +x" +000001000000008000000D00", +x" +010101000101010101010102010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000002000100000003000000000004000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000060005000700000000000000000000 +0008000000000009000A0000000B00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000003F00000000000000000000000000000000000000002000000000000000 +000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000300000000000000000000000000040000000000000000000040000000000000000000000000000000000000000000 +000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000 +00000000000000000000000C000000000000000000000000000000000000000000000000000000000002000000000000 +000000008000000000000002000000000000000000000000000000000000000000000000040000000000000000000000 +000003F00000000000000000000000000000000000000000000000400000000000000000000000000000000000000000 +000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); //1280 bytes -enum controlTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xd0], [ 0x100, 0x120, 0xe00], [ 0x2020100, 0x3020202, 0x2020402, 0x2060502, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020207, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x10001, 0x10001, 0x10002, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10003, 0x10001, 0x10001, 0x10001, 0x10004, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x60005, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10007, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10008, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x90001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xb000a, 0xc000c, 0xc000c, 0xc000c, 0xc000c, 0xc000c, 0xc000c, 0xc000c, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xffffdbff, 0x0, 0x0, 0x80000000, 0xffffffff, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc800, 0x7f00, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfff0000, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f80000, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//1856 bytes -enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xb0], [ 0x100, 0xe0, 0x2400], [ 0x1010100, 0x1010201, 0x4010103, 0x1050101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x1010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x8, 0x0, 0x0, 0x90000, 0xa0000, 0xc000b, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf000e, 0x110010, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x130012, 0x150014, 0x170016, 0x190018, 0x1b001a, 0x1c, 0x1e001d, 0x20001f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x210000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x220000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xc8000000, 0xde01, 0x0, 0xc, 0x80000000, 0x1981, 0x0, 0x8, 0xc0000000, 0x1, 0x0, 0x8, 0xc0000000, 0x1a01, 0x0, 0xc, 0x0, 0x1981, 0x0, 0x0, 0x80000000, 0x1dc6, 0x0, 0xe, 0x0, 0x1e, 0x0, 0xc, 0x40000000, 0xd9b, 0x80000, 0xc, 0x80000000, 0x1dc1, 0x0, 0xc, 0x0, 0x7f030000, 0xc0000, 0x0, 0x80000, 0x0, 0x0, 0x0, 0x80000, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18020000, 0xc00000, 0x0, 0x10, 0x0, 0x0, 0x0, 0x200000, 0x100000, 0x0, 0x0, 0x0, 0xc0400000, 0x1bf, 0x0, 0x0, 0x1fb0e78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6000000, 0x0, 0xa00000, 0x7e000, 0x0, 0x0, 0x0, 0x0, 0x10, 0xe8000000, 0x1b, 0x0, 0x4, 0x4c2, 0x0, 0xc5c80, 0x0, 0x300ff0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800002, 0x0, 0x98, 0x0, 0x0, 0x3, 0xfff00000, 0xf, 0x0, 0x0, 0x0, 0xc0000, 0x0, 0x8, 0xcc300000, 0x1, 0x0, 0x0, 0x198000, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x20c800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16d8, 0x5, 0x0, 0x0, 0x0, 0x4, 0x1870000, 0x0, 0x0, 0x0, 0x1000, 0x60, 0x0, 0x4, 0x80380000, 0x4001, 0x0, 0x0, 0x2c7000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xc, 0x80000000, 0x399e, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe00000, 0x23, 0x0, 0x0, 0x5a060000, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f030000, 0x0, 0x0, 0x0, 0x58070000, 0x0, 0x0, 0x0, 0x40d000, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1007000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21be0000, 0x5, 0x0, 0x0, 0x0, 0xf00e0000, 0x10, 0x0, 0x2000000, 0x1800000, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x40008000, 0x0, 0x0, 0x0, 0x120200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x587c00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000, 0x8, 0xc0300000, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xffffffff, 0xff, 0x0, 0x0, 0x30000, 0x0, 0x0, 0x0, 0x2040, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3488 bytes -enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x110], [ 0x100, 0x1a0, 0x4b00], [ 0x2020100, 0x4020302, 0x7020605, 0xa090802, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x202020b, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0xe, 0xf0000, 0x0, 0x100000, 0x120011, 0x140013, 0x160015, 0x0, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x190018, 0x0, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x1d001c, 0x1f001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x200000, 0x0, 0x220021, 0x230000, 0x250024, 0x0, 0x0, 0x0, 0x26, 0x270000, 0x290028, 0x2b002a, 0x2d002c, 0x2f002e, 0x310030, 0x330032, 0x34, 0x360035, 0x380037, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b003a, 0x0, 0x3c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e0000, 0x3f0000, 0x40, 0x0, 0x0, 0x0, 0x41, 0x0, 0x0, 0x3b0042, 0x43, 0x44, 0x0, 0x460045, 0x0, 0x0, 0x0, 0x0, 0x470000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x490048, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xbfffffff, 0xb6, 0x0, 0x7ff0000, 0x0, 0xfffff800, 0x10000, 0x0, 0x0, 0x9fc00000, 0x3d9f, 0x20000, 0xffff0000, 0x7ff, 0x0, 0x0, 0x1ffc0, 0x0, 0x200ff800, 0xfbc00000, 0x3eef, 0xe000000, 0x0, 0xff000000, 0x0, 0xfffffc00, 0xfffffffb, 0x7, 0x14000000, 0xfe21fe, 0xc, 0x2, 0x50000000, 0x80201e, 0x4000000c, 0x6, 0x10000000, 0x23986, 0x230000, 0x6, 0x10000000, 0x21be, 0xfc00000c, 0x2, 0xd0000000, 0xe0201e, 0xc, 0x4, 0x40000000, 0x802001, 0x0, 0x11, 0xd0000000, 0x603dc1, 0xc, 0x2, 0x90000000, 0x603044, 0xc, 0x3, 0x58000000, 0x80201e, 0xc, 0x2, 0x0, 0x805c8400, 0x0, 0x0, 0x7f20000, 0x7f80, 0x0, 0x0, 0x1ff20000, 0x7f00, 0x0, 0x3000000, 0x2a00000, 0x0, 0x7ffe0000, 0xfeffe0df, 0x1fffffff, 0x40, 0x0, 0x0, 0x66fde000, 0xc3000000, 0x1e0001, 0x20002064, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c0000, 0xc0000, 0xc0000, 0xc0000, 0x0, 0x3fb00000, 0x200ffe40, 0x0, 0xb800, 0x0, 0x0, 0x0, 0x60, 0x200, 0x0, 0x0, 0x0, 0xe040187, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9800000, 0x0, 0x7f400000, 0x9ff81fe5, 0x0, 0xffff0000, 0x7fff, 0x0, 0xf, 0x17f00000, 0x4, 0xff800, 0x3, 0x3b3c, 0x0, 0x3a340, 0x0, 0xcff000, 0x0, 0x0, 0x0, 0x0, 0xfff70000, 0x31021fd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0xfc00, 0x0, 0x0, 0x6000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff78000, 0xc0000000, 0x0, 0x0, 0x30000, 0x844, 0x1060, 0x0, 0x0, 0x0, 0x0, 0x30, 0x8003ffff, 0x0, 0x3fc0, 0x3ff80, 0x0, 0x7, 0x33c80000, 0x0, 0x20, 0x0, 0x667e00, 0x1008, 0x10000000, 0x0, 0xc19d0000, 0x2, 0x403000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2120, 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x7c00000, 0x0, 0x0, 0x0, 0x0, 0xf06e, 0x87000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0xe0000000, 0x0, 0x0, 0x1ffc0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x2, 0xff000000, 0x7f, 0x80190000, 0x3, 0x6780000, 0x4, 0x0, 0x7, 0x1fef80, 0x0, 0x80000, 0x3, 0x7fc00000, 0x9e00, 0x0, 0x0, 0x40d38000, 0x2, 0x0, 0x0, 0x0, 0x80000000, 0x7f8, 0x3, 0x58000000, 0x800001, 0x1f1fc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x4000005c, 0x0, 0x0, 0xa5f90000, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb03c8000, 0x30000001, 0x0, 0x0, 0xa7f80000, 0x1, 0x0, 0x0, 0xbf2800, 0x0, 0x0, 0xe0000000, 0xfbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6ff8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58010000, 0x8, 0x0, 0x0, 0x0, 0xcf00000, 0x1, 0x7fe, 0x79f80000, 0xe7e0080, 0x0, 0x37ffc00, 0x0, 0x0, 0x0, 0x0, 0xbf7f0000, 0x0, 0x0, 0xfffc0000, 0x6dfcff, 0x0, 0x0, 0x0, 0xb47e0000, 0xbf, 0x0, 0xa30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180000, 0x3, 0x7c00000, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fff81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f0000, 0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x78000, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x60000000, 0x0, 0x0, 0x0, 0xffffffff, 0xffff3fff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf807c3a0, 0xfe7, 0x3c00, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf87fffff, 0xffffffff, 0x201fff, 0xf8000010, 0xfffe, 0x0, 0x0, 0xf9ffff7f, 0x7db, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x0, 0xf000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x7f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8000000, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum controlTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000D0", +x" +000001000000012000000E00", +x" +020201000302020202020402020605020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020702020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000010001000100010001000200010001000100010001000100010001 +000100010001000100010001000100010001000300010001000100010001000100010004000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010006000500010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100070001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010008000100010001000100010001000100010001000100010001000100010001000100010001 +0009000100010001000100010001000100010001000100010001000100010001000B000A000C000C000C000C000C000C +000C000C000C000C000C000C000C000C0001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001FFFFDBFF000000000000000080000000FFFFFFFF000020000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000 +000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 +0000C80000007F00000000000000FFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000080000000000000000000000000000000000000000000000000000000000000000FFF0000 +00000000FFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000F000000000000000000000000000000000000000007F8000000000000000000000000000000000000 +FFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +000000000000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000000000000000000000000000000000000000000000000000000000000", +); +//1792 bytes +enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000A0", +x" +00000100000000C000002400", +x" +010101000101020104010103010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000010000000300020005000400070006 +00000008000000000000000000090000000A0000000C000B0000000D0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000F000E00110010000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00130012001500140017001600190018001B001A0000001C001E001D0020001F00210000000000000000000000000000 +000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000008C80000000000DE01000000000000000C80000000000019810000000000000008C00000000000000100000000 +00000008C000000000001A01000000000000000C000000000000198100000000000000008000000000001DC600000000 +0000000E000000000000001E000000000000000C400000000000001A000800000000000C8000000000001DC100000000 +0000000C000000007F030000000C00000000000000080000000000000000000000000000000800000000000000000000 +00000000C0000000000000008000000000000000000000000000000000000000000000001802000000C0000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000C0400000000001BF00000000 +0000000001FB0E78000000000000000000000000000000000000000000000000060000000000000000A000000007E000 +0000000000000000000000000000000000000010C0000000000000030000000000000004000000C20000000000005C80 +0000000000300FF000000000000000000000000000000000000000000080000200000000000000980000000000000000 +00000003FFF000000000000F000000000000000000000000000400000000000000000008CC3000000000000000000000 +000000000019800000002000000000000000000000000000000000000020C80000000000000000000000000000000000 +000000000000000000000000000016D80000000500000000000000000000000000000004018700000000000000000000 +000000000000100000000060000000000000000480380000000040000000000000000000000C70000000000000000000 +000000000000000000000000000000070000000C800000000000199E0000000C00000000060000000000340000000000 +0000000000E000000000002300000000000000005A060000000000020000000000000000000000000000000000000000 +000000004F030000000000000000000000000000580700000000000000000000000000000000D0000000000000000000 +400000000000004000000000000000000000000000000000000000000000000000000000010070000000000000000000 +000000000000000000000000000000000000000001BE000000000005000000000000000000000000F00E000000000010 +000000000200000001800000000000000080000000000000000000000000000000000000400080000000000000000000 +000000000012020000000000000000000000000000000000000000000000000000587C00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000060000000000008C03000000000000000000000 +000000000000000000000000000000000000000000001C00000000000000000000000000000000000000000000000000 +0000000000000000FFFE0000FFFFFFFF000000FF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//3552 bytes +enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000110", +x" +00000100000001A000004D00", +x" +0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020B02020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000001000000030002000500040007000600090008000B000A000D000C +0000000E000F000000000000001000000012001100140013001600150000000000000017000000000000000000000000 +000000000000000000190018000000000000001A00000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000001B001D001C001F001E0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000220021 +0023000000250024000000000000000000000000000000260027000000290028002B002A002D002C002F002E00310030 +003300320000003400360035003800370000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000390000000000000000000000000000000000000000003A0000000000000000000000000000 +00000000003C003B00000000003D00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000003E0000000000000000000000000000000000000000000000000000000000000000003F0000 +0040000000000041000000000000000000000000000000420000000000000000003C0043000000440046004500000000 +004800470000000000000000000000000000000000490000000000000000000000000000000000000000000000000000 +004B004A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000 +00000000000000000000000000000000000003F800000000000000000000000000000000000000000000000000000000 +FFFE0000BFFFFFFF000000B60000000007FF000000000000FFFFF8000001000000000000000000009FC0000000003D9F +00020000FFFF0000000007FF00000000000000000001FFC000000000200FF800FBC0000000003EEF0E00000000000000 +FF80000000000000FFFFFC00FFFFFFFB000000071400000000FE21FE0000000C00000002500000000080201E4000000C +000000061000000000023986002300000000000610000000000021BEFC00000C00000002D000000000E0201E0000000C +0000000440000000008020010000000000000011D000000000603DC10000000C000000029000000000603DC50000000C +00000003580000000080201E0000000C0000000200000000805C8400000000000000000007F2000000007F8000000000 +000000001FF2000000007F00000000000300000002A00000000000007FFE0000FEFFE0DF1FFFFFFF0000004000000000 +0000000066FDE000C3000000001E0001200020640000000000000000000000000000000000000000E000000000000000 +00000000000000000000000000000000003C0000001C0000000C0000000C0000000000003FB00000200FFE4000000000 +0000B80000000000000000000000000000000060000002000000000000000000000000000E0401870000000000000000 +0000000000000000000000000000000009800000000000007F4000009FF81FE500000000FFFF000000007FFF00000000 +0000000F3FF000000000001C000FF8000000000300003F3C00000000000FA3400000000000CFF0000000000000000000 +0000000000000000FFF70000031021FD000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF +000010000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000 +0000000000000000000000000003800000000000000000000000000080000000000000000000000000000000FFFFFFFF +000000000000FC000000000000000000060000000000000000000000000000000000000000000000000000003FF78000 +C0000000000000000000000000030000000008440000106000000000000000000000000000000000000000308003FFFF +0000000000003FC0000BFF80000000000000000733C8000000000001000000200000000000667E000000100810000000 +00000000C19D000000000002004030000000000000000000000000000000000000000000000000000000000000002120 +40000000000000000000000000000000000000000000000000000000000000000000FFFF0000FFFF0000000000000000 +0000000000000000000000000000000000000000000000000000000000000000C0000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000 +0000000000000000000000000000000100000000000000000000000007C0000000000000000000000000000000000000 +0000F06E8700000000000000000000000000000000000000000000000000006000000000000000F00000000000003E00 +0000000000000000000000000000000000000000000000000000000000000000000000000000180000000000F0000000 +00000000000000000001FFC0000000000000003C00000000000000000000000000000002FF0000000000007F80190000 +0000000306780000000000040000000000000007001FEF800000000000080000000000037FC0000000009E0100000000 +0000000040F380000000000200000000000000000000000080000000000007F8000000035800000000802001001F1FC0 +00000000F90000000005C3A50000000600000000FF0000004000005C0000000000000000A5F900000000000D00000000 +0000000000000000000000000000000000000000B03C8000300000010000000000000000A7F800000000000100000000 +0000000000FF28000000000000000000A000000000000FBC000000000000000000000000000000000000000000000000 +0000000006FF800000000000000000000000000000000000000000000000000000000000780100000000000800000000 +00000000000000000CF0000000000001000007FE79F800000E7E008000000000037FFC00000000000000000000000000 +00000000BF7F00000000000000000000FFFC0000006DFCFF000000000000000000000000B47E0000000000BF00000000 +00A300000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000 +0000000307C000000400000700000000000000000000000000000000000000000000000000000000003FFF8100000000 +00000000000000000000000000000000C00000000000E3FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000001F000000000000007F00000000000000000000 +000000000000000000000000000000000000000000000000000080000000000000078000000000000000000000030010 +0000000000000000000000000000000060000000000000000000000000000000FFFFFFFFFFFF3FFF0000007F00000000 +00000000000000000000000000000000000000000000000000000000F807E3E000000FE700003C000000000000000000 +00000000000000000000001C0000000000000000000000000000000000000000FFFFFFFFF87FFFFFFFFFFFFF00201FFF +F80000100000FFFE0000000000000000F9FFFF7F000007DB000000000000000000008000000000000000000000000000 +000000000000000000000000000000000000000000004000000000000000F00000000000000000000000000000000000 +0000000000000000000000000000F000000000000000000000000000000000000000000000000000000000000000C000 +000000000000000000000000000000000000000000000000007F0000000000000000000000000000000007F000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8000000 +00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000000000000000000000000000000000000000000000000000000000000000", +); //1344 bytes -enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x90], [ 0x100, 0xa0, 0x1800], [ 0x2020100, 0x2020202, 0x2020202, 0x3020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x30002, 0x40001, 0x60005, 0x80007, 0x90001, 0xa0001, 0x10001, 0x10001, 0x1000b, 0x1000c, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xe000d, 0x10000f, 0x11000d, 0x130012, 0x150014, 0x1000d, 0xd000d, 0x16000d, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000004, 0x0, 0x0, 0x3f00000, 0x600, 0x0, 0x0, 0xc000000, 0x100, 0x0, 0x0, 0x100, 0x0, 0x8000, 0x70ffe00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400c00, 0x1, 0x78000000, 0xfff7ffbf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff003f, 0xffffffff, 0xffffffff, 0xffffffff, 0x2057ff3f, 0x180102, 0xb85090, 0xf8, 0xe00000, 0x80010002, 0x0, 0x0, 0x0, 0x300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180000e0, 0x0, 0x210000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20010000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2800000, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xe000, 0x8000, 0x0, 0xc003f000, 0x7fe4000, 0xffffe000, 0xffffffff, 0x3f, 0x400fffe, 0xf7fc8000, 0xfffffe00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ffffff, 0xffffffff, 0x3fffffff, 0xffffffc0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0xfff00000, 0x0, 0x0, 0xffe00000, 0xffffffff, 0xf000, 0x0, 0xfc00ff00, 0x0, 0xff00, 0xffffc000, 0xffffffff, 0xffffffff, 0xfffff000, 0xf7ffffff, 0xffffffbf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000090", +x" +00000100000000A000001800", +x" +020201000202020202020202030202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100030002000400010006000500080007 +00090001000A000100010001000100010001000B0001000C000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000E000D0010000F0011000D00130012001500140001000D000D000D0016000D00010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000010000000000002000000000000000000000000000000000000000000 +0000000002000004000000000000000003F000000000060000000000000000000C000000000001000000000000000000 +000001000000000000008000070FFE000000000000000000000000000000000000000000000000000000000400000000 +000000000000000000000000000000000000000000400C000000000178000000FFF7FFBFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF003FFFFFFFFFFFFFFFFFFFFFFFFF2057FF3F0018010200B85090000000F800E00000800100020000000000000000 +0000000000300000000000000000000000000000000000000000000000000000180000E0000000000021000000000000 +000000000000000000000000000000000000000020010000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000002800000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000E0000000800000000000C003F00007FE4000FFFFE000FFFFFFFF0000003F +0400FFFEF7FC8000FFFFFE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF3FFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFF00000 +0000000000000000FFE00000FFFFFFFF0000F00000000000FC00FF00000000000000FF00FFFFC000FFFFFFFFFFFFFFFF +FFFFF000F7FFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF0000000000000000000000000000000000000000000000000000000000000000", +); } @@ -39,19 +297,277 @@ enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, static if (size_t.sizeof == 8) { //832 bytes -enum hangulLVTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x40], [ 0x100, 0x80, 0xa00], [ 0x2010000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000300020001, 0x1000700060005, 0x5000400030002, 0x2000100070006, 0x6000500040003, 0x3000200010007, 0x7000600050004, 0x4000300020001, 0x1000700060005, 0x5000400030002, 0x8000100070006, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000010000001, 0x1000000100000, 0x10000001000, 0x1000000100000010, 0x10000001000000, 0x100000010000, 0x1000000100, 0x100000010000001, 0x1000000100000, 0x10000001000, 0x1000000100000010, 0x10000001000000, 0x100000010000, 0x1000000100, 0x100000010000001, 0x1000000100000, 0x10000001000, 0x1000000100000010, 0x10000001000000, 0x100000010000, 0x1000000100, 0x100000010000001, 0x1000000100000, 0x10000001000, 0x1000000100000010, 0x10000001000000, 0x100000010000, 0x1000000100, 0x10000001000000, 0x100000010000, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum hangulLVTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000040", +x" +000000000000010000000000000000800000000000000A00", +x" +000201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000040003000200010001000700060005000500040003000200020001000700060006000500040003 +000300020001000700070006000500040004000300020001000100070006000500050004000300020008000100070006 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000100000010000001000100000010000000000100000010001000000100000010 +001000000100000000001000000100000000001000000100010000001000000100010000001000000000010000001000 +100000010000001000100000010000000000100000010000000000100000010001000000100000010001000000100000 +000001000000100010000001000000100010000001000000000010000001000000000010000001000100000010000001 +000100000010000000000100000010001000000100000010001000000100000000001000000100000000001000000100 +001000000100000000001000000100000000000000000100000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); //832 bytes -enum hangulLVTTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x40], [ 0x100, 0x80, 0xa00], [ 0x2010000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000300020001, 0x1000700060005, 0x5000400030002, 0x2000100070006, 0x6000500040003, 0x3000200010007, 0x7000600050004, 0x4000300020001, 0x1000700060005, 0x5000400030002, 0x8000100070006, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfeffffffeffffffe, 0xfffeffffffefffff, 0xfffffeffffffefff, 0xeffffffeffffffef, 0xffeffffffeffffff, 0xffffeffffffeffff, 0xffffffeffffffeff, 0xfeffffffeffffffe, 0xfffeffffffefffff, 0xfffffeffffffefff, 0xeffffffeffffffef, 0xffeffffffeffffff, 0xffffeffffffeffff, 0xffffffeffffffeff, 0xfeffffffeffffffe, 0xfffeffffffefffff, 0xfffffeffffffefff, 0xeffffffeffffffef, 0xffeffffffeffffff, 0xffffeffffffeffff, 0xffffffeffffffeff, 0xfeffffffeffffffe, 0xfffeffffffefffff, 0xfffffeffffffefff, 0xeffffffeffffffef, 0xffeffffffeffffff, 0xffffeffffffeffff, 0xffffffeffffffeff, 0xffeffffffeffffff, 0xffffeffffffeffff, 0xffffffeff, 0x0, 0x0, 0x0, 0x0, 0x0]); -//896 bytes -enum prependTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x40], [ 0x100, 0x80, 0xc00], [ 0x101010101010100, 0x101010101010102, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000100000000, 0x3, 0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60005, 0x0, 0x800070000, 0xa000000090000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x20000000, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30000, 0x400000000, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x2000000000000000, 0x2000, 0x0, 0x0, 0x0, 0xc, 0x8000000000000000, 0x2, 0x0, 0x0, 0x400000000000000, 0x0, 0x3f0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +enum hangulLVTTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000040", +x" +000000000000010000000000000000800000000000000A00", +x" +000201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000040003000200010001000700060005000500040003000200020001000700060006000500040003 +000300020001000700070006000500040004000300020001000100070006000500050004000300020008000100070006 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FEFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFEF +FFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFF +EFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFEFFFEFFFFFFEFFFFF +FFFFFEFFFFFFEFFFEFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFE +FFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFEFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFFFFFFFFEFFFFFFEFF +FFEFFFFFFEFFFFFFFFFFEFFFFFFEFFFF0000000FFFFFFEFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//928 bytes +enum prependTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000040", +x" +000000000000010000000000000000800000000000000D00", +x" +010101010101010001010101010101020101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000200010000000000000000000000030000000000040000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000070000000600050000000000000000 +0000000900080000000B0000000A00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000003F000000000000000000000000000000000000000020000000 +000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000003000000000004000000000000000000000000000000000000400000000000000000000000000000000000 +000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000 +0000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000020000 +800000000000000000000000000000020000000000000000000000000000000004000000000000000000000000000000 +00000000000003F000000000000000000000000000000000000000000000004000000000000000000000000000000000 +000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); //1280 bytes -enum controlTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x68], [ 0x100, 0x120, 0xe00], [ 0x302020202020100, 0x206050202020402, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020207, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000100010000, 0x1000200010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010003, 0x1000100010001, 0x1000100010004, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x6000500010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010007, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010008, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100090001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0xc000c000b000a, 0xc000c000c000c, 0xc000c000c000c, 0xc000c000c000c, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0xffffdbff, 0x8000000000000000, 0x2000ffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x7f000000c800, 0xffff00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000000000000, 0x0, 0x0, 0x0, 0xfff000000000000, 0xffff000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf00000000, 0x0, 0x0, 0x7f8000000000000, 0x0, 0x0, 0xffffffff, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0xffff000000000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0]); -//1856 bytes -enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x58], [ 0x100, 0xe0, 0x2400], [ 0x101020101010100, 0x105010104010103, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x101010101010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0x8, 0x9000000000000, 0xc000b000a0000, 0xd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x110010000f000e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15001400130012, 0x19001800170016, 0x1c001b001a, 0x20001f001e001d, 0x0, 0x0, 0x0, 0x21000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x220000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc800000000000008, 0xde01, 0x800000000000000c, 0x1981, 0xc000000000000008, 0x1, 0xc000000000000008, 0x1a01, 0xc, 0x1981, 0x8000000000000000, 0x1dc6, 0xe, 0x1e, 0x400000000000000c, 0x8000000000d9b, 0x800000000000000c, 0x1dc1, 0xc, 0xc00007f030000, 0x8000000000000, 0x0, 0x8000000000000, 0x0, 0xc000000000000000, 0x8000000000000000, 0x0, 0x0, 0x1802000000000000, 0xc00000, 0x10, 0x0, 0x10000000200000, 0x0, 0xc040000000000000, 0x1bf, 0x1fb0e7800000000, 0x0, 0x0, 0x0, 0x6000000, 0x7e00000a00000, 0x0, 0x0, 0xe800000000000010, 0x1b, 0x4c200000004, 0xc5c8000000000, 0x300ff000000000, 0x0, 0x0, 0x80000200000000, 0x9800000000, 0x0, 0xfff0000000000003, 0xf, 0x0, 0xc0000, 0xcc30000000000008, 0x1, 0x19800000000000, 0x2000, 0x0, 0x20c80000000000, 0x0, 0x0, 0x0, 0x16d800000000, 0x5, 0x0, 0x187000000000004, 0x0, 0x100000000000, 0x60, 0x8038000000000004, 0x4001, 0x2c700000000000, 0x0, 0x0, 0x700000000, 0x800000000000000c, 0xc0000399e, 0x0, 0x0, 0xe0000000000000, 0x23, 0x5a06000000000000, 0x2, 0x0, 0x0, 0x4f03000000000000, 0x0, 0x5807000000000000, 0x0, 0x40d00000000000, 0x0, 0x4000000000, 0x0, 0x0, 0x0, 0x100700000000000, 0x0, 0x0, 0x0, 0x21be000000000000, 0x5, 0x0, 0x10f00e0000, 0x200000000000000, 0x1800000, 0x800000, 0x0, 0x4000800000000000, 0x0, 0x12020000000000, 0x0, 0x0, 0x0, 0x587c00, 0x0, 0x0, 0x0, 0x0, 0x60000000000000, 0xc030000000000008, 0x2, 0x0, 0x0, 0x0, 0xfffffffffffe0000, 0xff, 0x3000000000000, 0x0, 0x204000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3488 bytes -enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x88], [ 0x100, 0x1a0, 0x4b00], [ 0x402030202020100, 0xa09080207020605, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x20202020202020b, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000000000, 0x5000400030002, 0x9000800070006, 0xd000c000b000a, 0xf00000000000e, 0x10000000000000, 0x14001300120011, 0x160015, 0x17, 0x0, 0x0, 0x190018, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b00000000, 0x1f001e001d001c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000000000, 0x22002100000000, 0x25002400230000, 0x0, 0x2600000000, 0x29002800270000, 0x2d002c002b002a, 0x310030002f002e, 0x3400330032, 0x38003700360035, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x0, 0x0, 0x0, 0x0, 0x3b003a00000000, 0x3c000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3d, 0x0, 0x0, 0x0, 0x3e000000000000, 0x40003f0000, 0x0, 0x4100000000, 0x0, 0x43003b0042, 0x44, 0x460045, 0x0, 0x47000000000000, 0x0, 0x0, 0x0, 0x490048, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0, 0x3f8, 0x0, 0x0, 0x0, 0xbffffffffffe0000, 0xb6, 0x7ff0000, 0x10000fffff800, 0x0, 0x3d9f9fc00000, 0xffff000000020000, 0x7ff, 0x1ffc000000000, 0x200ff80000000000, 0x3eeffbc00000, 0xe000000, 0xff000000, 0xfffffffbfffffc00, 0x1400000000000007, 0xc00fe21fe, 0x5000000000000002, 0x4000000c0080201e, 0x1000000000000006, 0x23000000023986, 0x1000000000000006, 0xfc00000c000021be, 0xd000000000000002, 0xc00e0201e, 0x4000000000000004, 0x802001, 0xd000000000000011, 0xc00603dc1, 0x9000000000000002, 0xc00603044, 0x5800000000000003, 0xc0080201e, 0x2, 0x805c8400, 0x7f2000000000000, 0x7f80, 0x1ff2000000000000, 0x7f00, 0x2a0000003000000, 0x7ffe000000000000, 0x1ffffffffeffe0df, 0x40, 0x66fde00000000000, 0x1e0001c3000000, 0x20002064, 0x0, 0x0, 0xe0000000, 0x0, 0x0, 0xc0000001c0000, 0xc0000000c0000, 0x3fb0000000000000, 0x200ffe40, 0xb800, 0x0, 0x20000000060, 0x0, 0xe04018700000000, 0x0, 0x0, 0x0, 0x9800000, 0x9ff81fe57f400000, 0xffff000000000000, 0x7fff, 0x17f000000000000f, 0xff80000000004, 0x3b3c00000003, 0x3a34000000000, 0xcff00000000000, 0x0, 0x0, 0x31021fdfff70000, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0x1000, 0x0, 0x0, 0x1ffffffff0000, 0x0, 0x0, 0x0, 0x3800000000000, 0x0, 0x8000000000000000, 0x0, 0xffffffff00000000, 0xfc0000000000, 0x0, 0x6000000, 0x0, 0x0, 0x3ff7800000000000, 0xc0000000, 0x3000000000000, 0x106000000844, 0x0, 0x0, 0x8003ffff00000030, 0x3fc000000000, 0x3ff80, 0x33c8000000000007, 0x2000000000, 0x667e0000000000, 0x1000000000001008, 0xc19d000000000000, 0x40300000000002, 0x0, 0x0, 0x0, 0x212000000000, 0x40000000, 0x0, 0x0, 0x0, 0xffff0000ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x2000000000000000, 0x0, 0x0, 0x0, 0x100000000, 0x0, 0x7c0000000000000, 0x0, 0x0, 0x870000000000f06e, 0x0, 0x0, 0x6000000000, 0xf000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180000000000, 0xe000000000000000, 0x0, 0x1ffc0, 0x3c, 0x0, 0xff00000000000002, 0x801900000000007f, 0x678000000000003, 0x4, 0x1fef8000000007, 0x8000000000000, 0x7fc0000000000003, 0x9e00, 0x40d3800000000000, 0x2, 0x0, 0x7f880000000, 0x5800000000000003, 0x1f1fc000800001, 0x0, 0x0, 0xff00000000000000, 0x4000005c, 0xa5f9000000000000, 0xd, 0x0, 0x0, 0xb03c800000000000, 0x30000001, 0xa7f8000000000000, 0x1, 0xbf280000000000, 0x0, 0xfbce0000000, 0x0, 0x0, 0x0, 0x6ff800000000000, 0x0, 0x0, 0x0, 0x5801000000000000, 0x8, 0x0, 0x10cf00000, 0x79f80000000007fe, 0xe7e0080, 0x37ffc00, 0x0, 0xbf7f000000000000, 0x0, 0x6dfcfffffc0000, 0x0, 0xb47e000000000000, 0xbf, 0xa30000, 0x0, 0x0, 0x0, 0x0, 0x18000000000000, 0x7c0000000000003, 0x5, 0x0, 0x0, 0x0, 0x3fff81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f000000000000, 0x7f000000000000, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x78000, 0x1000000000, 0x0, 0x0, 0x60000000, 0x0, 0xffff3fffffffffff, 0x7f, 0x0, 0x0, 0x0, 0xf807c3a000000000, 0x3c0000000fe7, 0x0, 0x0, 0x1c, 0x0, 0x0, 0xf87fffffffffffff, 0x201fffffffffff, 0xfffef8000010, 0x0, 0x7dbf9ffff7f, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x400000000000, 0xf00000000000, 0x0, 0x0, 0x0, 0xf00000000000, 0x0, 0x0, 0x0, 0x7f0000, 0x0, 0x7f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf800000000000000, 0xffffffff00000000, 0xffffffffffffffff, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0]); +enum controlTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000068", +x" +000000000000010000000000000001200000000000000E00", +x" +030202020202010002060502020204020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020207020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000100010000000100020001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010003000100010001000100010001000100040001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000600050001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000700010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100080001000100010001000100010001000100010001000100010001000100010001 +0001000100090001000100010001000100010001000100010001000100010001000C000C000B000A000C000C000C000C +000C000C000C000C000C000C000C000C0001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100000000FFFFDBFF800000000000000000002000FFFFFFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000 +000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000 +00007F000000C8000000FFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000080000000000000000000000000000000000000000000000000000000000000000FFF000000000000 +FFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000F000000000000000000000000000000000000000007F800000000000000000000000000000000000000000000 +00000000FFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +0000000000000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000000000000000000000000000000000000000000000000000000000000", +); +//1792 bytes +enum spacingMarkTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000050", +x" +000000000000010000000000000000C00000000000002400", +x" +010102010101010001010101040101030101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101010101010000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000030002000100000007000600050004 +00000000000000080009000000000000000C000B000A0000000000000000000D00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000110010000F000E000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001500140013001200190018001700160000001C001B001A0020001F001E001D00000000002100000000000000000000 +000000000000000000220000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +C800000000000008000000000000DE01800000000000000C0000000000001981C0000000000000080000000000000001 +C0000000000000080000000000001A01000000000000000C000000000000198180000000000000000000000000001DC6 +000000000000000E000000000000001E400000000000000C000800000000001A800000000000000C0000000000001DC1 +000000000000000C000C00007F0300000008000000000000000000000000000000080000000000000000000000000000 +C00000000000000080000000000000000000000000000000000000000000000018020000000000000000000000C00000 +0000000000000010000000000000000000000000000000000000000000000000C04000000000000000000000000001BF +01FB0E780000000000000000000000000000000000000000000000000000000000000000060000000007E00000A00000 +00000000000000000000000000000000C0000000000000100000000000000003000000C20000000400005C8000000000 +00300FF00000000000000000000000000000000000000000008000020000000000000098000000000000000000000000 +FFF0000000000003000000000000000F00000000000000000000000000040000CC300000000000080000000000000000 +0019800000000000000000000000200000000000000000000020C8000000000000000000000000000000000000000000 +0000000000000000000016D8000000000000000000000005000000000000000001870000000000040000000000000000 +0000100000000000000000000000006080380000000000040000000000004000000C7000000000000000000000000000 +00000000000000000000000700000000800000000000000C0000000C0000199E06000000000000000000000000003400 +00E000000000000000000000000000235A06000000000000000000000000000200000000000000000000000000000000 +4F030000000000000000000000000000580700000000000000000000000000000000D000000000000000000000000000 +000000404000000000000000000000000000000000000000000000000000000001007000000000000000000000000000 +0000000000000000000000000000000001BE0000000000000000000000000005000000000000000000000010F00E0000 +020000000000000000000000018000000000000000800000000000000000000040008000000000000000000000000000 +00120200000000000000000000000000000000000000000000000000000000000000000000587C000000000000000000 +0000000000000000000000000000000000000000000000000060000000000000C0300000000000080000000000000000 +0000000000000000000000000000000000001C0000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFFFFFE000000000000000000FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//3552 bytes +enum graphemeExtendTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000088", +x" +000000000000010000000000000001A00000000000004D00", +x" +04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202020202020202020B020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000000000000050004000300020009000800070006000D000C000B000A +000F00000000000E00100000000000000014001300120011000000000016001500000000000000170000000000000000 +00000000000000000000000000190018000000000000001A000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000001B00000000001F001E001D001C0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000200000000000000022002100000000 +0025002400230000000000000000000000000026000000000029002800270000002D002C002B002A00310030002F002E +000000340033003200380037003600350000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000390000000000000000000000000000000000000000003A00000000000000000000 +003C003B00000000003D0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000003E000000000000000000000000000000000000000000000000003F000000000000 +000000410040000000000000000000000000004200000000000000000000000000000044003C00430000000000460045 +000000000048004700000000000000000049000000000000000000000000000000000000000000000000000000000000 +00000000004B004A00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000 +0000000000000000000000000000000000000000000003F8000000000000000000000000000000000000000000000000 +BFFFFFFFFFFE000000000000000000B60000000007FF000000010000FFFFF800000000000000000000003D9F9FC00000 +FFFF00000002000000000000000007FF0001FFC000000000200FF8000000000000003EEFFBC00000000000000E000000 +00000000FF800000FFFFFFFBFFFFFC0014000000000000070000000C00FE21FE50000000000000024000000C0080201E +100000000000000600230000000239861000000000000006FC00000C000021BED0000000000000020000000C00E0201E +40000000000000040000000000802001D0000000000000110000000C00603DC190000000000000020000000C00603DC5 +58000000000000030000000C0080201E000000000000000200000000805C840007F20000000000000000000000007F80 +1FF20000000000000000000000007F0002A00000030000007FFE0000000000001FFFFFFFFEFFE0DF0000000000000040 +66FDE00000000000001E0001C300000000000000200020640000000000000000000000000000000000000000E0000000 +00000000000000000000000000000000001C0000003C0000000C0000000C00003FB000000000000000000000200FFE40 +000000000000B8000000000000000000000002000000006000000000000000000E040187000000000000000000000000 +0000000000000000000000000000000000000000098000009FF81FE57F400000FFFF0000000000000000000000007FFF +3FF000000000000F000FF8000000001C00003F3C00000003000FA3400000000000CFF000000000000000000000000000 +0000000000000000031021FDFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF +0000000000001000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000 +00000000000000000003800000000000000000000000000080000000000000000000000000000000FFFFFFFF00000000 +0000FC000000000000000000000000000000000006000000000000000000000000000000000000003FF7800000000000 +00000000C000000000030000000000000000106000000844000000000000000000000000000000008003FFFF00000030 +00003FC00000000000000000000BFF8033C8000000000007000000200000000100667E00000000001000000000001008 +C19D00000000000000403000000000020000000000000000000000000000000000000000000000000000212000000000 +00000000400000000000000000000000000000000000000000000000000000000000FFFF0000FFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000C00000000000000000000000 +000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000 +00000000000000000000000100000000000000000000000007C000000000000000000000000000000000000000000000 +870000000000F06E000000000000000000000000000000000000006000000000000000F00000000000003E0000000000 +00000000000000000000000000000000000000000000000000000000000000000000180000000000F000000000000000 +0000000000000000000000000001FFC0000000000000003C0000000000000000FF00000000000002801900000000007F +06780000000000030000000000000004001FEF800000000700080000000000007FC00000000000030000000000009E01 +40F380000000000000000000000000020000000000000000000007F8800000005800000000000003001F1FC000802001 +F900000000000000000000060005C3A5FF00000000000000000000004000005CA5F9000000000000000000000000000D +00000000000000000000000000000000B03C8000000000000000000030000001A7F80000000000000000000000000001 +00FF280000000000000000000000000000000FBCA0000000000000000000000000000000000000000000000000000000 +06FF80000000000000000000000000000000000000000000000000000000000078010000000000000000000000000008 +0000000000000000000000010CF0000079F80000000007FE000000000E7E008000000000037FFC000000000000000000 +BF7F0000000000000000000000000000006DFCFFFFFC00000000000000000000B47E00000000000000000000000000BF +0000000000A3000000000000000000000000000000000000000000000000000000000000000000000018000000000000 +07C0000000000003000000000400000700000000000000000000000000000000000000000000000000000000003FFF81 +000000000000000000000000000000000000E3FFC0000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000001F000000000000007F0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000800000000000000780000003001000000000 +0000000000000000000000000000000000000000600000000000000000000000FFFF3FFFFFFFFFFF000000000000007F +000000000000000000000000000000000000000000000000F807E3E00000000000003C0000000FE70000000000000000 +0000000000000000000000000000001C00000000000000000000000000000000F87FFFFFFFFFFFFF00201FFFFFFFFFFF +0000FFFEF80000100000000000000000000007DBF9FFFF7F000000000000000000000000000080000000000000000000 +0000000000000000000000000000000000004000000000000000F0000000000000000000000000000000000000000000 +00000000000000000000F000000000000000000000000000000000000000000000000000000000000000C00000000000 +00000000000000000000000000000000000000000000000000000000007F0000000000000000000000000000000007F0 +00000000000000000000000000000000000000000000000000000000000000000000000000000000F800000000000000 +FFFFFFFF00000000FFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000", +); //1344 bytes -enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x48], [ 0x100, 0xa0, 0x1800], [ 0x202020202020100, 0x302020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000100010000, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x4000100030002, 0x8000700060005, 0xa000100090001, 0x1000100010001, 0x1000c0001000b, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x10000f000e000d, 0x1300120011000d, 0x1000d00150014, 0x16000d000d000d, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x0, 0x0, 0x420000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000000000000, 0x200, 0x0, 0x0, 0x200000400000000, 0x0, 0x60003f00000, 0x0, 0x1000c000000, 0x0, 0x100, 0x70ffe0000008000, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x400c0000000000, 0x7800000000000001, 0xfffffffffff7ffbf, 0xffffffffffffffff, 0xffffffffffff003f, 0xffffffffffffffff, 0x1801022057ff3f, 0xf800b85090, 0x8001000200e00000, 0x0, 0x30000000000000, 0x0, 0x0, 0x0, 0x180000e0, 0x210000, 0x0, 0x0, 0x2001000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2800000, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x80000000e000, 0xc003f00000000000, 0xffffe00007fe4000, 0x3fffffffff, 0xf7fc80000400fffe, 0xfffffffffffffe00, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x7ffffffffffffff, 0x3fffffffffffffff, 0xffffffffffffffc0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0xfff0000000000000, 0x0, 0xffffffffffe00000, 0xf000, 0xfc00ff00, 0xffffc0000000ff00, 0xffffffffffffffff, 0xf7fffffffffff000, 0xffffffffffffffbf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffffffffffffff, 0x0, 0x0, 0x0, 0x0]); +enum Extended_PictographicTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000048", +x" +000000000000010000000000000000A00000000000001800", +x" +020202020202010003020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000100010000000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100040001000300020008000700060005 +000A00010009000100010001000100010001000C0001000B000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +0010000F000E000D001300120011000D0001000D001500140016000D000D000D00010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000001000000000000000000000000000020000000000000000000000000000000000 +020000040000000000000000000000000000060003F000000000000000000000000001000C0000000000000000000000 +0000000000000100070FFE00000080000000000000000000000000000000000000000000000000000000000000000004 +0000000000000000000000000000000000400C00000000007800000000000001FFFFFFFFFFF7FFBFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF003FFFFFFFFFFFFFFFFF001801022057FF3F000000F800B850908001000200E000000000000000000000 +003000000000000000000000000000000000000000000000000000000000000000000000180000E00000000000210000 +000000000000000000000000000000002001000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000028000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000080000000E000C003F00000000000FFFFE00007FE40000000003FFFFFFFFF +F7FC80000400FFFEFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFF0000000000000 +0000000000000000FFFFFFFFFFE00000000000000000F00000000000FC00FF00FFFFC0000000FF00FFFFFFFFFFFFFFFF +F7FFFFFFFFFFF000FFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000", +); } diff --git a/std/internal/unicode_norm.d b/std/internal/unicode_norm.d index d459357896f..d1d2fe5315c 100644 --- a/std/internal/unicode_norm.d +++ b/std/internal/unicode_norm.d @@ -18,28 +18,496 @@ package(std): static if (size_t.sizeof == 4) { -//1728 bytes -enum nfcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xc0], [ 0x100, 0x100, 0x1e00], [ 0x2020100, 0x3020202, 0x2020204, 0x2050202, 0x2020202, 0x6020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x2, 0x30000, 0x50004, 0x70006, 0x80000, 0xa0009, 0x0, 0x0, 0x0, 0x0, 0xb0000, 0x0, 0xc0000, 0xe000d, 0xf0000, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x120000, 0x140013, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160015, 0x170000, 0x190018, 0x0, 0x1a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x120012, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x81a9fdf, 0x10361f8, 0x3f, 0x40100000, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0xff000000, 0x0, 0x0, 0x40000000, 0xb0800000, 0x0, 0x0, 0x480000, 0x4e000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x30c00000, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x600004, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x80008400, 0x0, 0x0, 0x0, 0x10842008, 0x1680200, 0x20080002, 0x2001084, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ffffe, 0x0, 0xffffff00, 0x7, 0x0, 0x0, 0x200000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2aaa0000, 0x0, 0x48000000, 0x8080a00, 0x2a00c808, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6000000, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fe53fff, 0xfffffc65, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xa0000000, 0x5f7ffc00, 0x7fdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24010000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x1f, 0x0, 0xf8000000, 0x1, 0x0, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2048 bytes -enum nfdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xe0], [ 0x100, 0x140, 0x2400], [ 0x2020100, 0x5040302, 0x2020206, 0x2070202, 0x2020202, 0x8020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x50006, 0x70005, 0x90008, 0xb000a, 0xc0005, 0x5000d, 0x50005, 0x50005, 0x50005, 0x50005, 0xe0005, 0x50005, 0x10000f, 0x120011, 0x140013, 0x50005, 0x50005, 0x50005, 0x50015, 0x50005, 0x50005, 0x50016, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x170017, 0x180017, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x170005, 0x1a0019, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x1c001b, 0x1d0005, 0x1f001e, 0x50005, 0x200005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x210005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x170017, 0x50022, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x50005, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e7effbf, 0xbe7effbf, 0xfffcffff, 0x7ef1ff3f, 0xfff3f1f8, 0x7fffff3f, 0x0, 0x18003, 0xdfffe000, 0xff31ffcf, 0xcfffffff, 0xfffc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x40100000, 0x1d7e0, 0x1fc00, 0x187c00, 0x0, 0x200708b, 0x2000000, 0x708b0000, 0xc00000, 0x0, 0x0, 0xfccf0006, 0x33ffcfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x0, 0x0, 0x80005, 0x0, 0x0, 0x120200, 0xff000000, 0x0, 0x0, 0x0, 0xb0001800, 0x0, 0x0, 0x480000, 0x4e000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30001900, 0x0, 0x100000, 0x0, 0x1c00, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0xd81, 0x0, 0x0, 0x0, 0x1c00, 0x0, 0x0, 0x0, 0x74000000, 0x0, 0x0, 0x0, 0x10842008, 0x1680200, 0x20080002, 0x2001084, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45540, 0x28000000, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xbffffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0x5fdfffff, 0xefcfffde, 0x3fdcffff, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc40, 0x0, 0x0, 0xc000000, 0x4000, 0xe000, 0x0, 0x1210, 0x50, 0x292, 0x333e005, 0x333, 0xf000, 0x0, 0x3c0f, 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x55555000, 0x36db02a5, 0x40100000, 0x55555000, 0x36db02a5, 0x47900000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, 0x7fe53fff, 0xfffffc65, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xa0000000, 0x5f7ffc00, 0x7fdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14000000, 0x800, 0x0, 0x0, 0x0, 0xc000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc000000, 0x0, 0x0, 0x0, 0x1000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x1f, 0x0, 0xf8000000, 0x1, 0x0, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2848 bytes -enum nfkcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xe0], [ 0x100, 0x140, 0x3d00], [ 0x2020100, 0x4020302, 0x2020205, 0x7060202, 0x2020202, 0x8020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x40006, 0x70004, 0x90008, 0xb000a, 0xd000c, 0xf000e, 0x40004, 0x40004, 0x40004, 0x40004, 0x100004, 0x110004, 0x130012, 0x150014, 0x170016, 0x40018, 0x40004, 0x40004, 0x40019, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x230022, 0x40004, 0x240004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x210004, 0x260025, 0x270021, 0x290028, 0x40004, 0x40004, 0x40004, 0x2a0004, 0x40004, 0x40004, 0x40004, 0x40004, 0x2c002b, 0x2d0004, 0x2f002e, 0x40004, 0x300004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x310004, 0x40004, 0x330032, 0x350034, 0x40004, 0x40004, 0x40004, 0x40004, 0x40036, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40037, 0x380004, 0x40039, 0x40004, 0x40004, 0x40004, 0x3a0004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x210021, 0x4003b, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x40004, 0x0, 0x0, 0x0, 0x0, 0x0, 0x773c8501, 0x0, 0x0, 0x0, 0x800c0000, 0x201, 0x80000000, 0x0, 0x0, 0x1ff0, 0xe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ff0000, 0x3f000000, 0x1f, 0x81a9fdf, 0x10361f8, 0x3f, 0x44100000, 0xb0, 0x0, 0x7f0000, 0x2370000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x1e00000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0xff000000, 0x0, 0x0, 0x40000000, 0xb0800000, 0x0, 0x0, 0x480000, 0x4e000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x30c00000, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x600004, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x80008400, 0x0, 0x0, 0x80000, 0x0, 0x0, 0x0, 0x80000, 0x30000000, 0x0, 0x1000, 0x0, 0x10842008, 0x3e80200, 0x20080002, 0x2001084, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x3ffffe, 0x0, 0xffffff00, 0x7, 0x0, 0x0, 0x200000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7ff7000, 0xffffbfff, 0x10007ff, 0xf8000000, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2aaa0000, 0x0, 0xe8000000, 0xe808ea03, 0x6a00e808, 0x8207ff, 0x50d88070, 0x80800380, 0xfff30000, 0x1fff7fff, 0x100, 0x0, 0x0, 0x3e6ffeef, 0xfbfbbd57, 0xffff03e1, 0xffffffff, 0x200, 0x0, 0x0, 0x0, 0x0, 0x1b000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ff, 0x1000, 0x0, 0x0, 0x700000, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x80000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x1, 0x7400000, 0x0, 0x0, 0x9e000000, 0x0, 0x0, 0x80000000, 0x0, 0xfffe0000, 0xffffffff, 0xffffffff, 0xfffc7fff, 0x0, 0x0, 0x0, 0x7fffffff, 0xffffffff, 0xffff00ff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x31c0000, 0x0, 0x0, 0xf0000000, 0x200, 0x0, 0x0, 0x0, 0x0, 0x7fe53fff, 0xfffffc65, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xa0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0x1fff0000, 0x3ff0000, 0xffff0000, 0xfff7ff9f, 0xffd70f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x7f7f, 0x0, 0x0, 0x0, 0x0, 0xffffffbe, 0x7fdffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24010000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x1f, 0x0, 0xf8000000, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff, 0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff, 0x0, 0xffff0000, 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0xffffffef, 0xaf7fe96, 0xaa96ea84, 0x5ef7f796, 0xffffbff, 0xffffbee, 0x0, 0x0, 0xffff07ff, 0xffff7fff, 0xffff, 0x1c00, 0x10000, 0x0, 0x0, 0x0, 0xffff0007, 0xfffffff, 0x301ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2944 bytes -enum nfkdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xf0], [ 0x100, 0x160, 0x3e00], [ 0x2020100, 0x5040302, 0x2020206, 0x8070202, 0x2020202, 0x9020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x7000f, 0x70007, 0x70007, 0x70007, 0x70007, 0x100007, 0x110007, 0x130012, 0x150014, 0x170016, 0x70018, 0x70007, 0x70007, 0x70019, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x230022, 0x70007, 0x240007, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x210021, 0x250021, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x210007, 0x270026, 0x280021, 0x2a0029, 0x70007, 0x70007, 0x70007, 0x2b0007, 0x70007, 0x70007, 0x70007, 0x70007, 0x2d002c, 0x2e0007, 0x30002f, 0x70007, 0x310007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x320007, 0x70007, 0x340033, 0x360035, 0x70007, 0x70007, 0x70007, 0x70007, 0x70037, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70038, 0x390007, 0x7003a, 0x70007, 0x70007, 0x70007, 0x3b0007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x210021, 0x7003c, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x70007, 0x0, 0x0, 0x0, 0x0, 0x0, 0x773c8501, 0x3e7effbf, 0xbe7effbf, 0xfffcffff, 0xfefdff3f, 0xfff3f3f9, 0xffffff3f, 0x0, 0x18003, 0xdffffff0, 0xff3fffcf, 0xcfffffff, 0xfffc0, 0x0, 0x0, 0x0, 0x1ff0000, 0x3f000000, 0x1f, 0x0, 0x0, 0x1b, 0x44100000, 0x1d7f0, 0x1fc00, 0x7f7c00, 0x2370000, 0x200708b, 0x2000000, 0x708b0000, 0xc00000, 0x0, 0x0, 0xfccf0006, 0x33ffcfc, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x1e00000, 0x0, 0x0, 0x80005, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x120200, 0xff000000, 0x0, 0x0, 0x0, 0xb0001800, 0x0, 0x0, 0x480000, 0x4e000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30001900, 0x0, 0x100000, 0x0, 0x1c00, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0xd81, 0x0, 0x0, 0x0, 0x1c00, 0x0, 0x0, 0x0, 0x74000000, 0x0, 0x0, 0x80000, 0x0, 0x0, 0x0, 0x80000, 0x30000000, 0x0, 0x1000, 0x0, 0x10842008, 0x3e80200, 0x20080002, 0x2001084, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x45540, 0x28000000, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7ff7000, 0xffffbfff, 0x10007ff, 0xf8000000, 0xffffffff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff, 0x8207ff, 0x50d88070, 0x80800380, 0xfff30000, 0x1fff7fff, 0x100, 0x0, 0x0, 0x3e6ffeef, 0xfbfbbd57, 0xffff03e1, 0xffffffff, 0xc000200, 0x4000, 0xe000, 0x0, 0x1210, 0x1b050, 0x292, 0x333e005, 0x333, 0xf000, 0x0, 0x3c0f, 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ff, 0x1000, 0x0, 0x0, 0x700000, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x80000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x1, 0x7400000, 0x55555000, 0x36db02a5, 0xd8100000, 0x55555000, 0x36db02a5, 0xc7900000, 0x0, 0xfffe0000, 0xffffffff, 0xffffffff, 0xfffc7fff, 0x0, 0x0, 0x0, 0x7fffffff, 0xffffffff, 0xffff00ff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x31c0000, 0x0, 0x0, 0xf0000000, 0x200, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, 0x7fe53fff, 0xfffffc65, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xa0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0x1fff0000, 0x3ff0000, 0xffff0000, 0xfff7ff9f, 0xffd70f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x7f7f, 0x0, 0x0, 0x0, 0x0, 0xffffffbe, 0x7fdffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14000000, 0x800, 0x0, 0x0, 0x0, 0xc000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc000000, 0x0, 0x0, 0x0, 0x1000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x1f, 0x0, 0xf8000000, 0x1, 0x0, 0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff, 0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff, 0x0, 0xffff0000, 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0xffffffef, 0xaf7fe96, 0xaa96ea84, 0x5ef7f796, 0xffffbff, 0xffffbee, 0x0, 0x0, 0xffff07ff, 0xffff7fff, 0xffff, 0x1c00, 0x10000, 0x0, 0x0, 0x0, 0xffff0007, 0xfffffff, 0x301ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +//1856 bytes +enum nfcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000D0", +x" +000001000000012000002000", +x" +020201000302020205020204020602020202020207020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000010000000000000000000200030000000500040007000600080000 +000A000900000000000000000000000000000000000B000000000000000C0000000E000D000F00000000000000000000 +000000000000001000000000000000000000001100000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000012000000140013000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000160015001700000019001800000000001A0000000000000000000000000000 +001B00000000000000000000000000000000000000000000001C00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000001200120000001E0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +081A9FDF010361F80000003F401000000000008000000000000000000000000000000000000000000038000000000000 +000000000000000000000000000000000000000010000000FF000000000000000000000040000000B080000000000000 +00000000004800004E0000000000000000000000000000000000000000000000000000004000000030C0000000000000 +000000004000000000800000000000000000000000000000004000000000000000000000000000000060000400000000 +000000004000000000800000000000000000000000000000800084000000000000000000000000001084200801680200 +200800020200108400000000000000000000000000004000000000000000000000000000000000000000000000000000 +000000000000000000000000003FFFFE00000000FFFFFF00000000070000000000000000002000000000000000000000 +000000000000000000000000000000000000000000000000000000002AAA0000000000004800000008080A002A00C808 +00000003000000000000000000000000000000000000000000000000000000000000000000000C400000000000000000 +000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000 +06000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7FE53FFFFFFFFC65FFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFF03FFFFFF00000000A00000005F7FFC0000007FDB00000000 +000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000 +000000000000008000000000000000000000000000000000000000000000000000000000400000000080000000000000 +0000000009000000000003A4000000000000000000000000000000000000000000000000240100000000000000000000 +000000000000000000000000000000000000000000008000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000C0000000000003FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000180000000000000000000000000000000000000000000000000C00000000000001F +00000000F800000000000001000000003FFFFFFF00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//2208 bytes +enum nfdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000F0", +x" +000001000000016000002700", +x" +020201000504030207020206020802020202020209020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000003000200050004000500060007000500090008000B000A000C0005 +0005000D00050005000500050005000500050005000E0005000500050010000F00120011001400130005000500050005 +000500050005001500050005000500050005001600050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050017001700170017 +001700170017001700170017001700170017001700170017001700170017001700170017001700170017001700170017 +001700170017001700170017001700170017001700170017001700170018001700050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +00170005001A001900050005000500050005000500050005001B00050005000500050005000500050005000500050005 +001D001C001E00050020001F000500050021000500050005000500050005000500220005000500050005000500050005 +000500050005000500230005000500050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500240005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050017001700050025000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +0000000000000000000000000000000000000000000000003E7EFFBFBE7EFFBFFFFCFFFF7EF1FF3FFFF3F1F87FFFFF3F +0000000000018003DFFFE000FF31FFCFCFFFFFFF000FFFC0000000000000000000000000000000000000000000000000 +00000000000000000000001B401000000001D7E00001FC0000187C00000000000200708B02000000708B000000C00000 +0000000000000000FCCF0006033FFCFC0000000000000000000000000000000000000000000000000000000000000000 +000000000000007C0000000000000000000000000000000000080005000000000000000000120200FF00000000000000 +0000000000000000B00018000000000000000000004800004E0000000000000000000000000000000000000000000000 +00000000000000003000190000000000001000000000000000001C000000000000000000000000000000010000000000 +000000000000000000000D8100000000000000000000000000001C000000000000000000000000007400000000000000 +000000000000000010842008016802002008000202001084000000000000000000000000000000400000000000000000 +0000000000000000000000000000000000045540280000000000000B0000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BFFFFFFFFFFFFFFFFFFFFFF03FFFFFF3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFF +FFFFFFFF5FDFFFFFEFCFFFDE3FDCFFFF0000000300000000000000000000000000000000000000000000000000000000 +0000000000000C4000000000000000000C000000000040000000E000000000000000121000000050000002920333E005 +000003330000F0000000000000003C0F0000000000000600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000100000000000000000000000000000005555500036DB02A5 +401000005555500036DB02A547900000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF +FFFFFFFFFFFFFFFF03FFFFFF00000000A00000005F7FFC0000007FDB0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000 +14000000000008000000000000000000000000000000C000000000000000000000000000000000000000000000000000 +000000000000000000001800000000000002402800000000000001A00000000000000000000000000000000000000000 +0000000058000000000000000000000000000000000000000000000000000000000000000C0000000000000000000000 +000000000100000000000000000000000000000000000000000000000000000000000000000001FE0000000000000000 +000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000 +0000000000000000C00000000000001F00000000F800000000000001000000003FFFFFFF000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//3008 bytes +enum nfkcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000F0", +x" +000001000000016000004000", +x" +020201000402030206020205080702020202020209020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000003000200050004000400060007000400090008000B000A000D000C +000F000E0004000400040004000400040004000400100004001100040013001200150014001700160004001800040004 +0004000400040019001B001A001D001C001F001E00210020000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040023002200040004002400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400210004002600250027002100290028 +000400040004000400040004002A000400040004000400040004000400040004002C002B002D0004002F002E00040004 +003000040004000400040004000400040031000400040004000400040004000400040004000400040032000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040033000400040034000400040004003600350038003700040004000400040004000400040004 +000400390004000400040004000400040004000400040004000400040004003A003B00040004003C0004000400040004 +00040004003D000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +00040004000400040004000400040004002100210004003E000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +0000000000000000000000000000000000000000773C8501000000000000000000000000800C00000000020180000000 +000000000000000000001FF0000E0000000000000000000000000000000000000000000001FF00003F0000000000001F +081A9FDF010361F80000003F44100000000000B000000000007F00000237000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000 +00000000000000000038000001E00000000000000000000000000000000000000000000010000000FF00000000000000 +0000000040000000B08000000000000000000000004800004E0000000000000000000000000000000000000000000000 +000000004000000030C00000000000000000000040000000008000000000000000000000000000000040000000000000 +000000000000000000600004000000000000000040000000008000000000000000000000000000008000840000000000 +000000000008000000000000000000000000000000080000300000000000000000001000000000001084200803E80200 +200800020200108400000000000000000000000000004000000000000000000000000000000000000000000010000000 +000000000000000000000000003FFFFE00000000FFFFFF00000000070000000000000000002000000000000000000000 +0000000000000000000000000000000000000000F7FF7000FFFFBFFF010007FFF8000000FFFFFFFF0000000000000000 +000000000000000000000000000000000C0000000000000000000000000000000000000000000000000000002AAA0000 +00000000E8000000E808EA036A00E808008207FF50D8807080800380FFF300001FFF7FFF000001000000000000000000 +3E6FFEEFFBFBBD57FFFF03E1FFFFFFFF00000200000000000000000000000000000000000001B0000000000000000000 +000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000007FF00001000000000000000000000700000 +000000000000000010000000000000000000000000000000000000003000000000000000000000000000000000000000 +000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000 +80000000000000000000000000080000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF00000000 +000000010740000000000000000000009E00000000000000000000008000000000000000FFFE0000FFFFFFFFFFFFFFFF +FFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +3000000000000000000000000000000000000000000000000000000000010000000000000000000000000000031C0000 +0000000000000000F000000000000200000000000000000000000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF +FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF +FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F +FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF1CFCFCFC00007F7F +00000000000000000000000000000000FFFFFFBE07FDFFFF000000000000000000000000000000000000000000000000 +000000000400000000000000000000000000000000000080000000000000000000000000000000000000000000000000 +000000004000000000800000000000000000000009000000000003A40000000000000000000000000000000000000000 +000000002401000000000000000000000000000000000000000000000000000000000000000080000000000000000000 +0000000000010000000000000000000000000000000000000000000000000000C0000000000003FF0000000000000000 +000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFC0000003FFFFFF0000000000000000C00000000000001F +00000000F80000000000000100000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFDFFFFFFFEBFFDE64FFFFFFEFFFFFFFFF +DFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFF +00000000FFFF0000FFFFFFFF00003FFF00000000000000000000000000000000FFFFFFEF0AF7FE96AA96EA845EF7F796 +0FFFFBFF0FFFFBEE0000000000000000FFFF07FFFFFF7FFF0000FFFF00001C0000010000000000000000000000000000 +FFFF00070FFFFFFF000301FF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000003FF00003FFFFFFF00000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//3136 bytes +enum nfkdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000100", +x" +000001000000018000004200", +x" +02020100050403020702020609080202020202020A020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000030002000500040007000600080007000A0009000C000B000E000D +0007000F0007000700070007000700070007000700100007001100070013001200150014001700160007001800070007 +0007000700070019001B001A001D001C001F001E00210020000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070023002200070007002400070021002100210021 +002100210021002100210021002100210021002100210021002100210021002100210021002100210021002100210021 +002100210021002100210021002100210021002100210021002100210025002100070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +002100070027002600280021002A00290007000700070007002B0007002C000700070007000700070007000700070007 +002E002D002F000700310030000700070032000700070007000700070007000700330007000700070007000700070007 +000700070007000700340007000700070007000700070007000700070007000700070007000700070007000700070007 +0007000700070007000700070007000700070007000700070007003500070007003600070007000700380037003A0039 +000700070007000700070007000700070007003B0007000700070007000700070007000700070007000700070007003C +003D00070007003E000700070007000700070007003F0007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700210021000700400007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070000000000000000000000000000000000000000773C85013E7EFFBFBE7EFFBF +FFFCFFFFFEFDFF3FFFF3F3F9FFFFFF3F0000000000018003DFFFFFF0FF3FFFCFCFFFFFFF000FFFC00000000000000000 +0000000001FF00003F0000000000001F00000000000000000000001B441000000001D7F00001FC00007F7C0002370000 +0200708B02000000708B000000C000000000000000000000FCCF0006033FFCFC00000000000000000000000000000000 +00000080000000000000000000000000000000000000007C0000000001E0000000000000000000000008000500000000 +00000000000000000000000000000000000000000000000000000000000000000000000000120200FF00000000000000 +0000000000000000B00018000000000000000000004800004E0000000000000000000000000000000000000000000000 +00000000000000003000190000000000001000000000000000001C000000000000000000000000000000010000000000 +000000000000000000000D8100000000000000000000000000001C000000000000000000000000007400000000000000 +000000000008000000000000000000000000000000080000300000000000000000001000000000001084200803E80200 +200800020200108400000000000000000000000000000040000000000000000000000000000000000000000010000000 +00045540280000000000000B000000000000000000000000000000000000000000000000F7FF7000FFFFBFFF010007FF +F8000000FFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFF03FFFFFF +3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFFFFFFFFFFFFDFFFFFEFCFFFDF7FDCFFFF008207FF50D8807080800380FFF30000 +1FFF7FFF0000010000000000000000003E6FFEEFFBFBBD57FFFF03E1FFFFFFFF0C000200000040000000E00000000000 +000012100001B050000002920333E005000003330000F0000000000000003C0F00000000000006000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000007FF +000010000000000000000000007000000000000000000000100000000000000000000000000000000000000030000000 +000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000 +0000000000000000000000000000000080000000000000000000000000080000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF003FFFFF0000000000000001074000005555500036DB02A5D81000005555500036DB02A5C7900000 +00000000FFFE0000FFFFFFFFFFFFFFFFFFFC7FFF0000000000000000000000007FFFFFFFFFFFFFFFFFFF00FF7FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000010000 +000000000000000000000000031C00000000000000000000F00000000000020000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000000000007FE53FFFFFFFFC65FFFFFFFFFFFF3FFF +FFFFFFFFFFFFFFFF03FFFFFF00000000A0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFF0003FFFFFFF80000FFFFFFFF +FFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF1FFF000003FF0000FFFF0000FFF7FF9FFFD70F7F +FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF1CFCFCFC00007F7F +000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000 +FFFFFFBE07FDFFFF00000000000000000000000000000000000000000000000014000000000008000000000000000000 +000000000000C00000000000000000000000000000000000000000000000000000000000000000000000180000000000 +0002402800000000000001A0000000000000000000000000000000000000000000000000580000000000000000000000 +00000000000000000000000000000000000000000C000000000000000000000000000000010000000000000000000000 +0000000000000000000000000000000000000000000001FE000000000000000000000000000000000000000000000000 +000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFC0000003FFFFFF0000000000000000C00000000000001F00000000F80000000000000100000000 +FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFDFFFFFFFEBFFDE64FFFFFFEFFFFFFFFFDFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFF00000000FFFF0000FFFFFFFF00003FFF +00000000000000000000000000000000FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE0000000000000000 +FFFF07FFFFFF7FFF0000FFFF00001C0000010000000000000000000000000000FFFF00070FFFFFFF000301FF00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000 +3FFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); } static if (size_t.sizeof == 8) { -//1728 bytes -enum nfcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x60], [ 0x100, 0x100, 0x1e00], [ 0x302020202020100, 0x205020202020204, 0x602020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000000000, 0x200000000, 0x5000400030000, 0x8000000070006, 0xa0009, 0x0, 0xb000000000000, 0xc000000000000, 0xf0000000e000d, 0x0, 0x1000000000, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14001300120000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17000000160015, 0x190018, 0x1a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00120012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10361f8081a9fdf, 0x401000000000003f, 0x80, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x1000000000000000, 0xff000000, 0x4000000000000000, 0xb0800000, 0x48000000000000, 0x4e000000, 0x0, 0x0, 0x4000000000000000, 0x30c00000, 0x4000000000000000, 0x800000, 0x0, 0x400000, 0x0, 0x600004, 0x4000000000000000, 0x800000, 0x0, 0x80008400, 0x0, 0x168020010842008, 0x200108420080002, 0x0, 0x400000000000, 0x0, 0x0, 0x0, 0x0, 0x3ffffe00000000, 0xffffff0000000000, 0x7, 0x20000000000000, 0x0, 0x0, 0x0, 0x0, 0x2aaa000000000000, 0x4800000000000000, 0x2a00c80808080a00, 0x3, 0x0, 0x0, 0x0, 0xc4000000000, 0x0, 0x0, 0x0, 0x60000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x6000000, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffc657fe53fff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7ffc00a0000000, 0x7fdb, 0x0, 0x0, 0x0, 0x0, 0x400000000000000, 0x0, 0x8000000000, 0x0, 0x0, 0x0, 0x4000000000000000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x2401000000000000, 0x0, 0x0, 0x0, 0x800000000000, 0x0, 0x1000000000000, 0x0, 0x0, 0x0, 0x0, 0x1fc0000000, 0xf800000000000000, 0x1, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2048 bytes -enum nfdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x70], [ 0x100, 0x140, 0x2400], [ 0x504030202020100, 0x207020202020206, 0x802020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x5000600050004, 0x9000800070005, 0xc0005000b000a, 0x500050005000d, 0x5000500050005, 0xe000500050005, 0x10000f00050005, 0x14001300120011, 0x5000500050005, 0x5001500050005, 0x5000500050005, 0x5000500050016, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x17001700170017, 0x18001700170017, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x1a001900170005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x1d0005001c001b, 0x50005001f001e, 0x5000500200005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500210005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5002200170017, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x5000500050005, 0x0, 0x0, 0x0, 0xbe7effbf3e7effbf, 0x7ef1ff3ffffcffff, 0x7fffff3ffff3f1f8, 0x1800300000000, 0xff31ffcfdfffe000, 0xfffc0cfffffff, 0x0, 0x0, 0x0, 0x0, 0x401000000000001b, 0x1fc000001d7e0, 0x187c00, 0x20000000200708b, 0xc00000708b0000, 0x0, 0x33ffcfcfccf0006, 0x0, 0x0, 0x0, 0x0, 0x7c00000000, 0x0, 0x0, 0x80005, 0x12020000000000, 0xff000000, 0x0, 0xb0001800, 0x48000000000000, 0x4e000000, 0x0, 0x0, 0x0, 0x30001900, 0x100000, 0x1c00, 0x0, 0x100, 0x0, 0xd81, 0x0, 0x1c00, 0x0, 0x74000000, 0x0, 0x168020010842008, 0x200108420080002, 0x0, 0x4000000000, 0x0, 0x0, 0x0, 0x2800000000045540, 0xb, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0bffffff, 0x3ffffffffffffff, 0xffffffff3f3fffff, 0x3fffffffaaff3f3f, 0x5fdfffffffffffff, 0x3fdcffffefcfffde, 0x3, 0x0, 0x0, 0x0, 0xc4000000000, 0x0, 0x40000c000000, 0xe000, 0x5000001210, 0x333e00500000292, 0xf00000000333, 0x3c0f00000000, 0x60000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x36db02a555555000, 0x5555500040100000, 0x4790000036db02a5, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffff, 0x0, 0xfffffc657fe53fff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7ffc00a0000000, 0x7fdb, 0x0, 0x0, 0x0, 0x0, 0x80014000000, 0x0, 0xc00000000000, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x5800000000000000, 0x0, 0x0, 0x0, 0xc00000000000000, 0x0, 0x100000000000000, 0x0, 0x0, 0x0, 0x0, 0x1fc0000000, 0xf800000000000000, 0x1, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2848 bytes -enum nfkcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x70], [ 0x100, 0x140, 0x3d00], [ 0x402030202020100, 0x706020202020205, 0x802020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x4000600050004, 0x9000800070004, 0xd000c000b000a, 0x40004000f000e, 0x4000400040004, 0x10000400040004, 0x13001200110004, 0x17001600150014, 0x4000400040018, 0x4001900040004, 0x1d001c001b001a, 0x210020001f001e, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x23002200040004, 0x24000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x26002500210004, 0x29002800270021, 0x4000400040004, 0x2a000400040004, 0x4000400040004, 0x4000400040004, 0x2d0004002c002b, 0x40004002f002e, 0x4000400300004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400310004, 0x35003400330032, 0x4000400040004, 0x4000400040004, 0x4000400040036, 0x4000400040004, 0x4000400040004, 0x4003700040004, 0x4003900380004, 0x4000400040004, 0x3a000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4003b00210021, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x4000400040004, 0x0, 0x0, 0x773c850100000000, 0x0, 0x800c000000000000, 0x8000000000000201, 0x0, 0xe000000001ff0, 0x0, 0x0, 0x1ff000000000000, 0x1f3f000000, 0x10361f8081a9fdf, 0x441000000000003f, 0xb0, 0x2370000007f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x1e0000000380000, 0x0, 0x0, 0x1000000000000000, 0xff000000, 0x4000000000000000, 0xb0800000, 0x48000000000000, 0x4e000000, 0x0, 0x0, 0x4000000000000000, 0x30c00000, 0x4000000000000000, 0x800000, 0x0, 0x400000, 0x0, 0x600004, 0x4000000000000000, 0x800000, 0x0, 0x80008400, 0x8000000000000, 0x0, 0x8000000000000, 0x30000000, 0x1000, 0x3e8020010842008, 0x200108420080002, 0x0, 0x400000000000, 0x0, 0x0, 0x1000000000000000, 0x0, 0x3ffffe00000000, 0xffffff0000000000, 0x7, 0x20000000000000, 0x0, 0x0, 0x0, 0xf7ff700000000000, 0x10007ffffffbfff, 0xfffffffff8000000, 0x0, 0x0, 0x0, 0xc000000, 0x0, 0x0, 0x2aaa000000000000, 0xe800000000000000, 0x6a00e808e808ea03, 0x50d88070008207ff, 0xfff3000080800380, 0x1001fff7fff, 0x0, 0xfbfbbd573e6ffeef, 0xffffffffffff03e1, 0x200, 0x0, 0x1b00000000000, 0x0, 0x0, 0x0, 0x60000000000, 0x0, 0x0, 0x0, 0x0, 0xffffffff00000000, 0xffffffffffffffff, 0x7ffffffffff, 0x1000, 0x70000000000000, 0x0, 0x10000000, 0x0, 0x3000000000000000, 0x0, 0x0, 0x0, 0x800000000000, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x8000000000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffff, 0x740000000000001, 0x0, 0x9e000000, 0x8000000000000000, 0xfffe000000000000, 0xffffffffffffffff, 0xfffc7fff, 0x0, 0xffffffff7fffffff, 0x7fffffffffff00ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x1000000000000, 0x0, 0x31c000000000000, 0x0, 0x200f0000000, 0x0, 0x0, 0xfffffc657fe53fff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7fffffa0f8007f, 0xffffffffffffffdb, 0x3ffffffffffff, 0xfffffffffff80000, 0x3fffffffffffffff, 0xffffffffffff0000, 0xfffffffffffcffff, 0x1fff0000000000ff, 0xffff000003ff0000, 0xffd70f7ffff7ff9f, 0xffffffffffffffff, 0x1fffffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0x7fffffffffffffff, 0x7f7f1cfcfcfc, 0x0, 0x0, 0x7fdffffffffffbe, 0x0, 0x0, 0x0, 0x400000000000000, 0x0, 0x8000000000, 0x0, 0x0, 0x0, 0x4000000000000000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x2401000000000000, 0x0, 0x0, 0x0, 0x800000000000, 0x0, 0x1000000000000, 0x0, 0x0, 0x0, 0x0, 0x1fc0000000, 0xf800000000000000, 0x1, 0xffffffffffffffff, 0xffffffffffdfffff, 0xebffde64dfffffff, 0xffffffffffffffef, 0x7bffffffdfdfe7bf, 0xfffffffffffdfc5f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffff3fffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffcfff, 0xffff000000000000, 0x3fffffffffff, 0x0, 0x0, 0xaf7fe96ffffffef, 0x5ef7f796aa96ea84, 0xffffbee0ffffbff, 0x0, 0xffff7fffffff07ff, 0x1c000000ffff, 0x10000, 0x0, 0xfffffffffff0007, 0x301ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff000000000000, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2944 bytes -enum nfkdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x78], [ 0x100, 0x160, 0x3e00], [ 0x504030202020100, 0x807020202020206, 0x902020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0xa000900080007, 0xe000d000c000b, 0x700070007000f, 0x7000700070007, 0x10000700070007, 0x13001200110007, 0x17001600150014, 0x7000700070018, 0x7001900070007, 0x1d001c001b001a, 0x210020001f001e, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x23002200070007, 0x24000700070007, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x21002100210021, 0x25002100210021, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x27002600210007, 0x2a002900280021, 0x7000700070007, 0x2b000700070007, 0x7000700070007, 0x7000700070007, 0x2e0007002d002c, 0x700070030002f, 0x7000700310007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700320007, 0x36003500340033, 0x7000700070007, 0x7000700070007, 0x7000700070037, 0x7000700070007, 0x7000700070007, 0x7003800070007, 0x7003a00390007, 0x7000700070007, 0x3b000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7003c00210021, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x7000700070007, 0x0, 0x0, 0x773c850100000000, 0xbe7effbf3e7effbf, 0xfefdff3ffffcffff, 0xffffff3ffff3f3f9, 0x1800300000000, 0xff3fffcfdffffff0, 0xfffc0cfffffff, 0x0, 0x1ff000000000000, 0x1f3f000000, 0x0, 0x441000000000001b, 0x1fc000001d7f0, 0x2370000007f7c00, 0x20000000200708b, 0xc00000708b0000, 0x0, 0x33ffcfcfccf0006, 0x0, 0x0, 0x80, 0x0, 0x7c00000000, 0x1e0000000000000, 0x0, 0x80005, 0x0, 0x0, 0x0, 0x0, 0x12020000000000, 0xff000000, 0x0, 0xb0001800, 0x48000000000000, 0x4e000000, 0x0, 0x0, 0x0, 0x30001900, 0x100000, 0x1c00, 0x0, 0x100, 0x0, 0xd81, 0x0, 0x1c00, 0x0, 0x74000000, 0x8000000000000, 0x0, 0x8000000000000, 0x30000000, 0x1000, 0x3e8020010842008, 0x200108420080002, 0x0, 0x4000000000, 0x0, 0x0, 0x1000000000000000, 0x2800000000045540, 0xb, 0x0, 0x0, 0xf7ff700000000000, 0x10007ffffffbfff, 0xfffffffff8000000, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0fffffff, 0x3ffffffffffffff, 0xffffffff3f3fffff, 0x3fffffffaaff3f3f, 0xffdfffffffffffff, 0x7fdcffffefcfffdf, 0x50d88070008207ff, 0xfff3000080800380, 0x1001fff7fff, 0x0, 0xfbfbbd573e6ffeef, 0xffffffffffff03e1, 0x40000c000200, 0xe000, 0x1b05000001210, 0x333e00500000292, 0xf00000000333, 0x3c0f00000000, 0x60000000000, 0x0, 0x0, 0x0, 0x0, 0xffffffff00000000, 0xffffffffffffffff, 0x7ffffffffff, 0x1000, 0x70000000000000, 0x0, 0x10000000, 0x0, 0x3000000000000000, 0x0, 0x0, 0x0, 0x800000000000, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x8000000000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffff, 0x740000000000001, 0x36db02a555555000, 0x55555000d8100000, 0xc790000036db02a5, 0xfffe000000000000, 0xffffffffffffffff, 0xfffc7fff, 0x0, 0xffffffff7fffffff, 0x7fffffffffff00ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x30000000, 0x0, 0x0, 0x1000000000000, 0x0, 0x31c000000000000, 0x0, 0x200f0000000, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffff, 0x0, 0xfffffc657fe53fff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7fffffa0f8007f, 0xffffffffffffffdb, 0x3ffffffffffff, 0xfffffffffff80000, 0x3fffffffffffffff, 0xffffffffffff0000, 0xfffffffffffcffff, 0x1fff0000000000ff, 0xffff000003ff0000, 0xffd70f7ffff7ff9f, 0xffffffffffffffff, 0x1fffffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0x7fffffffffffffff, 0x7f7f1cfcfcfc, 0x0, 0x0, 0x7fdffffffffffbe, 0x0, 0x0, 0x0, 0x80014000000, 0x0, 0xc00000000000, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x5800000000000000, 0x0, 0x0, 0x0, 0xc00000000000000, 0x0, 0x100000000000000, 0x0, 0x0, 0x0, 0x0, 0x1fc0000000, 0xf800000000000000, 0x1, 0xffffffffffffffff, 0xffffffffffdfffff, 0xebffde64dfffffff, 0xffffffffffffffef, 0x7bffffffdfdfe7bf, 0xfffffffffffdfc5f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffff3fffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffcfff, 0xffff000000000000, 0x3fffffffffff, 0x0, 0x0, 0xaf7fe96ffffffef, 0x5ef7f796aa96ea84, 0xffffbee0ffffbff, 0x0, 0xffff7fffffff07ff, 0x1c000000ffff, 0x10000, 0x0, 0xfffffffffff0007, 0x301ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff000000000000, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); +//1856 bytes +enum nfcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000068", +x" +000000000000010000000000000001200000000000002000", +x" +030202020202010002060202050202040702020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000000000000000020000000000050004000300000008000000070006 +00000000000A00090000000000000000000B000000000000000C000000000000000F0000000E000D0000000000000000 +000000100000000000000000000000000000000000000011000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000014001300120000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000017000000160015000000000019001800000000001A00000000000000000000 +00000000001B00000000000000000000000000000000000000000000001C000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000001D000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000001E001200120000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010361F8081A9FDF401000000000003F0000000000000080000000000000000000000000000000000000000000380000 +00000000000000000000000000000000100000000000000000000000FF000000400000000000000000000000B0800000 +0048000000000000000000004E0000000000000000000000000000000000000040000000000000000000000030C00000 +400000000000000000000000008000000000000000000000000000000040000000000000000000000000000000600004 +400000000000000000000000008000000000000000000000000000008000840000000000000000000168020010842008 +020010842008000200000000000000000000400000000000000000000000000000000000000000000000000000000000 +0000000000000000003FFFFE00000000FFFFFF0000000000000000000000000700200000000000000000000000000000 +0000000000000000000000000000000000000000000000002AAA00000000000048000000000000002A00C80808080A00 +000000000000000300000000000000000000000000000000000000000000000000000C40000000000000000000000000 +000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000 +00000000060000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFC657FE53FFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFC00A00000000000000000007FDB +000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000 +000000800000000000000000000000000000000000000000000000000000000040000000000000000000000000800000 +090000000000000000000000000003A40000000000000000000000000000000024010000000000000000000000000000 +000000000000000000000000000000000000800000000000000000000000000000010000000000000000000000000000 +00000000000000000000000000000000000003FFC0000000000000000000000000000000000000000000000000000000 +000000000000000000000180000000000000000000000000000000000000000000000000000000000000001FC0000000 +F8000000000000000000000000000001000000003FFFFFFF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//2208 bytes +enum nfdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000078", +x" +000000000000010000000000000001600000000000002700", +x" +050403020202010002080202070202060902020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000300020001000000050006000500040009000800070005000C0005000B000A +000500050005000D0005000500050005000E0005000500050010000F0005000500140013001200110005000500050005 +000500150005000500050005000500050005000500050016000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050017001700170017 +001700170017001700170017001700170017001700170017001700170017001700170017001700170017001700170017 +001700170017001700170017001700170017001700170017001800170017001700050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +001A0019001700050005000500050005000500050005000500050005001B000500050005000500050005000500050005 +001E0005001D001C000500050020001F0005000500210005000500050005000500050005002200050005000500050005 +000500050005000500050005002300050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005002400050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005002500170017000500050005000500050005000500050005000500050005 +000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050005 +000000000000000000000000000000000000000000000000BE7EFFBF3E7EFFBF7EF1FF3FFFFCFFFF7FFFFF3FFFF3F1F8 +0001800300000000FF31FFCFDFFFE000000FFFC0CFFFFFFF000000000000000000000000000000000000000000000000 +0000000000000000401000000000001B0001FC000001D7E00000000000187C00020000000200708B00C00000708B0000 +0000000000000000033FFCFCFCCF00060000000000000000000000000000000000000000000000000000000000000000 +0000007C00000000000000000000000000000000000000000000000000080005001202000000000000000000FF000000 +000000000000000000000000B00018000048000000000000000000004E00000000000000000000000000000000000000 +0000000000000000000000003000190000000000001000000000000000001C0000000000000000000000000000000100 +00000000000000000000000000000D8100000000000000000000000000001C0000000000000000000000000074000000 +000000000000000001680200108420080200108420080002000000000000000000000040000000000000000000000000 +000000000000000000000000000000002800000000045540000000000000000B00000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BFFFFFF03FFFFFFFFFFFFFFFFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3F +5FDFFFFFFFFFFFFF3FDCFFFFEFCFFFDE0000000000000003000000000000000000000000000000000000000000000000 +00000C40000000000000000000000000000040000C000000000000000000E00000000050000012100333E00500000292 +0000F0000000033300003C0F000000000000060000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000010000000000000000000000036DB02A555555000 +55555000401000004790000036DB02A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFF0000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFC00A00000000000000000007FDB00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000100000020000000000000000000000000000000000 +000008001400000000000000000000000000C00000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001800000000000002402800000000000001A000000000000000000000000000000000 +58000000000000000000000000000000000000000000000000000000000000000C000000000000000000000000000000 +0100000000000000000000000000000000000000000000000000000000000000000001FE000000000000000000000000 +000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000 +00000000000000000000001FC0000000F8000000000000000000000000000001000000003FFFFFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//3008 bytes +enum nfkcQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000078", +x" +000000000000010000000000000001600000000000004000", +x" +040203020202010008070202060202050902020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000300020001000000040006000500040009000800070004000D000C000B000A +00040004000F000E00040004000400040010000400040004001300120011000400170016001500140004000400040018 +0004001900040004001D001C001B001A00210020001F001E000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004002300220004000400240004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400260025002100040029002800270021 +0004000400040004002A00040004000400040004000400040004000400040004002D0004002C002B00040004002F002E +000400040030000400040004000400040004000400310004000400040004000400040004000400040004000400320004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400330004000400340004003800370036003500040004000400040004000400040004 +0004000400040039000400040004000400040004000400040004003A000400040004003C003B00040004000400040004 +003D00040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004003E00210021000400040004000400040004000400040004000400040004 +000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004 +00000000000000000000000000000000773C8501000000000000000000000000800C0000000000008000000000000201 +0000000000000000000E000000001FF00000000000000000000000000000000001FF0000000000000000001F3F000000 +010361F8081A9FDF441000000000003F00000000000000B002370000007F000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000 +000000000000000001E000000038000000000000000000000000000000000000100000000000000000000000FF000000 +400000000000000000000000B08000000048000000000000000000004E00000000000000000000000000000000000000 +40000000000000000000000030C000004000000000000000000000000080000000000000000000000000000000400000 +000000000000000000000000006000044000000000000000000000000080000000000000000000000000000080008400 +0008000000000000000000000000000000080000000000000000000030000000000000000000100003E8020010842008 +020010842008000200000000000000000000400000000000000000000000000000000000000000001000000000000000 +0000000000000000003FFFFE00000000FFFFFF0000000000000000000000000700200000000000000000000000000000 +00000000000000000000000000000000F7FF700000000000010007FFFFFFBFFFFFFFFFFFF80000000000000000000000 +00000000000000000000000000000000000000000C000000000000000000000000000000000000002AAA000000000000 +E8000000000000006A00E808E808EA0350D88070008207FFFFF3000080800380000001001FFF7FFF0000000000000000 +FBFBBD573E6FFEEFFFFFFFFFFFFF03E1000000000000020000000000000000000001B000000000000000000000000000 +000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF00000000FFFFFFFFFFFFFFFF000007FFFFFFFFFF00000000000010000070000000000000 +000000000000000000000000100000000000000000000000300000000000000000000000000000000000000000000000 +000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000800000000008000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000003FFFFF +07400000000000010000000000000000000000009E0000008000000000000000FFFE000000000000FFFFFFFFFFFFFFFF +00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +00000000300000000000000000000000000000000000000000010000000000000000000000000000031C000000000000 +000000000000000000000200F000000000000000000000000000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000 +3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F +FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF00007F7F1CFCFCFC +0000000000000000000000000000000007FDFFFFFFFFFFBE000000000000000000000000000000000000000000000000 +040000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000 +40000000000000000000000000800000090000000000000000000000000003A400000000000000000000000000000000 +240100000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000 +0001000000000000000000000000000000000000000000000000000000000000000003FFC00000000000000000000000 +000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000003FFFFFFFFC0000000000000000000000000001FC0000000 +F8000000000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF +7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFF +FFFF00000000000000003FFFFFFFFFFF000000000000000000000000000000000AF7FE96FFFFFFEF5EF7F796AA96EA84 +0FFFFBEE0FFFFBFF0000000000000000FFFF7FFFFFFF07FF00001C000000FFFF00000000000100000000000000000000 +0FFFFFFFFFFF000700000000000301FF0000000000000000000000000000000000000000000000000000000000000000 +000000000000000003FF000000000000000000003FFFFFFF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//3136 bytes +enum nfkdQCTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000080", +x" +000000000000010000000000000001800000000000004200", +x" +050403020202010009080202070202060A02020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000030002000100000007000600050004000A000900080007000E000D000C000B +000700070007000F00070007000700070010000700070007001300120011000700170016001500140007000700070018 +0007001900070007001D001C001B001A00210020001F001E000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007002300220007000700240007000700070021002100210021 +002100210021002100210021002100210021002100210021002100210021002100210021002100210021002100210021 +002100210021002100210021002100210021002100210021002500210021002100070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +0027002600210007002A0029002800210007000700070007002C0007002B000700070007000700070007000700070007 +002F0007002E002D00070007003100300007000700320007000700070007000700070007003300070007000700070007 +000700070007000700070007003400070007000700070007000700070007000700070007000700070007000700070007 +00070007000700070007000700070007000700070007000700070007000700350007000700360007003A003900380037 +00070007000700070007000700070007000700070007003B000700070007000700070007000700070007003C00070007 +0007003E003D00070007000700070007003F000700070007000700070007000700070007000700070007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070040002100210007000700070007 +000700070007000700070007000700070007000700070007000700070007000700070007000700070007000700070007 +0007000700070007000700070007000700000000000000000000000000000000773C850100000000BE7EFFBF3E7EFFBF +FEFDFF3FFFFCFFFFFFFFFF3FFFF3F3F90001800300000000FF3FFFCFDFFFFFF0000FFFC0CFFFFFFF0000000000000000 +01FF0000000000000000001F3F0000000000000000000000441000000000001B0001FC000001D7F002370000007F7C00 +020000000200708B00C00000708B00000000000000000000033FFCFCFCCF000600000000000000000000000000000000 +000000000000008000000000000000000000007C0000000001E000000000000000000000000000000000000000080005 +0000000000000000000000000000000000000000000000000000000000000000001202000000000000000000FF000000 +000000000000000000000000B00018000048000000000000000000004E00000000000000000000000000000000000000 +0000000000000000000000003000190000000000001000000000000000001C0000000000000000000000000000000100 +00000000000000000000000000000D8100000000000000000000000000001C0000000000000000000000000074000000 +0008000000000000000000000000000000080000000000000000000030000000000000000000100003E8020010842008 +020010842008000200000000000000000000004000000000000000000000000000000000000000001000000000000000 +2800000000045540000000000000000B00000000000000000000000000000000F7FF700000000000010007FFFFFFBFFF +FFFFFFFFF80000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFF03FFFFFFFFFFFFFF +FFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3FFFDFFFFFFFFFFFFF7FDCFFFFEFCFFFDF50D88070008207FFFFF3000080800380 +000001001FFF7FFF0000000000000000FBFBBD573E6FFEEFFFFFFFFFFFFF03E1000040000C000200000000000000E000 +0001B050000012100333E005000002920000F0000000033300003C0F0000000000000600000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF00000000FFFFFFFFFFFFFFFF000007FFFFFFFFFF +000000000000100000700000000000000000000000000000000000001000000000000000000000003000000000000000 +000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000800000000008000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00000000003FFFFF074000000000000136DB02A55555500055555000D8100000C790000036DB02A5 +FFFE000000000000FFFFFFFFFFFFFFFF00000000FFFC7FFF0000000000000000FFFFFFFF7FFFFFFF7FFFFFFFFFFF00FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000000000000000000000000000000000000030000000000000000000000000000000000000000001000000000000 +0000000000000000031C000000000000000000000000000000000200F000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFF0000000000000000FFFFFC657FE53FFFFFFF3FFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFA0F8007FFFFFFFFFFFFFFFDB0003FFFFFFFFFFFFFFFFFFFFFFF80000 +3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF1FFF0000000000FFFFFF000003FF0000FFD70F7FFFF7FF9F +FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF00007F7F1CFCFCFC +000000000000000000000000000000000000000000000000000000100000020000000000000000000000000000000000 +07FDFFFFFFFFFFBE00000000000000000000000000000000000000000000000000000800140000000000000000000000 +0000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800 +000000000002402800000000000001A00000000000000000000000000000000058000000000000000000000000000000 +000000000000000000000000000000000C00000000000000000000000000000001000000000000000000000000000000 +00000000000000000000000000000000000001FE00000000000000000000000000000000000000000000000000000000 +000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000003FFFFFFFFC0000000000000000000000000001FC0000000F8000000000000000000000000000001 +FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFF00000000000000003FFFFFFFFFFF +000000000000000000000000000000000AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0000000000000000 +FFFF7FFFFFFF07FF00001C000000FFFF000000000001000000000000000000000FFFFFFFFFFF000700000000000301FF +0000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000 +000000003FFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); } diff --git a/std/internal/unicode_tables.d b/std/internal/unicode_tables.d index 22419270a99..73e1c2297e6 100644 --- a/std/internal/unicode_tables.d +++ b/std/internal/unicode_tables.d @@ -15,42 +15,49 @@ module std.internal.unicode_tables; @safe pure nothrow @nogc package(std): -struct SimpleCaseEntry +/// Simple Case Entry, wrapper around uint to extract bit fields from simpleCaseTable() +struct SCE { - uint ch; - ubyte n, bucket;// n - number in bucket + uint x; -pure nothrow @nogc: + nothrow @nogc pure @safe: - @property ubyte size() const + this(uint x) { - return bucket & 0x3F; + this.x = x; } - @property auto isLower() const - { - return bucket & 0x40; - } - @property auto isUpper() const + + this(uint ch, ubyte n, ubyte size) { - return bucket & 0x80; + this.x = ch | n << 20 | size << 24; } + + int ch() const { return this.x & 0x1FFFF; } + int n() const { return (this.x >> 20) & 0xF; } + int size() const { return this.x >> 24; } } -struct FullCaseEntry +/// Bit backed FullCaseEntry +struct FCE { - dchar[3] seq; - ubyte n, size;// n number in batch, size - size of batch - ubyte entry_len; + ulong x; // bit field sizes: 18, 12, 12, 4, 4, 4 + +nothrow @nogc pure @safe: - @property auto value() const @trusted pure nothrow @nogc return + this(ulong x) { - return seq[0 .. entry_len]; + this.x = x; } -} -struct CompEntry -{ - dchar rhs, composed; + this(dchar[3] seq, ubyte n, ubyte size, ubyte entry_len) + { + this.x = ulong(seq[0]) << 36 | ulong(seq[1]) << 24 | seq[2] << 12 | n << 8 | size << 4 | entry_len << 0; + } + + dchar[3] seq() const { return [(x >> 36) & 0x1FFFF, (x >> 24) & 0xFFF, (x >> 12) & 0xFFF]; } + ubyte n() const { return (x >> 8) & 0xF; } + ubyte size() const { return (x >> 4) & 0xF; } + ubyte entry_len() const { return (x >> 0) & 0xF; } } struct UnicodeProperty @@ -61,1565 +68,814 @@ struct UnicodeProperty struct TrieEntry(T...) { - size_t[] offsets; - size_t[] sizes; - size_t[] data; + immutable(size_t)[] offsets; + immutable(size_t)[] sizes; + immutable(size_t)[] data; } -@property immutable(SimpleCaseEntry[]) simpleCaseTable() +SCE simpleCaseTable(size_t i) { -alias SCE = SimpleCaseEntry; -static immutable SCE[] t = [ -SCE(0x1e90b, 0, 0x82), -SCE(0x1e92d, 1, 0x42),SCE(0x1e911, 0, 0x82),SCE(0x1e933, 1, 0x42),SCE(0x0496, 0, 0x82), -SCE(0x0497, 1, 0x42),SCE(0xa722, 0, 0x82),SCE(0xa723, 1, 0x42),SCE(0x1f79, 0, 0x42), -SCE(0x1ff9, 1, 0x82),SCE(0x1f44, 0, 0x42),SCE(0x1f4c, 1, 0x82),SCE(0x015a, 0, 0x82), -SCE(0x015b, 1, 0x42),SCE(0x10fd, 0, 0x42),SCE(0x1cbd, 1, 0x82),SCE(0x16e4c, 0, 0x82), -SCE(0x16e6c, 1, 0x42),SCE(0x1e38, 0, 0x82),SCE(0x1e39, 1, 0x42),SCE(0x1e921, 0, 0x82), -SCE(0x1e943, 1, 0x42),SCE(0x1f23, 0, 0x42),SCE(0x1f2b, 1, 0x82),SCE(0x01a0, 0, 0x82), -SCE(0x01a1, 1, 0x42),SCE(0x03a3, 0, 0x83),SCE(0x03c2, 1, 0x43),SCE(0x03c3, 2, 0x43), -SCE(0x04dc, 0, 0x82),SCE(0x04dd, 1, 0x42),SCE(0x2ca6, 0, 0x82),SCE(0x2ca7, 1, 0x42), -SCE(0x017b, 0, 0x82),SCE(0x017c, 1, 0x42),SCE(0x1e906, 0, 0x82),SCE(0x1e928, 1, 0x42), -SCE(0x10dc, 0, 0x42),SCE(0x1c9c, 1, 0x82),SCE(0x104cd, 0, 0x82),SCE(0x104f5, 1, 0x42), -SCE(0x1f65, 0, 0x42),SCE(0x1f6d, 1, 0x82),SCE(0x051e, 0, 0x82),SCE(0x051f, 1, 0x42), -SCE(0x10d8, 0, 0x42),SCE(0x1c98, 1, 0x82),SCE(0x2c1a, 0, 0x82),SCE(0x2c4a, 1, 0x42), -SCE(0x027d, 0, 0x42),SCE(0x2c64, 1, 0x82),SCE(0xa69a, 0, 0x82),SCE(0xa69b, 1, 0x42), -SCE(0x1f02, 0, 0x42),SCE(0x1f0a, 1, 0x82),SCE(0x0522, 0, 0x82),SCE(0x0523, 1, 0x42), -SCE(0x2c60, 0, 0x82),SCE(0x2c61, 1, 0x42),SCE(0x2c1e, 0, 0x82),SCE(0x2c4e, 1, 0x42), -SCE(0xa650, 0, 0x82),SCE(0xa651, 1, 0x42),SCE(0xa65c, 0, 0x82),SCE(0xa65d, 1, 0x42), -SCE(0x13c9, 0, 0x82),SCE(0xab99, 1, 0x42),SCE(0x10414, 0, 0x82),SCE(0x1043c, 1, 0x42), -SCE(0x13cd, 0, 0x82),SCE(0xab9d, 1, 0x42),SCE(0x00ce, 0, 0x82),SCE(0x00ee, 1, 0x42), -SCE(0x1e7e, 0, 0x82),SCE(0x1e7f, 1, 0x42),SCE(0x13f0, 0, 0x82),SCE(0x13f8, 1, 0x42), -SCE(0x1ec4, 0, 0x82),SCE(0x1ec5, 1, 0x42),SCE(0xa78b, 0, 0x82),SCE(0xa78c, 1, 0x42), -SCE(0x0114, 0, 0x82),SCE(0x0115, 1, 0x42),SCE(0x042f, 0, 0x82),SCE(0x044f, 1, 0x42), -SCE(0x1e902, 0, 0x82),SCE(0x1e924, 1, 0x42),SCE(0x04d8, 0, 0x82),SCE(0x04d9, 1, 0x42), -SCE(0x2caa, 0, 0x82),SCE(0x2cab, 1, 0x42),SCE(0x0110, 0, 0x82),SCE(0x0111, 1, 0x42), -SCE(0x0492, 0, 0x82),SCE(0x0493, 1, 0x42),SCE(0x1e34, 0, 0x82),SCE(0x1e35, 1, 0x42), -SCE(0x13f4, 0, 0x82),SCE(0x13fc, 1, 0x42),SCE(0x0224, 0, 0x82),SCE(0x0225, 1, 0x42), -SCE(0x2ca2, 0, 0x82),SCE(0x2ca3, 1, 0x42),SCE(0xa72e, 0, 0x82),SCE(0xa72f, 1, 0x42), -SCE(0x16e48, 0, 0x82),SCE(0x16e68, 1, 0x42),SCE(0x004a, 0, 0x82),SCE(0x006a, 1, 0x42), -SCE(0x13a6, 0, 0x82),SCE(0xab76, 1, 0x42),SCE(0x015e, 0, 0x82),SCE(0x015f, 1, 0x42), -SCE(0x01c4, 0, 0x83),SCE(0x01c5, 1, 0x3),SCE(0x01c6, 2, 0x43),SCE(0x1f40, 0, 0x42), -SCE(0x1f48, 1, 0x82),SCE(0xa658, 0, 0x82),SCE(0xa659, 1, 0x42),SCE(0x022c, 0, 0x82), -SCE(0x022d, 1, 0x42),SCE(0x10c9f, 0, 0x82),SCE(0x10cdf, 1, 0x42),SCE(0x1fa7, 0, 0x42), -SCE(0x1faf, 1, 0x2),SCE(0x13ae, 0, 0x82),SCE(0xab7e, 1, 0x42),SCE(0x0042, 0, 0x82), -SCE(0x0062, 1, 0x42),SCE(0x13d5, 0, 0x82),SCE(0xaba5, 1, 0x42),SCE(0x16e40, 0, 0x82), -SCE(0x16e60, 1, 0x42),SCE(0x00d2, 0, 0x82),SCE(0x00f2, 1, 0x42),SCE(0x1e82, 0, 0x82), -SCE(0x1e83, 1, 0x42),SCE(0x10c97, 0, 0x82),SCE(0x10cd7, 1, 0x42),SCE(0x10e0, 0, 0x42), -SCE(0x1ca0, 1, 0x82),SCE(0x013d, 0, 0x82),SCE(0x013e, 1, 0x42),SCE(0x0406, 0, 0x82), -SCE(0x0456, 1, 0x42),SCE(0x029d, 0, 0x42),SCE(0xa7b2, 1, 0x82),SCE(0x0139, 0, 0x82), -SCE(0x013a, 1, 0x42),SCE(0x0198, 0, 0x82),SCE(0x0199, 1, 0x42),SCE(0x1ebc, 0, 0x82), -SCE(0x1ebd, 1, 0x42),SCE(0x03ab, 0, 0x82),SCE(0x03cb, 1, 0x42),SCE(0x040e, 0, 0x82), -SCE(0x045e, 1, 0x42),SCE(0xa7b6, 0, 0x82),SCE(0xa7b7, 1, 0x42),SCE(0x040a, 0, 0x82), -SCE(0x045a, 1, 0x42),SCE(0x1ec0, 0, 0x82),SCE(0x1ec1, 1, 0x42),SCE(0x10572, 0, 0x82), -SCE(0x10599, 1, 0x42),SCE(0x24b9, 0, 0x82),SCE(0x24d3, 1, 0x42),SCE(0x2c16, 0, 0x82), -SCE(0x2c46, 1, 0x42),SCE(0x019c, 0, 0x82),SCE(0x026f, 1, 0x42),SCE(0x03a7, 0, 0x82), -SCE(0x03c7, 1, 0x42),SCE(0xa692, 0, 0x82),SCE(0xa693, 1, 0x42),SCE(0x00c5, 0, 0x83), -SCE(0x00e5, 1, 0x43),SCE(0x212b, 2, 0x83),SCE(0x0526, 0, 0x82),SCE(0x0527, 1, 0x42), -SCE(0x0266, 0, 0x42),SCE(0xa7aa, 1, 0x82),SCE(0x1057a, 0, 0x82),SCE(0x105a1, 1, 0x42), -SCE(0x1057e, 0, 0x82),SCE(0x105a5, 1, 0x42),SCE(0x1fd0, 0, 0x42),SCE(0x1fd8, 1, 0x82), -SCE(0x0046, 0, 0x82),SCE(0x0066, 1, 0x42),SCE(0x1e90a, 0, 0x82),SCE(0x1e92c, 1, 0x42), -SCE(0x0228, 0, 0x82),SCE(0x0229, 1, 0x42),SCE(0x13a2, 0, 0x82),SCE(0xab72, 1, 0x42), -SCE(0xa726, 0, 0x82),SCE(0xa727, 1, 0x42),SCE(0x10c93, 0, 0x82),SCE(0x10cd3, 1, 0x42), -SCE(0x049a, 0, 0x82),SCE(0x049b, 1, 0x42),SCE(0x00d6, 0, 0x82),SCE(0x00f6, 1, 0x42), -SCE(0x010c, 0, 0x82),SCE(0x010d, 1, 0x42),SCE(0x118a8, 0, 0x82),SCE(0x118c8, 1, 0x42), -SCE(0x0162, 0, 0x82),SCE(0x0163, 1, 0x42),SCE(0x019e, 0, 0x42),SCE(0x0220, 1, 0x82), -SCE(0x2c9e, 0, 0x82),SCE(0x2c9f, 1, 0x42),SCE(0x0392, 0, 0x83),SCE(0x03b2, 1, 0x43), -SCE(0x03d0, 2, 0x43),SCE(0x1e30, 0, 0x82),SCE(0x1e31, 1, 0x42),SCE(0x1fa3, 0, 0x42), -SCE(0x1fab, 1, 0x2),SCE(0x216d, 0, 0x82),SCE(0x217d, 1, 0x42),SCE(0x004e, 0, 0x82), -SCE(0x006e, 1, 0x42),SCE(0x00b5, 0, 0x43),SCE(0x039c, 1, 0x83),SCE(0x03bc, 2, 0x43), -SCE(0x048e, 0, 0x82),SCE(0x048f, 1, 0x42),SCE(0xa72a, 0, 0x82),SCE(0xa72b, 1, 0x42), -SCE(0x10410, 0, 0x82),SCE(0x10438, 1, 0x42),SCE(0x038a, 0, 0x82),SCE(0x03af, 1, 0x42), -SCE(0x1efe, 0, 0x82),SCE(0x1eff, 1, 0x42),SCE(0x118ac, 0, 0x82),SCE(0x118cc, 1, 0x42), -SCE(0x01ea, 0, 0x82),SCE(0x01eb, 1, 0x42),SCE(0x1f06, 0, 0x42),SCE(0x1f0e, 1, 0x82), -SCE(0x1fc3, 0, 0x42),SCE(0x1fcc, 1, 0x2),SCE(0x10b4, 0, 0x82),SCE(0x2d14, 1, 0x42), -SCE(0x026a, 0, 0x42),SCE(0xa7ae, 1, 0x82),SCE(0x0412, 0, 0x83),SCE(0x0432, 1, 0x43), -SCE(0x1c80, 2, 0x43),SCE(0xa760, 0, 0x82),SCE(0xa761, 1, 0x42),SCE(0x10c9b, 0, 0x82), -SCE(0x10cdb, 1, 0x42),SCE(0x24c8, 0, 0x82),SCE(0x24e2, 1, 0x42),SCE(0x01a4, 0, 0x82), -SCE(0x01a5, 1, 0x42),SCE(0x039f, 0, 0x82),SCE(0x03bf, 1, 0x42),SCE(0x10c4, 0, 0x82), -SCE(0x2d24, 1, 0x42),SCE(0x04a2, 0, 0x82),SCE(0x04a3, 1, 0x42),SCE(0x2c03, 0, 0x82), -SCE(0x2c33, 1, 0x42),SCE(0x2ce0, 0, 0x82),SCE(0x2ce1, 1, 0x42),SCE(0x10576, 0, 0x82), -SCE(0x1059d, 1, 0x42),SCE(0x04e0, 0, 0x82),SCE(0x04e1, 1, 0x42),SCE(0x2c2a, 0, 0x82), -SCE(0x2c5a, 1, 0x42),SCE(0x1ed0, 0, 0x82),SCE(0x1ed1, 1, 0x42),SCE(0x00c2, 0, 0x82), -SCE(0x00e2, 1, 0x42),SCE(0x04e8, 0, 0x82),SCE(0x04e9, 1, 0x42),SCE(0xa7a6, 0, 0x82), -SCE(0xa7a7, 1, 0x42),SCE(0x10f9, 0, 0x42),SCE(0x1cb9, 1, 0x82),SCE(0x0145, 0, 0x82), -SCE(0x0146, 1, 0x42),SCE(0x037c, 0, 0x42),SCE(0x03fe, 1, 0x82),SCE(0x1ec8, 0, 0x82), -SCE(0x1ec9, 1, 0x42),SCE(0x041a, 0, 0x82),SCE(0x043a, 1, 0x42),SCE(0x00ca, 0, 0x82), -SCE(0x00ea, 1, 0x42),SCE(0x1f86, 0, 0x42),SCE(0x1f8e, 1, 0x2),SCE(0x0421, 0, 0x83), -SCE(0x0441, 1, 0x43),SCE(0x1c83, 2, 0x43),SCE(0x10404, 0, 0x82),SCE(0x1042c, 1, 0x42), -SCE(0x10583, 0, 0x82),SCE(0x105aa, 1, 0x42),SCE(0x053f, 0, 0x82),SCE(0x056f, 1, 0x42), -SCE(0x0547, 0, 0x82),SCE(0x0577, 1, 0x42),SCE(0x13b6, 0, 0x82),SCE(0xab86, 1, 0x42), -SCE(0x13ec, 0, 0x82),SCE(0xabbc, 1, 0x42),SCE(0xff2c, 0, 0x82),SCE(0xff4c, 1, 0x42), -SCE(0xa7ba, 0, 0x82),SCE(0xa7bb, 1, 0x42),SCE(0xa648, 0, 0x82),SCE(0xa649, 1, 0x42), -SCE(0x13c5, 0, 0x82),SCE(0xab95, 1, 0x42),SCE(0xff24, 0, 0x82),SCE(0xff44, 1, 0x42), -SCE(0x1040f, 0, 0x82),SCE(0x10437, 1, 0x42),SCE(0x1041c, 0, 0x82),SCE(0x10444, 1, 0x42), -SCE(0x10c83, 0, 0x82),SCE(0x10cc3, 1, 0x42),SCE(0x0241, 0, 0x82),SCE(0x0242, 1, 0x42), -SCE(0x1e76, 0, 0x82),SCE(0x1e77, 1, 0x42),SCE(0x10bc, 0, 0x82),SCE(0x2d1c, 1, 0x42), -SCE(0x2c22, 0, 0x82),SCE(0x2c52, 1, 0x42),SCE(0x10d0, 0, 0x42),SCE(0x1c90, 1, 0x82), -SCE(0xa768, 0, 0x82),SCE(0xa769, 1, 0x42),SCE(0xa732, 0, 0x82),SCE(0xa733, 1, 0x42), -SCE(0x011c, 0, 0x82),SCE(0x011d, 1, 0x42),SCE(0x0427, 0, 0x82),SCE(0x0447, 1, 0x42), -SCE(0x1e40, 0, 0x82),SCE(0x1e41, 1, 0x42),SCE(0x118b1, 0, 0x82),SCE(0x118d1, 1, 0x42), -SCE(0x0152, 0, 0x82),SCE(0x0153, 1, 0x42),SCE(0x03a1, 0, 0x83),SCE(0x03c1, 1, 0x43), -SCE(0x03f1, 2, 0x43),SCE(0x0397, 0, 0x82),SCE(0x03b7, 1, 0x42),SCE(0x01ac, 0, 0x82), -SCE(0x01ad, 1, 0x42),SCE(0x01e2, 0, 0x82),SCE(0x01e3, 1, 0x42),SCE(0x0218, 0, 0x82), -SCE(0x0219, 1, 0x42),SCE(0x1e91a, 0, 0x82),SCE(0x1e93c, 1, 0x42),SCE(0x0516, 0, 0x82), -SCE(0x0517, 1, 0x42),SCE(0x1f27, 0, 0x42),SCE(0x1f2f, 1, 0x82),SCE(0xa7c9, 0, 0x82), -SCE(0xa7ca, 1, 0x42),SCE(0x1fe0, 0, 0x42),SCE(0x1fe8, 1, 0x82),SCE(0x2165, 0, 0x82), -SCE(0x2175, 1, 0x42),SCE(0xa66c, 0, 0x82),SCE(0xa66d, 1, 0x42),SCE(0x0393, 0, 0x82), -SCE(0x03b3, 1, 0x42),SCE(0x0532, 0, 0x82),SCE(0x0562, 1, 0x42),SCE(0x0056, 0, 0x82), -SCE(0x0076, 1, 0x42),SCE(0x1f33, 0, 0x42),SCE(0x1f3b, 1, 0x82),SCE(0x0554, 0, 0x82), -SCE(0x0584, 1, 0x42),SCE(0x1c88, 0, 0x43),SCE(0xa64a, 1, 0x83),SCE(0xa64b, 2, 0x43), -SCE(0xa68e, 0, 0x82),SCE(0xa68f, 1, 0x42),SCE(0x03d8, 0, 0x82),SCE(0x03d9, 1, 0x42), -SCE(0x24c5, 0, 0x82),SCE(0x24df, 1, 0x42),SCE(0x2cb2, 0, 0x82),SCE(0x2cb3, 1, 0x42), -SCE(0x10c82, 0, 0x82),SCE(0x10cc2, 1, 0x42),SCE(0x0057, 0, 0x82),SCE(0x0077, 1, 0x42), -SCE(0x16e53, 0, 0x82),SCE(0x16e73, 1, 0x42),SCE(0xff37, 0, 0x82),SCE(0xff57, 1, 0x42), -SCE(0x1ef6, 0, 0x82),SCE(0x1ef7, 1, 0x42),SCE(0x1e912, 0, 0x82),SCE(0x1e934, 1, 0x42), -SCE(0x1f12, 0, 0x42),SCE(0x1f1a, 1, 0x82),SCE(0x04a6, 0, 0x82),SCE(0x04a7, 1, 0x42), -SCE(0x016a, 0, 0x82),SCE(0x016b, 1, 0x42),SCE(0x1f34, 0, 0x42),SCE(0x1f3c, 1, 0x82), -SCE(0x2cdc, 0, 0x82),SCE(0x2cdd, 1, 0x42),SCE(0x01b1, 0, 0x82),SCE(0x028a, 1, 0x42), -SCE(0x118a4, 0, 0x82),SCE(0x118c4, 1, 0x42),SCE(0x1e28, 0, 0x82),SCE(0x1e29, 1, 0x42), -SCE(0x01bf, 0, 0x42),SCE(0x01f7, 1, 0x82),SCE(0x018b, 0, 0x82),SCE(0x018c, 1, 0x42), -SCE(0x10a7, 0, 0x82),SCE(0x2d07, 1, 0x42),SCE(0x0128, 0, 0x82),SCE(0x0129, 1, 0x42), -SCE(0x1e6a, 0, 0x82),SCE(0x1e6b, 1, 0x42),SCE(0x10ab, 0, 0x82),SCE(0x2d0b, 1, 0x42), -SCE(0x041f, 0, 0x82),SCE(0x043f, 1, 0x42),SCE(0x2c2e, 0, 0x82),SCE(0x2c5e, 1, 0x42), -SCE(0x10caf, 0, 0x82),SCE(0x10cef, 1, 0x42),SCE(0x104c5, 0, 0x82),SCE(0x104ed, 1, 0x42), -SCE(0x118a5, 0, 0x82),SCE(0x118c5, 1, 0x42),SCE(0x1fe1, 0, 0x42),SCE(0x1fe9, 1, 0x82), -SCE(0x03a6, 0, 0x83),SCE(0x03c6, 1, 0x43),SCE(0x03d5, 2, 0x43),SCE(0x2c0a, 0, 0x82), -SCE(0x2c3a, 1, 0x42),SCE(0x050e, 0, 0x82),SCE(0x050f, 1, 0x42),SCE(0x0104, 0, 0x82), -SCE(0x0105, 1, 0x42),SCE(0x0372, 0, 0x82),SCE(0x0373, 1, 0x42),SCE(0x1e8e, 0, 0x82), -SCE(0x1e8f, 1, 0x42),SCE(0x0396, 0, 0x82),SCE(0x03b6, 1, 0x42),SCE(0x1efa, 0, 0x82), -SCE(0x1efb, 1, 0x42),SCE(0x03f2, 0, 0x42),SCE(0x03f9, 1, 0x82),SCE(0xa640, 0, 0x82), -SCE(0xa641, 1, 0x42),SCE(0x10ec, 0, 0x42),SCE(0x1cac, 1, 0x82),SCE(0x118a1, 0, 0x82), -SCE(0x118c1, 1, 0x42),SCE(0x0166, 0, 0x82),SCE(0x0167, 1, 0x42),SCE(0x1f37, 0, 0x42), -SCE(0x1f3f, 1, 0x82),SCE(0x10c86, 0, 0x82),SCE(0x10cc6, 1, 0x42),SCE(0x13dd, 0, 0x82), -SCE(0xabad, 1, 0x42),SCE(0x1f51, 0, 0x42),SCE(0x1f59, 1, 0x82),SCE(0x2c9a, 0, 0x82), -SCE(0x2c9b, 1, 0x42),SCE(0x01fa, 0, 0x82),SCE(0x01fb, 1, 0x42),SCE(0x2169, 0, 0x82), -SCE(0x2179, 1, 0x42),SCE(0x16e57, 0, 0x82),SCE(0x16e77, 1, 0x42),SCE(0x10a4, 0, 0x82), -SCE(0x2d04, 1, 0x42),SCE(0x0053, 0, 0x83),SCE(0x0073, 1, 0x43),SCE(0x017f, 2, 0x43), -SCE(0x0376, 0, 0x82),SCE(0x0377, 1, 0x42),SCE(0x13b1, 0, 0x82),SCE(0xab81, 1, 0x42), -SCE(0x0468, 0, 0x82),SCE(0x0469, 1, 0x42),SCE(0x13e4, 0, 0x82),SCE(0xabb4, 1, 0x42), -SCE(0x1f96, 0, 0x42),SCE(0x1f9e, 1, 0x2),SCE(0x0108, 0, 0x82),SCE(0x0109, 1, 0x42), -SCE(0x10ca0, 0, 0x82),SCE(0x10ce0, 1, 0x42),SCE(0x1e66, 0, 0x82),SCE(0x1e67, 1, 0x42), -SCE(0x1e8a, 0, 0x82),SCE(0x1e8b, 1, 0x42),SCE(0x1e4c, 0, 0x82),SCE(0x1e4d, 1, 0x42), -SCE(0x1f75, 0, 0x42),SCE(0x1fcb, 1, 0x82),SCE(0x2c0e, 0, 0x82),SCE(0x2c3e, 1, 0x42), -SCE(0x1e50, 0, 0x82),SCE(0x1e51, 1, 0x42),SCE(0x24c0, 0, 0x82),SCE(0x24da, 1, 0x42), -SCE(0xa750, 0, 0x82),SCE(0xa751, 1, 0x42),SCE(0x00da, 0, 0x82),SCE(0x00fa, 1, 0x42), -SCE(0x10e9, 0, 0x42),SCE(0x1ca9, 1, 0x82),SCE(0x2cd8, 0, 0x82),SCE(0x2cd9, 1, 0x42), -SCE(0x1eb8, 0, 0x82),SCE(0x1eb9, 1, 0x42),SCE(0x012c, 0, 0x82),SCE(0x012d, 1, 0x42), -SCE(0x0252, 0, 0x42),SCE(0x2c70, 1, 0x82),SCE(0x04c3, 0, 0x82),SCE(0x04c4, 1, 0x42), -SCE(0x24c4, 0, 0x82),SCE(0x24de, 1, 0x42),SCE(0x104b5, 0, 0x82),SCE(0x104dd, 1, 0x42), -SCE(0x2c0f, 0, 0x82),SCE(0x2c3f, 1, 0x42),SCE(0x0533, 0, 0x82),SCE(0x0563, 1, 0x42), -SCE(0x0195, 0, 0x42),SCE(0x01f6, 1, 0x82),SCE(0x1f13, 0, 0x42),SCE(0x1f1b, 1, 0x82), -SCE(0x104b8, 0, 0x82),SCE(0x104e0, 1, 0x42),SCE(0x0553, 0, 0x82),SCE(0x0583, 1, 0x42), -SCE(0x10425, 0, 0x82),SCE(0x1044d, 1, 0x42),SCE(0x13d1, 0, 0x82),SCE(0xaba1, 1, 0x42), -SCE(0x04f4, 0, 0x82),SCE(0x04f5, 1, 0x42),SCE(0x04c7, 0, 0x82),SCE(0x04c8, 1, 0x42), -SCE(0x10cac, 0, 0x82),SCE(0x10cec, 1, 0x42),SCE(0x04d0, 0, 0x82),SCE(0x04d1, 1, 0x42), -SCE(0xa75c, 0, 0x82),SCE(0xa75d, 1, 0x42),SCE(0x1e2c, 0, 0x82),SCE(0x1e2d, 1, 0x42), -SCE(0x10a8, 0, 0x82),SCE(0x2d08, 1, 0x42),SCE(0x0464, 0, 0x82),SCE(0x0465, 1, 0x42), -SCE(0x0426, 0, 0x82),SCE(0x0446, 1, 0x42),SCE(0x04e4, 0, 0x82),SCE(0x04e5, 1, 0x42), -SCE(0x10ed, 0, 0x42),SCE(0x1cad, 1, 0x82),SCE(0xa792, 0, 0x82),SCE(0xa793, 1, 0x42), -SCE(0x1edc, 0, 0x82),SCE(0x1edd, 1, 0x42),SCE(0x104bc, 0, 0x82),SCE(0x104e4, 1, 0x42), -SCE(0x10577, 0, 0x82),SCE(0x1059e, 1, 0x42),SCE(0x1ea8, 0, 0x82),SCE(0x1ea9, 1, 0x42), -SCE(0x01b8, 0, 0x82),SCE(0x01b9, 1, 0x42),SCE(0x00c6, 0, 0x82),SCE(0x00e6, 1, 0x42), -SCE(0xff30, 0, 0x82),SCE(0xff50, 1, 0x42),SCE(0x16e44, 0, 0x82),SCE(0x16e64, 1, 0x42), -SCE(0x1041b, 0, 0x82),SCE(0x10443, 1, 0x42),SCE(0x1e0e, 0, 0x82),SCE(0x1e0f, 1, 0x42), -SCE(0x04d4, 0, 0x82),SCE(0x04d5, 1, 0x42),SCE(0x2cae, 0, 0x82),SCE(0x2caf, 1, 0x42), -SCE(0x2c6b, 0, 0x82),SCE(0x2c6c, 1, 0x42),SCE(0xff23, 0, 0x82),SCE(0xff43, 1, 0x42), -SCE(0x0184, 0, 0x82),SCE(0x0185, 1, 0x42),SCE(0x10573, 0, 0x82),SCE(0x1059a, 1, 0x42), -SCE(0x0398, 0, 0x84),SCE(0x03b8, 1, 0x44),SCE(0x03d1, 2, 0x44),SCE(0x03f4, 3, 0x84), -SCE(0x13d4, 0, 0x82),SCE(0xaba4, 1, 0x42),SCE(0x1e919, 0, 0x82),SCE(0x1e93b, 1, 0x42), -SCE(0x0187, 0, 0x82),SCE(0x0188, 1, 0x42),SCE(0x2c13, 0, 0x82),SCE(0x2c43, 1, 0x42), -SCE(0xa7a2, 0, 0x82),SCE(0xa7a3, 1, 0x42),SCE(0x0194, 0, 0x82),SCE(0x0263, 1, 0x42), -SCE(0x0416, 0, 0x82),SCE(0x0436, 1, 0x42),SCE(0x2cbe, 0, 0x82),SCE(0x2cbf, 1, 0x42), -SCE(0x1fa6, 0, 0x42),SCE(0x1fae, 1, 0x2),SCE(0x104c6, 0, 0x82),SCE(0x104ee, 1, 0x42), -SCE(0x1f82, 0, 0x42),SCE(0x1f8a, 1, 0x2),SCE(0x104c9, 0, 0x82),SCE(0x104f1, 1, 0x42), -SCE(0x13e0, 0, 0x82),SCE(0xabb0, 1, 0x42),SCE(0x0240, 0, 0x42),SCE(0x2c7f, 1, 0x82), -SCE(0xa7be, 0, 0x82),SCE(0xa7bf, 1, 0x42),SCE(0x1f92, 0, 0x42),SCE(0x1f9a, 1, 0x2), -SCE(0x0402, 0, 0x82),SCE(0x0452, 1, 0x42),SCE(0x0536, 0, 0x82),SCE(0x0566, 1, 0x42), -SCE(0x0550, 0, 0x82),SCE(0x0580, 1, 0x42),SCE(0xa682, 0, 0x82),SCE(0xa683, 1, 0x42), -SCE(0x0386, 0, 0x82),SCE(0x03ac, 1, 0x42),SCE(0x1fe5, 0, 0x42),SCE(0x1fec, 1, 0x82), -SCE(0x24c9, 0, 0x82),SCE(0x24e3, 1, 0x42),SCE(0x00d3, 0, 0x82),SCE(0x00f3, 1, 0x42), -SCE(0x10f0, 0, 0x42),SCE(0x1cb0, 1, 0x82),SCE(0x1e3c, 0, 0x82),SCE(0x1e3d, 1, 0x42), -SCE(0x2c80, 0, 0x82),SCE(0x2c81, 1, 0x42),SCE(0x1058a, 0, 0x82),SCE(0x105b1, 1, 0x42), -SCE(0x0156, 0, 0x82),SCE(0x0157, 1, 0x42),SCE(0x1e7a, 0, 0x82),SCE(0x1e7b, 1, 0x42), -SCE(0x13ed, 0, 0x82),SCE(0xabbd, 1, 0x42),SCE(0xa73e, 0, 0x82),SCE(0xa73f, 1, 0x42), -SCE(0x0118, 0, 0x82),SCE(0x0119, 1, 0x42),SCE(0x0214, 0, 0x82),SCE(0x0215, 1, 0x42), -SCE(0x1e60, 0, 0x83),SCE(0x1e61, 1, 0x43),SCE(0x1e9b, 2, 0x43),SCE(0x2c8a, 0, 0x82), -SCE(0x2c8b, 1, 0x42),SCE(0xa64c, 0, 0x82),SCE(0xa64d, 1, 0x42),SCE(0x0395, 0, 0x83), -SCE(0x03b5, 1, 0x43),SCE(0x03f5, 2, 0x43),SCE(0x01e6, 0, 0x82),SCE(0x01e7, 1, 0x42), -SCE(0x1f85, 0, 0x42),SCE(0x1f8d, 1, 0x2),SCE(0x0512, 0, 0x82),SCE(0x0513, 1, 0x42), -SCE(0x1f61, 0, 0x42),SCE(0x1f69, 1, 0x82),SCE(0xa668, 0, 0x82),SCE(0xa669, 1, 0x42), -SCE(0x10594, 0, 0x82),SCE(0x105bb, 1, 0x42),SCE(0x1e18, 0, 0x82),SCE(0x1e19, 1, 0x42), -SCE(0x13b2, 0, 0x82),SCE(0xab82, 1, 0x42),SCE(0x10415, 0, 0x82),SCE(0x1043d, 1, 0x42), -SCE(0x10418, 0, 0x82),SCE(0x10440, 1, 0x42),SCE(0x0245, 0, 0x82),SCE(0x028c, 1, 0x42), -SCE(0x1f72, 0, 0x42),SCE(0x1fc8, 1, 0x82),SCE(0x118b5, 0, 0x82),SCE(0x118d5, 1, 0x42), -SCE(0x10b8, 0, 0x82),SCE(0x2d18, 1, 0x42),SCE(0x04c0, 0, 0x82),SCE(0x04cf, 1, 0x42), -SCE(0x1040b, 0, 0x82),SCE(0x10433, 1, 0x42),SCE(0x0423, 0, 0x82),SCE(0x0443, 1, 0x42), -SCE(0x10c5, 0, 0x82),SCE(0x2d25, 1, 0x42),SCE(0x2c2d, 0, 0x82),SCE(0x2c5d, 1, 0x42), -SCE(0x1f30, 0, 0x42),SCE(0x1f38, 1, 0x82),SCE(0x13c1, 0, 0x82),SCE(0xab91, 1, 0x42), -SCE(0xa76c, 0, 0x82),SCE(0xa76d, 1, 0x42),SCE(0x104cc, 0, 0x82),SCE(0x104f4, 1, 0x42), -SCE(0x1f71, 0, 0x42),SCE(0x1fbb, 1, 0x82),SCE(0xff33, 0, 0x82),SCE(0xff53, 1, 0x42), -SCE(0x216a, 0, 0x82),SCE(0x217a, 1, 0x42),SCE(0x1ecc, 0, 0x82),SCE(0x1ecd, 1, 0x42), -SCE(0x03e8, 0, 0x82),SCE(0x03e9, 1, 0x42),SCE(0xa7d0, 0, 0x82),SCE(0xa7d1, 1, 0x42), -SCE(0x005a, 0, 0x82),SCE(0x007a, 1, 0x42),SCE(0x10cb0, 0, 0x82),SCE(0x10cf0, 1, 0x42), -SCE(0x01d9, 0, 0x82),SCE(0x01da, 1, 0x42),SCE(0x10587, 0, 0x82),SCE(0x105ae, 1, 0x42), -SCE(0x01b5, 0, 0x82),SCE(0x01b6, 1, 0x42),SCE(0x0543, 0, 0x82),SCE(0x0573, 1, 0x42), -SCE(0x1f22, 0, 0x42),SCE(0x1f2a, 1, 0x82),SCE(0x1ea0, 0, 0x82),SCE(0x1ea1, 1, 0x42), -SCE(0x10c8f, 0, 0x82),SCE(0x10ccf, 1, 0x42),SCE(0x16e54, 0, 0x82),SCE(0x16e74, 1, 0x42), -SCE(0x1d7d, 0, 0x42),SCE(0x2c63, 1, 0x82),SCE(0xa7d6, 0, 0x82),SCE(0xa7d7, 1, 0x42), -SCE(0xa74c, 0, 0x82),SCE(0xa74d, 1, 0x42),SCE(0x13ce, 0, 0x82),SCE(0xab9e, 1, 0x42), -SCE(0x00cf, 0, 0x82),SCE(0x00ef, 1, 0x42),SCE(0x10d9, 0, 0x42),SCE(0x1c99, 1, 0x82), -SCE(0x0045, 0, 0x82),SCE(0x0065, 1, 0x42),SCE(0x0136, 0, 0x82),SCE(0x0137, 1, 0x42), -SCE(0x040d, 0, 0x82),SCE(0x045d, 1, 0x42),SCE(0x16e43, 0, 0x82),SCE(0x16e63, 1, 0x42), -SCE(0x1f7c, 0, 0x42),SCE(0x1ffa, 1, 0x82),SCE(0x024a, 0, 0x82),SCE(0x024b, 1, 0x42), -SCE(0x04b8, 0, 0x82),SCE(0x04b9, 1, 0x42),SCE(0x2cca, 0, 0x82),SCE(0x2ccb, 1, 0x42), -SCE(0x2ced, 0, 0x82),SCE(0x2cee, 1, 0x42),SCE(0x019f, 0, 0x82),SCE(0x0275, 1, 0x42), -SCE(0x03a4, 0, 0x82),SCE(0x03c4, 1, 0x42),SCE(0xa74e, 0, 0x82),SCE(0xa74f, 1, 0x42), -SCE(0x104c0, 0, 0x82),SCE(0x104e8, 1, 0x42),SCE(0x1e16, 0, 0x82),SCE(0x1e17, 1, 0x42), -SCE(0x13af, 0, 0x82),SCE(0xab7f, 1, 0x42),SCE(0x0500, 0, 0x82),SCE(0x0501, 1, 0x42), -SCE(0x2c82, 0, 0x82),SCE(0x2c83, 1, 0x42),SCE(0x10bd, 0, 0x82),SCE(0x2d1d, 1, 0x42), -SCE(0x1e916, 0, 0x82),SCE(0x1e938, 1, 0x42),SCE(0x10ca3, 0, 0x82),SCE(0x10ce3, 1, 0x42), -SCE(0x10c94, 0, 0x82),SCE(0x10cd4, 1, 0x42),SCE(0x104c2, 0, 0x82),SCE(0x104ea, 1, 0x42), -SCE(0x03a6, 0, 0x83),SCE(0x03c6, 1, 0x43),SCE(0x03d5, 2, 0x43),SCE(0x16e4d, 0, 0x82), -SCE(0x16e6d, 1, 0x42),SCE(0x118b4, 0, 0x82),SCE(0x118d4, 1, 0x42),SCE(0x13e9, 0, 0x82), -SCE(0xabb9, 1, 0x42),SCE(0x1f41, 0, 0x42),SCE(0x1f49, 1, 0x82),SCE(0x0287, 0, 0x42), -SCE(0xa7b1, 1, 0x82),SCE(0x0542, 0, 0x82),SCE(0x0572, 1, 0x42),SCE(0x1e58, 0, 0x82), -SCE(0x1e59, 1, 0x42),SCE(0x1f43, 0, 0x42),SCE(0x1f4b, 1, 0x82),SCE(0x2ceb, 0, 0x82), -SCE(0x2cec, 1, 0x42),SCE(0x13eb, 0, 0x82),SCE(0xabbb, 1, 0x42),SCE(0x1fd1, 0, 0x42), -SCE(0x1fd9, 1, 0x82),SCE(0x1ee8, 0, 0x82),SCE(0x1ee9, 1, 0x42),SCE(0x13a3, 0, 0x82), -SCE(0xab73, 1, 0x42),SCE(0x03ee, 0, 0x82),SCE(0x03ef, 1, 0x42),SCE(0x118b8, 0, 0x82), -SCE(0x118d8, 1, 0x42),SCE(0x10c9e, 0, 0x82),SCE(0x10cde, 1, 0x42),SCE(0x1e920, 0, 0x82), -SCE(0x1e942, 1, 0x42),SCE(0x00ff, 0, 0x42),SCE(0x0178, 1, 0x82),SCE(0x10417, 0, 0x82), -SCE(0x1043f, 1, 0x42),SCE(0x118a9, 0, 0x82),SCE(0x118c9, 1, 0x42),SCE(0x1fb0, 0, 0x42), -SCE(0x1fb8, 1, 0x82),SCE(0x2c88, 0, 0x82),SCE(0x2c89, 1, 0x42),SCE(0x13a9, 0, 0x82), -SCE(0xab79, 1, 0x42),SCE(0x1e909, 0, 0x82),SCE(0x1e92b, 1, 0x42),SCE(0x13c2, 0, 0x82), -SCE(0xab92, 1, 0x42),SCE(0x24b6, 0, 0x82),SCE(0x24d0, 1, 0x42),SCE(0x1e5e, 0, 0x82), -SCE(0x1e5f, 1, 0x42),SCE(0x2c69, 0, 0x82),SCE(0x2c6a, 1, 0x42),SCE(0x1041f, 0, 0x82), -SCE(0x10447, 1, 0x42),SCE(0x037f, 0, 0x82),SCE(0x03f3, 1, 0x42),SCE(0x0540, 0, 0x82), -SCE(0x0570, 1, 0x42),SCE(0x004b, 0, 0x83),SCE(0x006b, 1, 0x43),SCE(0x212a, 2, 0x83), -SCE(0x04f8, 0, 0x82),SCE(0x04f9, 1, 0x42),SCE(0x13f3, 0, 0x82),SCE(0x13fb, 1, 0x42), -SCE(0x00c9, 0, 0x82),SCE(0x00e9, 1, 0x42),SCE(0x040f, 0, 0x82),SCE(0x045f, 1, 0x42), -SCE(0x10b5, 0, 0x82),SCE(0x2d15, 1, 0x42),SCE(0xa746, 0, 0x82),SCE(0xa747, 1, 0x42), -SCE(0x00cd, 0, 0x82),SCE(0x00ed, 1, 0x42),SCE(0x0476, 0, 0x82),SCE(0x0477, 1, 0x42), -SCE(0x039e, 0, 0x82),SCE(0x03be, 1, 0x42),SCE(0x1f20, 0, 0x42),SCE(0x1f28, 1, 0x82), -SCE(0x10fa, 0, 0x42),SCE(0x1cba, 1, 0x82),SCE(0x2c21, 0, 0x82),SCE(0x2c51, 1, 0x42), -SCE(0x1ea6, 0, 0x82),SCE(0x1ea7, 1, 0x42),SCE(0x1f83, 0, 0x42),SCE(0x1f8b, 1, 0x2), -SCE(0x053c, 0, 0x82),SCE(0x056c, 1, 0x42),SCE(0x1f01, 0, 0x42),SCE(0x1f09, 1, 0x82), -SCE(0x2cc2, 0, 0x82),SCE(0x2cc3, 1, 0x42),SCE(0x0208, 0, 0x82),SCE(0x0209, 1, 0x42), -SCE(0x13e3, 0, 0x82),SCE(0xabb3, 1, 0x42),SCE(0xa796, 0, 0x82),SCE(0xa797, 1, 0x42), -SCE(0x1f64, 0, 0x42),SCE(0x1f6c, 1, 0x82),SCE(0x10592, 0, 0x82),SCE(0x105b9, 1, 0x42), -SCE(0x04be, 0, 0x82),SCE(0x04bf, 1, 0x42),SCE(0x1f91, 0, 0x42),SCE(0x1f99, 1, 0x2), -SCE(0x03e6, 0, 0x82),SCE(0x03e7, 1, 0x42),SCE(0x1ee0, 0, 0x82),SCE(0x1ee1, 1, 0x42), -SCE(0x1ff3, 0, 0x42),SCE(0x1ffc, 1, 0x2),SCE(0x0413, 0, 0x82),SCE(0x0433, 1, 0x42), -SCE(0x042e, 0, 0x82),SCE(0x044e, 1, 0x42),SCE(0x104ca, 0, 0x82),SCE(0x104f2, 1, 0x42), -SCE(0x2c00, 0, 0x82),SCE(0x2c30, 1, 0x42),SCE(0x10db, 0, 0x42),SCE(0x1c9b, 1, 0x82), -SCE(0x10f6, 0, 0x42),SCE(0x1cb6, 1, 0x82),SCE(0x118be, 0, 0x82),SCE(0x118de, 1, 0x42), -SCE(0x01a7, 0, 0x82),SCE(0x01a8, 1, 0x42),SCE(0x10c3, 0, 0x82),SCE(0x2d23, 1, 0x42), -SCE(0x0415, 0, 0x82),SCE(0x0435, 1, 0x42),SCE(0x1e1e, 0, 0x82),SCE(0x1e1f, 1, 0x42), -SCE(0x0506, 0, 0x82),SCE(0x0507, 1, 0x42),SCE(0x1e64, 0, 0x82),SCE(0x1e65, 1, 0x42), -SCE(0x00c7, 0, 0x82),SCE(0x00e7, 1, 0x42),SCE(0x047c, 0, 0x82),SCE(0x047d, 1, 0x42), -SCE(0x1e52, 0, 0x82),SCE(0x1e53, 1, 0x42),SCE(0x10f4, 0, 0x42),SCE(0x1cb4, 1, 0x82), -SCE(0x10586, 0, 0x82),SCE(0x105ad, 1, 0x42),SCE(0x046a, 0, 0x82),SCE(0x046b, 1, 0x42), -SCE(0x2c27, 0, 0x82),SCE(0x2c57, 1, 0x42),SCE(0x10c89, 0, 0x82),SCE(0x10cc9, 1, 0x42), -SCE(0x10a2, 0, 0x82),SCE(0x2d02, 1, 0x42),SCE(0xff32, 0, 0x82),SCE(0xff52, 1, 0x42), -SCE(0x0398, 0, 0x84),SCE(0x03b8, 1, 0x44),SCE(0x03d1, 2, 0x44),SCE(0x03f4, 3, 0x84), -SCE(0x03a9, 0, 0x83),SCE(0x03c9, 1, 0x43),SCE(0x2126, 2, 0x83),SCE(0x1eda, 0, 0x82), -SCE(0x1edb, 1, 0x42),SCE(0x1e901, 0, 0x82),SCE(0x1e923, 1, 0x42),SCE(0xa79c, 0, 0x82), -SCE(0xa79d, 1, 0x42),SCE(0x10d3, 0, 0x42),SCE(0x1c93, 1, 0x82),SCE(0x24bc, 0, 0x82), -SCE(0x24d6, 1, 0x42),SCE(0xff2f, 0, 0x82),SCE(0xff4f, 1, 0x42),SCE(0x0250, 0, 0x42), -SCE(0x2c6f, 1, 0x82),SCE(0x2c29, 0, 0x82),SCE(0x2c59, 1, 0x42),SCE(0x04b2, 0, 0x82), -SCE(0x04b3, 1, 0x42),SCE(0x10419, 0, 0x82),SCE(0x10441, 1, 0x42),SCE(0x0210, 0, 0x82), -SCE(0x0211, 1, 0x42),SCE(0x2c15, 0, 0x82),SCE(0x2c45, 1, 0x42),SCE(0x16e47, 0, 0x82), -SCE(0x16e67, 1, 0x42),SCE(0xa754, 0, 0x82),SCE(0xa755, 1, 0x42),SCE(0x16e45, 0, 0x82), -SCE(0x16e65, 1, 0x42),SCE(0x01c7, 0, 0x83),SCE(0x01c8, 1, 0x3),SCE(0x01c9, 2, 0x43), -SCE(0x047e, 0, 0x82),SCE(0x047f, 1, 0x42),SCE(0x01fc, 0, 0x82),SCE(0x01fd, 1, 0x42), -SCE(0x020e, 0, 0x82),SCE(0x020f, 1, 0x42),SCE(0x0244, 0, 0x82),SCE(0x0289, 1, 0x42), -SCE(0x1f77, 0, 0x42),SCE(0x1fdb, 1, 0x82),SCE(0x2cd6, 0, 0x82),SCE(0x2cd7, 1, 0x42), -SCE(0x10589, 0, 0x82),SCE(0x105b0, 1, 0x42),SCE(0x0422, 0, 0x84),SCE(0x0442, 1, 0x44), -SCE(0x1c84, 2, 0x44),SCE(0x1c85, 3, 0x44),SCE(0x10e7, 0, 0x42),SCE(0x1ca7, 1, 0x82), -SCE(0x04fa, 0, 0x82),SCE(0x04fb, 1, 0x42),SCE(0x10d5, 0, 0x42),SCE(0x1c95, 1, 0x82), -SCE(0x1eac, 0, 0x82),SCE(0x1ead, 1, 0x42),SCE(0x10b7, 0, 0x82),SCE(0x2d17, 1, 0x42), -SCE(0x13a1, 0, 0x82),SCE(0xab71, 1, 0x42),SCE(0xa7c2, 0, 0x82),SCE(0xa7c3, 1, 0x42), -SCE(0x1e907, 0, 0x82),SCE(0x1e929, 1, 0x42),SCE(0x13f5, 0, 0x82),SCE(0x13fd, 1, 0x42), -SCE(0x1ee2, 0, 0x82),SCE(0x1ee3, 1, 0x42),SCE(0x1f62, 0, 0x42),SCE(0x1f6a, 1, 0x82), -SCE(0x1e92, 0, 0x82),SCE(0x1e93, 1, 0x42),SCE(0x01d5, 0, 0x82),SCE(0x01d6, 1, 0x42), -SCE(0x2c06, 0, 0x82),SCE(0x2c36, 1, 0x42),SCE(0x10c8b, 0, 0x82),SCE(0x10ccb, 1, 0x42), -SCE(0x1f70, 0, 0x42),SCE(0x1fba, 1, 0x82),SCE(0x03ec, 0, 0x82),SCE(0x03ed, 1, 0x42), -SCE(0x1e915, 0, 0x82),SCE(0x1e937, 1, 0x42),SCE(0x216e, 0, 0x82),SCE(0x217e, 1, 0x42), -SCE(0x13c0, 0, 0x82),SCE(0xab90, 1, 0x42),SCE(0x1ef4, 0, 0x82),SCE(0x1ef5, 1, 0x42), -SCE(0xff3a, 0, 0x82),SCE(0xff5a, 1, 0x42),SCE(0x118bc, 0, 0x82),SCE(0x118dc, 1, 0x42), -SCE(0x04aa, 0, 0x82),SCE(0x04ab, 1, 0x42),SCE(0x2163, 0, 0x82),SCE(0x2173, 1, 0x42), -SCE(0x1e1c, 0, 0x82),SCE(0x1e1d, 1, 0x42),SCE(0x13c8, 0, 0x82),SCE(0xab98, 1, 0x42), -SCE(0x118af, 0, 0x82),SCE(0x118cf, 1, 0x42),SCE(0x10c98, 0, 0x82),SCE(0x10cd8, 1, 0x42), -SCE(0x10571, 0, 0x82),SCE(0x10598, 1, 0x42),SCE(0x10ca7, 0, 0x82),SCE(0x10ce7, 1, 0x42), -SCE(0x0051, 0, 0x82),SCE(0x0071, 1, 0x42),SCE(0x04f2, 0, 0x82),SCE(0x04f3, 1, 0x42), -SCE(0x10caa, 0, 0x82),SCE(0x10cea, 1, 0x42),SCE(0x10af, 0, 0x82),SCE(0x2d0f, 1, 0x42), -SCE(0x2c8e, 0, 0x82),SCE(0x2c8f, 1, 0x42),SCE(0x2cc4, 0, 0x82),SCE(0x2cc5, 1, 0x42), -SCE(0x1e0a, 0, 0x82),SCE(0x1e0b, 1, 0x42),SCE(0x16e50, 0, 0x82),SCE(0x16e70, 1, 0x42), -SCE(0x1058e, 0, 0x82),SCE(0x105b5, 1, 0x42),SCE(0x10411, 0, 0x82),SCE(0x10439, 1, 0x42), -SCE(0x10423, 0, 0x82),SCE(0x1044b, 1, 0x42),SCE(0x053a, 0, 0x82),SCE(0x056a, 1, 0x42), -SCE(0x1e6c, 0, 0x82),SCE(0x1e6d, 1, 0x42),SCE(0x104be, 0, 0x82),SCE(0x104e6, 1, 0x42), -SCE(0x10424, 0, 0x82),SCE(0x1044c, 1, 0x42),SCE(0x10a9, 0, 0x82),SCE(0x2d09, 1, 0x42), -SCE(0x24c2, 0, 0x82),SCE(0x24dc, 1, 0x42),SCE(0x10c81, 0, 0x82),SCE(0x10cc1, 1, 0x42), -SCE(0x13bc, 0, 0x82),SCE(0xab8c, 1, 0x42),SCE(0x0462, 0, 0x83),SCE(0x0463, 1, 0x43), -SCE(0x1c87, 2, 0x43),SCE(0x118a6, 0, 0x82),SCE(0x118c6, 1, 0x42),SCE(0x1e4a, 0, 0x82), -SCE(0x1e4b, 1, 0x42),SCE(0x2162, 0, 0x82),SCE(0x2172, 1, 0x42),SCE(0x1ed4, 0, 0x82), -SCE(0x1ed5, 1, 0x42),SCE(0x10aa, 0, 0x82),SCE(0x2d0a, 1, 0x42),SCE(0x04ec, 0, 0x82), -SCE(0x04ed, 1, 0x42),SCE(0x2c0c, 0, 0x82),SCE(0x2c3c, 1, 0x42),SCE(0xa79a, 0, 0x82), -SCE(0xa79b, 1, 0x42),SCE(0x04cb, 0, 0x82),SCE(0x04cc, 1, 0x42),SCE(0x104bd, 0, 0x82), -SCE(0x104e5, 1, 0x42),SCE(0x0370, 0, 0x82),SCE(0x0371, 1, 0x42),SCE(0x1e914, 0, 0x82), -SCE(0x1e936, 1, 0x42),SCE(0x03da, 0, 0x82),SCE(0x03db, 1, 0x42),SCE(0x1f35, 0, 0x42), -SCE(0x1f3d, 1, 0x82),SCE(0x16e51, 0, 0x82),SCE(0x16e71, 1, 0x42),SCE(0x0392, 0, 0x83), -SCE(0x03b2, 1, 0x43),SCE(0x03d0, 2, 0x43),SCE(0x2c96, 0, 0x82),SCE(0x2c97, 1, 0x42), -SCE(0x0391, 0, 0x82),SCE(0x03b1, 1, 0x42),SCE(0x0534, 0, 0x82),SCE(0x0564, 1, 0x42), -SCE(0x041b, 0, 0x82),SCE(0x043b, 1, 0x42),SCE(0x13df, 0, 0x82),SCE(0xabaf, 1, 0x42), -SCE(0x2c2c, 0, 0x82),SCE(0x2c5c, 1, 0x42),SCE(0x0124, 0, 0x82),SCE(0x0125, 1, 0x42), -SCE(0x10ca2, 0, 0x82),SCE(0x10ce2, 1, 0x42),SCE(0x1e8c, 0, 0x82),SCE(0x1e8d, 1, 0x42), -SCE(0x1eb4, 0, 0x82),SCE(0x1eb5, 1, 0x42),SCE(0x016c, 0, 0x82),SCE(0x016d, 1, 0x42), -SCE(0x1e02, 0, 0x82),SCE(0x1e03, 1, 0x42),SCE(0x019a, 0, 0x42),SCE(0x023d, 1, 0x82), -SCE(0x0102, 0, 0x82),SCE(0x0103, 1, 0x42),SCE(0x1f14, 0, 0x42),SCE(0x1f1c, 1, 0x82), -SCE(0xff28, 0, 0x82),SCE(0xff48, 1, 0x42),SCE(0x10c80, 0, 0x82),SCE(0x10cc0, 1, 0x42), -SCE(0x10ee, 0, 0x42),SCE(0x1cae, 1, 0x82),SCE(0x1f55, 0, 0x42),SCE(0x1f5d, 1, 0x82), -SCE(0xa77b, 0, 0x82),SCE(0xa77c, 1, 0x42),SCE(0x0059, 0, 0x82),SCE(0x0079, 1, 0x42), -SCE(0x014a, 0, 0x82),SCE(0x014b, 1, 0x42),SCE(0x1e24, 0, 0x82),SCE(0x1e25, 1, 0x42), -SCE(0x13bd, 0, 0x82),SCE(0xab8d, 1, 0x42),SCE(0x2cbc, 0, 0x82),SCE(0x2cbd, 1, 0x42), -SCE(0x1040d, 0, 0x82),SCE(0x10435, 1, 0x42),SCE(0x1058f, 0, 0x82),SCE(0x105b6, 1, 0x42), -SCE(0x118a7, 0, 0x82),SCE(0x118c7, 1, 0x42),SCE(0xa660, 0, 0x82),SCE(0xa661, 1, 0x42), -SCE(0x0514, 0, 0x82),SCE(0x0515, 1, 0x42),SCE(0x052e, 0, 0x82),SCE(0x052f, 1, 0x42), -SCE(0x04a4, 0, 0x82),SCE(0x04a5, 1, 0x42),SCE(0x0400, 0, 0x82),SCE(0x0450, 1, 0x42), -SCE(0x16e58, 0, 0x82),SCE(0x16e78, 1, 0x42),SCE(0xa64e, 0, 0x82),SCE(0xa64f, 1, 0x42), -SCE(0xff2e, 0, 0x82),SCE(0xff4e, 1, 0x42),SCE(0x1040c, 0, 0x82),SCE(0x10434, 1, 0x42), -SCE(0x00db, 0, 0x82),SCE(0x00fb, 1, 0x42),SCE(0x01cd, 0, 0x82),SCE(0x01ce, 1, 0x42), -SCE(0x10e8, 0, 0x42),SCE(0x1ca8, 1, 0x82),SCE(0x054f, 0, 0x82),SCE(0x057f, 1, 0x42), -SCE(0xa738, 0, 0x82),SCE(0xa739, 1, 0x42),SCE(0x16e5f, 0, 0x82),SCE(0x16e7f, 1, 0x42), -SCE(0x1d79, 0, 0x42),SCE(0xa77d, 1, 0x82),SCE(0x1e90f, 0, 0x82),SCE(0x1e931, 1, 0x42), -SCE(0x2c07, 0, 0x82),SCE(0x2c37, 1, 0x42),SCE(0x10a3, 0, 0x82),SCE(0x2d03, 1, 0x42), -SCE(0xa7a0, 0, 0x82),SCE(0xa7a1, 1, 0x42),SCE(0x0421, 0, 0x83),SCE(0x0441, 1, 0x43), -SCE(0x1c83, 2, 0x43),SCE(0xa680, 0, 0x82),SCE(0xa681, 1, 0x42),SCE(0x0282, 0, 0x42), -SCE(0xa7c5, 1, 0x82),SCE(0x24cb, 0, 0x82),SCE(0x24e5, 1, 0x42),SCE(0x0401, 0, 0x82), -SCE(0x0451, 1, 0x42),SCE(0xa758, 0, 0x82),SCE(0xa759, 1, 0x42),SCE(0x0058, 0, 0x82), -SCE(0x0078, 1, 0x42),SCE(0x0193, 0, 0x82),SCE(0x0260, 1, 0x42),SCE(0x10ca1, 0, 0x82), -SCE(0x10ce1, 1, 0x42),SCE(0x054e, 0, 0x82),SCE(0x057e, 1, 0x42),SCE(0x0186, 0, 0x82), -SCE(0x0254, 1, 0x42),SCE(0x13dc, 0, 0x82),SCE(0xabac, 1, 0x42),SCE(0x24bd, 0, 0x82), -SCE(0x24d7, 1, 0x42),SCE(0x01b3, 0, 0x82),SCE(0x01b4, 1, 0x42),SCE(0xa696, 0, 0x82), -SCE(0xa697, 1, 0x42),SCE(0x0216, 0, 0x82),SCE(0x0217, 1, 0x42),SCE(0x1ece, 0, 0x82), -SCE(0x1ecf, 1, 0x42),SCE(0x2168, 0, 0x82),SCE(0x2178, 1, 0x42),SCE(0x1e90e, 0, 0x82), -SCE(0x1e930, 1, 0x42),SCE(0x2c12, 0, 0x82),SCE(0x2c42, 1, 0x42),SCE(0x2c2f, 0, 0x82), -SCE(0x2c5f, 1, 0x42),SCE(0x10cab, 0, 0x82),SCE(0x10ceb, 1, 0x42),SCE(0x1e86, 0, 0x82), -SCE(0x1e87, 1, 0x42),SCE(0x0412, 0, 0x83),SCE(0x0432, 1, 0x43),SCE(0x1c80, 2, 0x43), -SCE(0x13d6, 0, 0x82),SCE(0xaba6, 1, 0x42),SCE(0x1eba, 0, 0x82),SCE(0x1ebb, 1, 0x42), -SCE(0x1e91b, 0, 0x82),SCE(0x1e93d, 1, 0x42),SCE(0x1041a, 0, 0x82),SCE(0x10442, 1, 0x42), -SCE(0x1eee, 0, 0x82),SCE(0x1eef, 1, 0x42),SCE(0xff31, 0, 0x82),SCE(0xff51, 1, 0x42), -SCE(0xa7bc, 0, 0x82),SCE(0xa7bd, 1, 0x42),SCE(0x01db, 0, 0x82),SCE(0x01dc, 1, 0x42), -SCE(0x01a6, 0, 0x82),SCE(0x0280, 1, 0x42),SCE(0x1f07, 0, 0x42),SCE(0x1f0f, 1, 0x82), -SCE(0x118bd, 0, 0x82),SCE(0x118dd, 1, 0x42),SCE(0x00c8, 0, 0x82),SCE(0x00e8, 1, 0x42), -SCE(0x04d2, 0, 0x82),SCE(0x04d3, 1, 0x42),SCE(0x10e1, 0, 0x42),SCE(0x1ca1, 1, 0x82), -SCE(0x13b7, 0, 0x82),SCE(0xab87, 1, 0x42),SCE(0x10585, 0, 0x82),SCE(0x105ac, 1, 0x42), -SCE(0x16e4b, 0, 0x82),SCE(0x16e6b, 1, 0x42),SCE(0x0172, 0, 0x82),SCE(0x0173, 1, 0x42), -SCE(0x049e, 0, 0x82),SCE(0x049f, 1, 0x42),SCE(0x04e6, 0, 0x82),SCE(0x04e7, 1, 0x42), -SCE(0x10b0, 0, 0x82),SCE(0x2d10, 1, 0x42),SCE(0x2c9c, 0, 0x82),SCE(0x2c9d, 1, 0x42), -SCE(0x01ee, 0, 0x82),SCE(0x01ef, 1, 0x42),SCE(0x104b4, 0, 0x82),SCE(0x104dc, 1, 0x42), -SCE(0x10c87, 0, 0x82),SCE(0x10cc7, 1, 0x42),SCE(0x13ba, 0, 0x82),SCE(0xab8a, 1, 0x42), -SCE(0x1e10, 0, 0x82),SCE(0x1e11, 1, 0x42),SCE(0x0230, 0, 0x82),SCE(0x0231, 1, 0x42), -SCE(0x0428, 0, 0x82),SCE(0x0448, 1, 0x42),SCE(0x2cd0, 0, 0x82),SCE(0x2cd1, 1, 0x42), -SCE(0x118a0, 0, 0x82),SCE(0x118c0, 1, 0x42),SCE(0x03e0, 0, 0x82),SCE(0x03e1, 1, 0x42), -SCE(0x10588, 0, 0x82),SCE(0x105af, 1, 0x42),SCE(0xa780, 0, 0x82),SCE(0xa781, 1, 0x42), -SCE(0x10f5, 0, 0x42),SCE(0x1cb5, 1, 0x82),SCE(0x053b, 0, 0x82),SCE(0x056b, 1, 0x42), -SCE(0x00d5, 0, 0x82),SCE(0x00f5, 1, 0x42),SCE(0x0414, 0, 0x83),SCE(0x0434, 1, 0x43), -SCE(0x1c81, 2, 0x43),SCE(0x1fa4, 0, 0x42),SCE(0x1fac, 1, 0x2),SCE(0x012a, 0, 0x82), -SCE(0x012b, 1, 0x42),SCE(0x0052, 0, 0x82),SCE(0x0072, 1, 0x42),SCE(0x24b7, 0, 0x82), -SCE(0x24d1, 1, 0x42),SCE(0x1e908, 0, 0x82),SCE(0x1e92a, 1, 0x42),SCE(0x0398, 0, 0x84), -SCE(0x03b8, 1, 0x44),SCE(0x03d1, 2, 0x44),SCE(0x03f4, 3, 0x84),SCE(0x0202, 0, 0x82), -SCE(0x0203, 1, 0x42),SCE(0x0271, 0, 0x42),SCE(0x2c6e, 1, 0x82),SCE(0x0470, 0, 0x82), -SCE(0x0471, 1, 0x42),SCE(0x2c1b, 0, 0x82),SCE(0x2c4b, 1, 0x42),SCE(0x048a, 0, 0x82), -SCE(0x048b, 1, 0x42),SCE(0xa752, 0, 0x82),SCE(0xa753, 1, 0x42),SCE(0xff25, 0, 0x82), -SCE(0xff45, 1, 0x42),SCE(0x0407, 0, 0x82),SCE(0x0457, 1, 0x42),SCE(0x00c1, 0, 0x82), -SCE(0x00e1, 1, 0x42),SCE(0x1e44, 0, 0x82),SCE(0x1e45, 1, 0x42),SCE(0x1f97, 0, 0x42), -SCE(0x1f9f, 1, 0x2),SCE(0x0548, 0, 0x82),SCE(0x0578, 1, 0x42),SCE(0x021c, 0, 0x82), -SCE(0x021d, 1, 0x42),SCE(0x13e5, 0, 0x82),SCE(0xabb5, 1, 0x42),SCE(0x051a, 0, 0x82), -SCE(0x051b, 1, 0x42),SCE(0x2cb6, 0, 0x82),SCE(0x2cb7, 1, 0x42),SCE(0xa654, 0, 0x82), -SCE(0xa655, 1, 0x42),SCE(0x10403, 0, 0x82),SCE(0x1042b, 1, 0x42),SCE(0x1e72, 0, 0x82), -SCE(0x1e73, 1, 0x42),SCE(0x10d4, 0, 0x42),SCE(0x1c94, 1, 0x82),SCE(0x104c1, 0, 0x82), -SCE(0x104e9, 1, 0x42),SCE(0x10c8a, 0, 0x82),SCE(0x10cca, 1, 0x42),SCE(0x1e2a, 0, 0x82), -SCE(0x1e2b, 1, 0x42),SCE(0x0462, 0, 0x83),SCE(0x0463, 1, 0x43),SCE(0x1c87, 2, 0x43), -SCE(0x1f76, 0, 0x42),SCE(0x1fda, 1, 0x82),SCE(0x0053, 0, 0x83),SCE(0x0073, 1, 0x43), -SCE(0x017f, 2, 0x43),SCE(0x2c26, 0, 0x82),SCE(0x2c56, 1, 0x42),SCE(0x13a0, 0, 0x82), -SCE(0xab70, 1, 0x42),SCE(0x04c5, 0, 0x82),SCE(0x04c6, 1, 0x42),SCE(0x03fa, 0, 0x82), -SCE(0x03fb, 1, 0x42),SCE(0x0555, 0, 0x82),SCE(0x0585, 1, 0x42),SCE(0x13e8, 0, 0x82), -SCE(0xabb8, 1, 0x42),SCE(0x01c7, 0, 0x83),SCE(0x01c8, 1, 0x3),SCE(0x01c9, 2, 0x43), -SCE(0x1f42, 0, 0x42),SCE(0x1f4a, 1, 0x82),SCE(0x1f67, 0, 0x42),SCE(0x1f6f, 1, 0x82), -SCE(0x1057c, 0, 0x82),SCE(0x105a3, 1, 0x42),SCE(0xa7b4, 0, 0x82),SCE(0xa7b5, 1, 0x42), -SCE(0xa698, 0, 0x82),SCE(0xa699, 1, 0x42),SCE(0x1e904, 0, 0x82),SCE(0x1e926, 1, 0x42), -SCE(0x040c, 0, 0x82),SCE(0x045c, 1, 0x42),SCE(0x10da, 0, 0x42),SCE(0x1c9a, 1, 0x82), -SCE(0x00d0, 0, 0x82),SCE(0x00f0, 1, 0x42),SCE(0x16e46, 0, 0x82),SCE(0x16e66, 1, 0x42), -SCE(0x1ec2, 0, 0x82),SCE(0x1ec3, 1, 0x42),SCE(0x01e4, 0, 0x82),SCE(0x01e5, 1, 0x42), -SCE(0x0044, 0, 0x82),SCE(0x0064, 1, 0x42),SCE(0x017d, 0, 0x82),SCE(0x017e, 1, 0x42), -SCE(0x1f21, 0, 0x42),SCE(0x1f29, 1, 0x82),SCE(0xff39, 0, 0x82),SCE(0xff59, 1, 0x42), -SCE(0x13ac, 0, 0x82),SCE(0xab7c, 1, 0x42),SCE(0x1f00, 0, 0x42),SCE(0x1f08, 1, 0x82), -SCE(0x03a5, 0, 0x82),SCE(0x03c5, 1, 0x42),SCE(0x0158, 0, 0x82),SCE(0x0159, 1, 0x42), -SCE(0x104cf, 0, 0x82),SCE(0x104f7, 1, 0x42),SCE(0x1e3a, 0, 0x82),SCE(0x1e3b, 1, 0x42), -SCE(0xa72c, 0, 0x82),SCE(0xa72d, 1, 0x42),SCE(0x118b7, 0, 0x82),SCE(0x118d7, 1, 0x42), -SCE(0x0112, 0, 0x82),SCE(0x0113, 1, 0x42),SCE(0x1e36, 0, 0x82),SCE(0x1e37, 1, 0x42), -SCE(0x16e4e, 0, 0x82),SCE(0x16e6e, 1, 0x42),SCE(0x1f7d, 0, 0x42),SCE(0x1ffb, 1, 0x82), -SCE(0x0494, 0, 0x82),SCE(0x0495, 1, 0x42),SCE(0x1e80, 0, 0x82),SCE(0x1e81, 1, 0x42), -SCE(0x0116, 0, 0x82),SCE(0x0117, 1, 0x42),SCE(0x042d, 0, 0x82),SCE(0x044d, 1, 0x42), -SCE(0x13f2, 0, 0x82),SCE(0x13fa, 1, 0x42),SCE(0x0179, 0, 0x82),SCE(0x017a, 1, 0x42), -SCE(0x04da, 0, 0x82),SCE(0x04db, 1, 0x42),SCE(0x2ca8, 0, 0x82),SCE(0x2ca9, 1, 0x42), -SCE(0x00cc, 0, 0x82),SCE(0x00ec, 1, 0x42),SCE(0x01a2, 0, 0x82),SCE(0x01a3, 1, 0x42), -SCE(0x03a1, 0, 0x83),SCE(0x03c1, 1, 0x43),SCE(0x03f1, 2, 0x43),SCE(0x1e7c, 0, 0x82), -SCE(0x1e7d, 1, 0x42),SCE(0x13cf, 0, 0x82),SCE(0xab9f, 1, 0x42),SCE(0x10412, 0, 0x82), -SCE(0x1043a, 1, 0x42),SCE(0x0520, 0, 0x82),SCE(0x0521, 1, 0x42),SCE(0x2c1c, 0, 0x82), -SCE(0x2c4c, 1, 0x42),SCE(0x026b, 0, 0x42),SCE(0x2c62, 1, 0x82),SCE(0x10591, 0, 0x82), -SCE(0x105b8, 1, 0x42),SCE(0x015c, 0, 0x82),SCE(0x015d, 1, 0x42),SCE(0xa652, 0, 0x82), -SCE(0xa653, 1, 0x42),SCE(0xff26, 0, 0x82),SCE(0xff46, 1, 0x42),SCE(0x01e8, 0, 0x82), -SCE(0x01e9, 1, 0x42),SCE(0x10b6, 0, 0x82),SCE(0x2d16, 1, 0x42),SCE(0xa656, 0, 0x82), -SCE(0xa657, 1, 0x42),SCE(0x051c, 0, 0x82),SCE(0x051d, 1, 0x42),SCE(0x13c3, 0, 0x82), -SCE(0xab93, 1, 0x42),SCE(0x104cb, 0, 0x82),SCE(0x104f3, 1, 0x42),SCE(0x1ec6, 0, 0x82), -SCE(0x1ec7, 1, 0x42),SCE(0x01e0, 0, 0x82),SCE(0x01e1, 1, 0x42),SCE(0x1f63, 0, 0x42), -SCE(0x1f6b, 1, 0x82),SCE(0x2c01, 0, 0x82),SCE(0x2c31, 1, 0x42),SCE(0x1e900, 0, 0x82), -SCE(0x1e922, 1, 0x42),SCE(0x1e78, 0, 0x82),SCE(0x1e79, 1, 0x42),SCE(0x24ce, 0, 0x82), -SCE(0x24e8, 1, 0x42),SCE(0xa76a, 0, 0x82),SCE(0xa76b, 1, 0x42),SCE(0x011a, 0, 0x82), -SCE(0x011b, 1, 0x42),SCE(0x0429, 0, 0x82),SCE(0x0449, 1, 0x42),SCE(0x1f84, 0, 0x42), -SCE(0x1f8c, 1, 0x2),SCE(0x10d6, 0, 0x42),SCE(0x1c96, 1, 0x82),SCE(0x1fb1, 0, 0x42), -SCE(0x1fb9, 1, 0x82),SCE(0xa762, 0, 0x82),SCE(0xa763, 1, 0x42),SCE(0x10cb2, 0, 0x82), -SCE(0x10cf2, 1, 0x42),SCE(0x2c20, 0, 0x82),SCE(0x2c50, 1, 0x42),SCE(0x10be, 0, 0x82), -SCE(0x2d1e, 1, 0x42),SCE(0x1041e, 0, 0x82),SCE(0x10446, 1, 0x42),SCE(0x04e2, 0, 0x82), -SCE(0x04e3, 1, 0x42),SCE(0x04de, 0, 0x82),SCE(0x04df, 1, 0x42),SCE(0x13ea, 0, 0x82), -SCE(0xabba, 1, 0x42),SCE(0x0541, 0, 0x82),SCE(0x0571, 1, 0x42),SCE(0x0545, 0, 0x82), -SCE(0x0575, 1, 0x42),SCE(0x1f25, 0, 0x42),SCE(0x1f2d, 1, 0x82),SCE(0x0154, 0, 0x82), -SCE(0x0155, 1, 0x42),SCE(0x2c24, 0, 0x82),SCE(0x2c54, 1, 0x42),SCE(0x13ee, 0, 0x82), -SCE(0xabbe, 1, 0x42),SCE(0x0181, 0, 0x82),SCE(0x0253, 1, 0x42),SCE(0x03a3, 0, 0x83), -SCE(0x03c2, 1, 0x43),SCE(0x03c3, 2, 0x43),SCE(0x118b3, 0, 0x82),SCE(0x118d3, 1, 0x42), -SCE(0x10ba, 0, 0x82),SCE(0x2d1a, 1, 0x42),SCE(0x0180, 0, 0x42),SCE(0x0243, 1, 0x82), -SCE(0x1e3e, 0, 0x82),SCE(0x1e3f, 1, 0x42),SCE(0x10ff, 0, 0x42),SCE(0x1cbf, 1, 0x82), -SCE(0x10c88, 0, 0x82),SCE(0x10cc8, 1, 0x42),SCE(0x10d2, 0, 0x42),SCE(0x1c92, 1, 0x82), -SCE(0xa76e, 0, 0x82),SCE(0xa76f, 1, 0x42),SCE(0x1c88, 0, 0x43),SCE(0xa64a, 1, 0x83), -SCE(0xa64b, 2, 0x43),SCE(0x10b2, 0, 0x82),SCE(0x2d12, 1, 0x42),SCE(0x13c7, 0, 0x82), -SCE(0xab97, 1, 0x42),SCE(0x0518, 0, 0x82),SCE(0x0519, 1, 0x42),SCE(0xa766, 0, 0x82), -SCE(0xa767, 1, 0x42),SCE(0x01ec, 0, 0x82),SCE(0x01ed, 1, 0x42),SCE(0x104c3, 0, 0x82), -SCE(0x104eb, 1, 0x42),SCE(0x10574, 0, 0x82),SCE(0x1059b, 1, 0x42),SCE(0x1e91c, 0, 0x82), -SCE(0x1e93e, 1, 0x42),SCE(0x10e2, 0, 0x42),SCE(0x1ca2, 1, 0x82),SCE(0x2c05, 0, 0x82), -SCE(0x2c35, 1, 0x42),SCE(0x04a0, 0, 0x82),SCE(0x04a1, 1, 0x42),SCE(0x1e42, 0, 0x82), -SCE(0x1e43, 1, 0x42),SCE(0x13b4, 0, 0x82),SCE(0xab84, 1, 0x42),SCE(0x118bf, 0, 0x82), -SCE(0x118df, 1, 0x42),SCE(0x0150, 0, 0x82),SCE(0x0151, 1, 0x42),SCE(0x2cb0, 0, 0x82), -SCE(0x2cb1, 1, 0x42),SCE(0x13a4, 0, 0x82),SCE(0xab74, 1, 0x42),SCE(0x04c1, 0, 0x82), -SCE(0x04c2, 1, 0x42),SCE(0x01ca, 0, 0x83),SCE(0x01cb, 1, 0x3),SCE(0x01cc, 2, 0x43), -SCE(0x004c, 0, 0x82),SCE(0x006c, 1, 0x42),SCE(0x104c7, 0, 0x82),SCE(0x104ef, 1, 0x42), -SCE(0x16e5a, 0, 0x82),SCE(0x16e7a, 1, 0x42),SCE(0x0222, 0, 0x82),SCE(0x0223, 1, 0x42), -SCE(0x0490, 0, 0x82),SCE(0x0491, 1, 0x42),SCE(0x2cf2, 0, 0x82),SCE(0x2cf3, 1, 0x42), -SCE(0x10595, 0, 0x82),SCE(0x105bc, 1, 0x42),SCE(0x053d, 0, 0x82),SCE(0x056d, 1, 0x42), -SCE(0x0388, 0, 0x82),SCE(0x03ad, 1, 0x42),SCE(0x0549, 0, 0x82),SCE(0x0579, 1, 0x42), -SCE(0x13e2, 0, 0x82),SCE(0xabb2, 1, 0x42),SCE(0x16e4a, 0, 0x82),SCE(0x16e6a, 1, 0x42), -SCE(0x1efc, 0, 0x82),SCE(0x1efd, 1, 0x42),SCE(0x1f90, 0, 0x42),SCE(0x1f98, 1, 0x2), -SCE(0x04d6, 0, 0x82),SCE(0x04d7, 1, 0x42),SCE(0xa7b8, 0, 0x82),SCE(0xa7b9, 1, 0x42), -SCE(0x0414, 0, 0x83),SCE(0x0434, 1, 0x43),SCE(0x1c81, 2, 0x43),SCE(0x10cad, 0, 0x82), -SCE(0x10ced, 1, 0x42),SCE(0x10f7, 0, 0x42),SCE(0x1cb7, 1, 0x82),SCE(0x16e55, 0, 0x82), -SCE(0x16e75, 1, 0x42),SCE(0xa728, 0, 0x82),SCE(0xa729, 1, 0x42),SCE(0x1e00, 0, 0x82), -SCE(0x1e01, 1, 0x42),SCE(0x0232, 0, 0x82),SCE(0x0233, 1, 0x42),SCE(0x10a5, 0, 0x82), -SCE(0x2d05, 1, 0x42),SCE(0x1f15, 0, 0x42),SCE(0x1f1d, 1, 0x82),SCE(0x03a9, 0, 0x83), -SCE(0x03c9, 1, 0x43),SCE(0x2126, 2, 0x83),SCE(0x013b, 0, 0x82),SCE(0x013c, 1, 0x42), -SCE(0x0408, 0, 0x82),SCE(0x0458, 1, 0x42),SCE(0x00dc, 0, 0x82),SCE(0x00fc, 1, 0x42), -SCE(0x1ebe, 0, 0x82),SCE(0x1ebf, 1, 0x42),SCE(0x2c18, 0, 0x82),SCE(0x2c48, 1, 0x42), -SCE(0xa7a8, 0, 0x82),SCE(0xa7a9, 1, 0x42),SCE(0x216b, 0, 0x82),SCE(0x217b, 1, 0x42), -SCE(0x2c10, 0, 0x82),SCE(0x2c40, 1, 0x42),SCE(0x2cde, 0, 0x82),SCE(0x2cdf, 1, 0x42), -SCE(0x029e, 0, 0x42),SCE(0xa7b0, 1, 0x82),SCE(0x00d4, 0, 0x82),SCE(0x00f4, 1, 0x42), -SCE(0x10ef, 0, 0x42),SCE(0x1caf, 1, 0x82),SCE(0x0551, 0, 0x82),SCE(0x0581, 1, 0x42), -SCE(0x13da, 0, 0x82),SCE(0xabaa, 1, 0x42),SCE(0x0535, 0, 0x82),SCE(0x0565, 1, 0x42), -SCE(0x10c9d, 0, 0x82),SCE(0x10cdd, 1, 0x42),SCE(0x24c6, 0, 0x82),SCE(0x24e0, 1, 0x42), -SCE(0x0410, 0, 0x82),SCE(0x0430, 1, 0x42),SCE(0x1eb6, 0, 0x82),SCE(0x1eb7, 1, 0x42), -SCE(0x10416, 0, 0x82),SCE(0x1043e, 1, 0x42),SCE(0x16e42, 0, 0x82),SCE(0x16e62, 1, 0x42), -SCE(0x0164, 0, 0x82),SCE(0x0165, 1, 0x42),SCE(0x2ca0, 0, 0x82),SCE(0x2ca1, 1, 0x42), -SCE(0x1e2e, 0, 0x82),SCE(0x1e2f, 1, 0x42),SCE(0x10c95, 0, 0x82),SCE(0x10cd5, 1, 0x42), -SCE(0x0498, 0, 0x82),SCE(0x0499, 1, 0x42),SCE(0x010a, 0, 0x82),SCE(0x010b, 1, 0x42), -SCE(0x118aa, 0, 0x82),SCE(0x118ca, 1, 0x42),SCE(0x1e88, 0, 0x82),SCE(0x1e89, 1, 0x42), -SCE(0x0528, 0, 0x82),SCE(0x0529, 1, 0x42),SCE(0x13d7, 0, 0x82),SCE(0xaba7, 1, 0x42), -SCE(0xa65a, 0, 0x82),SCE(0xa65b, 1, 0x42),SCE(0x022a, 0, 0x82),SCE(0x022b, 1, 0x42), -SCE(0x1fa5, 0, 0x42),SCE(0x1fad, 1, 0x2),SCE(0x104b3, 0, 0x82),SCE(0x104db, 1, 0x42), -SCE(0x1e90c, 0, 0x82),SCE(0x1e92e, 1, 0x42),SCE(0x24bb, 0, 0x82),SCE(0x24d5, 1, 0x42), -SCE(0x01f4, 0, 0x82),SCE(0x01f5, 1, 0x42),SCE(0xa690, 0, 0x82),SCE(0xa691, 1, 0x42), -SCE(0xff29, 0, 0x82),SCE(0xff49, 1, 0x42),SCE(0x2c75, 0, 0x82),SCE(0x2c76, 1, 0x42), -SCE(0x2cb8, 0, 0x82),SCE(0x2cb9, 1, 0x42),SCE(0x10401, 0, 0x82),SCE(0x10429, 1, 0x42), -SCE(0x2c0d, 0, 0x82),SCE(0x2c3d, 1, 0x42),SCE(0x104d0, 0, 0x82),SCE(0x104f8, 1, 0x42), -SCE(0x1e913, 0, 0x82),SCE(0x1e935, 1, 0x42),SCE(0x01af, 0, 0x82),SCE(0x01b0, 1, 0x42), -SCE(0xa7c7, 0, 0x82),SCE(0xa7c8, 1, 0x42),SCE(0x13bf, 0, 0x82),SCE(0xab8f, 1, 0x42), -SCE(0x10402, 0, 0x82),SCE(0x1042a, 1, 0x42),SCE(0x10ea, 0, 0x42),SCE(0x1caa, 1, 0x82), -SCE(0x104bf, 0, 0x82),SCE(0x104e7, 1, 0x42),SCE(0x1058d, 0, 0x82),SCE(0x105b4, 1, 0x42), -SCE(0x2164, 0, 0x82),SCE(0x2174, 1, 0x42),SCE(0x018e, 0, 0x82),SCE(0x01dd, 1, 0x42), -SCE(0x01d3, 0, 0x82),SCE(0x01d4, 1, 0x42),SCE(0x1f10, 0, 0x42),SCE(0x1f18, 1, 0x82), -SCE(0x1f57, 0, 0x42),SCE(0x1f5f, 1, 0x82),SCE(0x1ed2, 0, 0x82),SCE(0x1ed3, 1, 0x42), -SCE(0xff2a, 0, 0x82),SCE(0xff4a, 1, 0x42),SCE(0x1e04, 0, 0x82),SCE(0x1e05, 1, 0x42), -SCE(0x04ee, 0, 0x82),SCE(0x04ef, 1, 0x42),SCE(0x2c94, 0, 0x82),SCE(0x2c95, 1, 0x42), -SCE(0x00c0, 0, 0x82),SCE(0x00e0, 1, 0x42),SCE(0x13db, 0, 0x82),SCE(0xabab, 1, 0x42), -SCE(0x01b2, 0, 0x82),SCE(0x028b, 1, 0x42),SCE(0x10426, 0, 0x82),SCE(0x1044e, 1, 0x42), -SCE(0xa662, 0, 0x82),SCE(0xa663, 1, 0x42),SCE(0x0054, 0, 0x82),SCE(0x0074, 1, 0x42), -SCE(0x0556, 0, 0x82),SCE(0x0586, 1, 0x42),SCE(0x042a, 0, 0x83),SCE(0x044a, 1, 0x43), -SCE(0x1c86, 2, 0x43),SCE(0x10422, 0, 0x82),SCE(0x1044a, 1, 0x42),SCE(0x1f36, 0, 0x42), -SCE(0x1f3e, 1, 0x82),SCE(0xa794, 0, 0x42),SCE(0xa7c4, 1, 0x82),SCE(0x04cd, 0, 0x82), -SCE(0x04ce, 1, 0x42),SCE(0x104bb, 0, 0x82),SCE(0x104e3, 1, 0x42),SCE(0x023b, 0, 0x82), -SCE(0x023c, 1, 0x42),SCE(0x01cf, 0, 0x82),SCE(0x01d0, 1, 0x42),SCE(0x050c, 0, 0x82), -SCE(0x050d, 1, 0x42),SCE(0xa646, 0, 0x82),SCE(0xa647, 1, 0x42),SCE(0x1e46, 0, 0x82), -SCE(0x1e47, 1, 0x42),SCE(0x10ca6, 0, 0x82),SCE(0x10ce6, 1, 0x42),SCE(0xa779, 0, 0x82), -SCE(0xa77a, 1, 0x42),SCE(0xff36, 0, 0x82),SCE(0xff56, 1, 0x42),SCE(0x118a2, 0, 0x82), -SCE(0x118c2, 1, 0x42),SCE(0x04ea, 0, 0x82),SCE(0x04eb, 1, 0x42),SCE(0x041d, 0, 0x82), -SCE(0x043d, 1, 0x42),SCE(0x16e52, 0, 0x82),SCE(0x16e72, 1, 0x42),SCE(0xa688, 0, 0x82), -SCE(0xa689, 1, 0x42),SCE(0x1eb2, 0, 0x82),SCE(0x1eb3, 1, 0x42),SCE(0x2160, 0, 0x82), -SCE(0x2170, 1, 0x42),SCE(0x1ed6, 0, 0x82),SCE(0x1ed7, 1, 0x42),SCE(0x24c3, 0, 0x82), -SCE(0x24dd, 1, 0x42),SCE(0x16e5e, 0, 0x82),SCE(0x16e7e, 1, 0x42),SCE(0x04ac, 0, 0x82), -SCE(0x04ad, 1, 0x42),SCE(0x1e910, 0, 0x82),SCE(0x1e932, 1, 0x42),SCE(0x023e, 0, 0x82), -SCE(0x2c66, 1, 0x42),SCE(0x2cb4, 0, 0x82),SCE(0x2cb5, 1, 0x42),SCE(0xff2d, 0, 0x82), -SCE(0xff4d, 1, 0x42),SCE(0x014c, 0, 0x82),SCE(0x014d, 1, 0x42),SCE(0x1e22, 0, 0x82), -SCE(0x1e23, 1, 0x42),SCE(0x13bb, 0, 0x82),SCE(0xab8b, 1, 0x42),SCE(0x0143, 0, 0x82), -SCE(0x0144, 1, 0x42),SCE(0x10581, 0, 0x82),SCE(0x105a8, 1, 0x42),SCE(0x0170, 0, 0x82), -SCE(0x0171, 1, 0x42),SCE(0x1e94, 0, 0x82),SCE(0x1e95, 1, 0x42),SCE(0x2c28, 0, 0x82), -SCE(0x2c58, 1, 0x42),SCE(0x1040e, 0, 0x82),SCE(0x10436, 1, 0x42),SCE(0x104b2, 0, 0x82), -SCE(0x104da, 1, 0x42),SCE(0xa798, 0, 0x82),SCE(0xa799, 1, 0x42),SCE(0x13b8, 0, 0x82), -SCE(0xab88, 1, 0x42),SCE(0x1e70, 0, 0x82),SCE(0x1e71, 1, 0x42),SCE(0x0422, 0, 0x84), -SCE(0x0442, 1, 0x44),SCE(0x1c84, 2, 0x44),SCE(0x1c85, 3, 0x44),SCE(0x10c85, 0, 0x82), -SCE(0x10cc5, 1, 0x42),SCE(0x1eae, 0, 0x82),SCE(0x1eaf, 1, 0x42),SCE(0x0122, 0, 0x82), -SCE(0x0123, 1, 0x42),SCE(0x10c8c, 0, 0x82),SCE(0x10ccc, 1, 0x42),SCE(0x10405, 0, 0x82), -SCE(0x1042d, 1, 0x42),SCE(0x0420, 0, 0x82),SCE(0x0440, 1, 0x42),SCE(0x01ae, 0, 0x82), -SCE(0x0288, 1, 0x42),SCE(0x021a, 0, 0x82),SCE(0x021b, 1, 0x42),SCE(0x038c, 0, 0x82), -SCE(0x03cc, 1, 0x42),SCE(0x1f95, 0, 0x42),SCE(0x1f9d, 1, 0x2),SCE(0x0345, 0, 0x44), -SCE(0x0399, 1, 0x84),SCE(0x03b9, 2, 0x44),SCE(0x1fbe, 3, 0x44),SCE(0x018a, 0, 0x82), -SCE(0x0257, 1, 0x42),SCE(0x2c90, 0, 0x82),SCE(0x2c91, 1, 0x42),SCE(0x10b1, 0, 0x82), -SCE(0x2d11, 1, 0x42),SCE(0x011e, 0, 0x82),SCE(0x011f, 1, 0x42),SCE(0x1e08, 0, 0x82), -SCE(0x1e09, 1, 0x42),SCE(0xa7c0, 0, 0x82),SCE(0xa7c1, 1, 0x42),SCE(0x13e7, 0, 0x82), -SCE(0xabb7, 1, 0x42),SCE(0x10580, 0, 0x82),SCE(0x105a7, 1, 0x42),SCE(0x041c, 0, 0x82), -SCE(0x043c, 1, 0x42),SCE(0xa7a4, 0, 0x82),SCE(0xa7a5, 1, 0x42),SCE(0x1e74, 0, 0x82), -SCE(0x1e75, 1, 0x42),SCE(0x2c14, 0, 0x82),SCE(0x2c44, 1, 0x42),SCE(0x1e90d, 0, 0x82), -SCE(0x1e92f, 1, 0x42),SCE(0x13a5, 0, 0x82),SCE(0xab75, 1, 0x42),SCE(0x10f3, 0, 0x42), -SCE(0x1cb3, 1, 0x82),SCE(0x24ba, 0, 0x82),SCE(0x24d4, 1, 0x42),SCE(0x013f, 0, 0x82), -SCE(0x0140, 1, 0x42),SCE(0x039d, 0, 0x82),SCE(0x03bd, 1, 0x42),SCE(0x2ce2, 0, 0x82), -SCE(0x2ce3, 1, 0x42),SCE(0x10a1, 0, 0x82),SCE(0x2d01, 1, 0x42),SCE(0x0508, 0, 0x82), -SCE(0x0509, 1, 0x42),SCE(0x004d, 0, 0x82),SCE(0x006d, 1, 0x42),SCE(0x0389, 0, 0x82), -SCE(0x03ae, 1, 0x42),SCE(0x048c, 0, 0x82),SCE(0x048d, 1, 0x42),SCE(0x2c04, 0, 0x82), -SCE(0x2c34, 1, 0x42),SCE(0x216f, 0, 0x82),SCE(0x217f, 1, 0x42),SCE(0x04b0, 0, 0x82), -SCE(0x04b1, 1, 0x42),SCE(0x2cd2, 0, 0x82),SCE(0x2cd3, 1, 0x42),SCE(0xa734, 0, 0x82), -SCE(0xa735, 1, 0x42),SCE(0x10584, 0, 0x82),SCE(0x105ab, 1, 0x42),SCE(0x0050, 0, 0x82), -SCE(0x0070, 1, 0x42),SCE(0x0160, 0, 0x82),SCE(0x0161, 1, 0x42),SCE(0x10ca9, 0, 0x82), -SCE(0x10ce9, 1, 0x42),SCE(0x1e32, 0, 0x82),SCE(0x1e33, 1, 0x42),SCE(0x0200, 0, 0x82), -SCE(0x0201, 1, 0x42),SCE(0x118ab, 0, 0x82),SCE(0x118cb, 1, 0x42),SCE(0xa786, 0, 0x82), -SCE(0xa787, 1, 0x42),SCE(0x118bb, 0, 0x82),SCE(0x118db, 1, 0x42),SCE(0x118ae, 0, 0x82), -SCE(0x118ce, 1, 0x42),SCE(0x021e, 0, 0x82),SCE(0x021f, 1, 0x42),SCE(0x03aa, 0, 0x82), -SCE(0x03ca, 1, 0x42),SCE(0x10c2, 0, 0x82),SCE(0x2d22, 1, 0x42),SCE(0x13c4, 0, 0x82), -SCE(0xab94, 1, 0x42),SCE(0x0539, 0, 0x82),SCE(0x0569, 1, 0x42),SCE(0xa74a, 0, 0x82), -SCE(0xa74b, 1, 0x42),SCE(0x00c3, 0, 0x82),SCE(0x00e3, 1, 0x42),SCE(0x046e, 0, 0x82), -SCE(0x046f, 1, 0x42),SCE(0x054d, 0, 0x82),SCE(0x057d, 1, 0x42),SCE(0x10e3, 0, 0x42), -SCE(0x1ca3, 1, 0x82),SCE(0x03de, 0, 0x82),SCE(0x03df, 1, 0x42),SCE(0x24ca, 0, 0x82), -SCE(0x24e4, 1, 0x42),SCE(0x0345, 0, 0x44),SCE(0x0399, 1, 0x84),SCE(0x03b9, 2, 0x44), -SCE(0x1fbe, 3, 0x44),SCE(0x10c99, 0, 0x82),SCE(0x10cd9, 1, 0x42),SCE(0xa75a, 0, 0x82), -SCE(0xa75b, 1, 0x42),SCE(0x0419, 0, 0x82),SCE(0x0439, 1, 0x42),SCE(0x2c09, 0, 0x82), -SCE(0x2c39, 1, 0x42),SCE(0x037d, 0, 0x42),SCE(0x03ff, 1, 0x82),SCE(0x1f26, 0, 0x42), -SCE(0x1f2e, 1, 0x82),SCE(0x118b2, 0, 0x82),SCE(0x118d2, 1, 0x42),SCE(0x2183, 0, 0x82), -SCE(0x2184, 1, 0x42),SCE(0x2c23, 0, 0x82),SCE(0x2c53, 1, 0x42),SCE(0x0132, 0, 0x82), -SCE(0x0133, 1, 0x42),SCE(0x1e56, 0, 0x82),SCE(0x1e57, 1, 0x42),SCE(0x10ae, 0, 0x82), -SCE(0x2d0e, 1, 0x42),SCE(0xa740, 0, 0x82),SCE(0xa741, 1, 0x42),SCE(0x00dd, 0, 0x82), -SCE(0x00fd, 1, 0x42),SCE(0x10e6, 0, 0x42),SCE(0x1ca6, 1, 0x82),SCE(0x1e60, 0, 0x83), -SCE(0x1e61, 1, 0x43),SCE(0x1e9b, 2, 0x43),SCE(0x0478, 0, 0x82),SCE(0x0479, 1, 0x42), -SCE(0x022e, 0, 0x82),SCE(0x022f, 1, 0x42),SCE(0xa694, 0, 0x82),SCE(0xa695, 1, 0x42), -SCE(0x052c, 0, 0x82),SCE(0x052d, 1, 0x42),SCE(0x10570, 0, 0x82),SCE(0x10597, 1, 0x42), -SCE(0xa666, 0, 0x82),SCE(0xa667, 1, 0x42),SCE(0x13a8, 0, 0x82),SCE(0xab78, 1, 0x42), -SCE(0x10c96, 0, 0x82),SCE(0x10cd6, 1, 0x42),SCE(0x020a, 0, 0x82),SCE(0x020b, 1, 0x42), -SCE(0x24bf, 0, 0x82),SCE(0x24d9, 1, 0x42),SCE(0x13cb, 0, 0x82),SCE(0xab9b, 1, 0x42), -SCE(0x10c9c, 0, 0x82),SCE(0x10cdc, 1, 0x42),SCE(0x041e, 0, 0x83),SCE(0x043e, 1, 0x43), -SCE(0x1c82, 2, 0x43),SCE(0x1e84, 0, 0x82),SCE(0x1e85, 1, 0x42),SCE(0x1ef0, 0, 0x82), -SCE(0x1ef1, 1, 0x42),SCE(0x16e59, 0, 0x82),SCE(0x16e79, 1, 0x42),SCE(0x2ca4, 0, 0x82), -SCE(0x2ca5, 1, 0x42),SCE(0xa724, 0, 0x82),SCE(0xa725, 1, 0x42),SCE(0x049c, 0, 0x82), -SCE(0x049d, 1, 0x42),SCE(0x010e, 0, 0x82),SCE(0x010f, 1, 0x42),SCE(0x104d3, 0, 0x82), -SCE(0x104fb, 1, 0x42),SCE(0x1e903, 0, 0x82),SCE(0x1e925, 1, 0x42),SCE(0x0191, 0, 0x82), -SCE(0x0192, 1, 0x42),SCE(0x13de, 0, 0x82),SCE(0xabae, 1, 0x42),SCE(0x03a0, 0, 0x83), -SCE(0x03c0, 1, 0x43),SCE(0x03d6, 2, 0x43),SCE(0x13ad, 0, 0x82),SCE(0xab7d, 1, 0x42), -SCE(0x0206, 0, 0x82),SCE(0x0207, 1, 0x42),SCE(0x1f45, 0, 0x42),SCE(0x1f4d, 1, 0x82), -SCE(0x03ea, 0, 0x82),SCE(0x03eb, 1, 0x42),SCE(0x10bb, 0, 0x82),SCE(0x2d1b, 1, 0x42), -SCE(0x0474, 0, 0x82),SCE(0x0475, 1, 0x42),SCE(0xff38, 0, 0x82),SCE(0xff58, 1, 0x42), -SCE(0x04fe, 0, 0x82),SCE(0x04ff, 1, 0x42),SCE(0x2c84, 0, 0x82),SCE(0x2c85, 1, 0x42), -SCE(0x10413, 0, 0x82),SCE(0x1043b, 1, 0x42),SCE(0x2c1f, 0, 0x82),SCE(0x2c4f, 1, 0x42), -SCE(0x1e5c, 0, 0x82),SCE(0x1e5d, 1, 0x42),SCE(0x1ee4, 0, 0x82),SCE(0x1ee5, 1, 0x42), -SCE(0x2cc8, 0, 0x82),SCE(0x2cc9, 1, 0x42),SCE(0x104ce, 0, 0x82),SCE(0x104f6, 1, 0x42), -SCE(0x04ba, 0, 0x82),SCE(0x04bb, 1, 0x42),SCE(0x1e905, 0, 0x82),SCE(0x1e927, 1, 0x42), -SCE(0x00d1, 0, 0x82),SCE(0x00f1, 1, 0x42),SCE(0x0472, 0, 0x82),SCE(0x0473, 1, 0x42), -SCE(0x118b6, 0, 0x82),SCE(0x118d6, 1, 0x42),SCE(0x1f78, 0, 0x42),SCE(0x1ff8, 1, 0x82), -SCE(0x0043, 0, 0x82),SCE(0x0063, 1, 0x42),SCE(0x1ea2, 0, 0x82),SCE(0x1ea3, 1, 0x42), -SCE(0x1f24, 0, 0x42),SCE(0x1f2c, 1, 0x82),SCE(0x019d, 0, 0x82),SCE(0x0272, 1, 0x42), -SCE(0x04b6, 0, 0x82),SCE(0x04b7, 1, 0x42),SCE(0x00df, 0, 0x42),SCE(0x1e9e, 1, 0x82), -SCE(0x1f87, 0, 0x42),SCE(0x1f8f, 1, 0x2),SCE(0x1e14, 0, 0x82),SCE(0x1e15, 1, 0x42), -SCE(0x1ee6, 0, 0x82),SCE(0x1ee7, 1, 0x42),SCE(0x040b, 0, 0x82),SCE(0x045b, 1, 0x42), -SCE(0x0409, 0, 0x82),SCE(0x0459, 1, 0x42),SCE(0x1057d, 0, 0x82),SCE(0x105a4, 1, 0x42), -SCE(0x03a8, 0, 0x82),SCE(0x03c8, 1, 0x42),SCE(0x1e5a, 0, 0x82),SCE(0x1e5b, 1, 0x42), -SCE(0x1057f, 0, 0x82),SCE(0x105a6, 1, 0x42),SCE(0x0544, 0, 0x82),SCE(0x0574, 1, 0x42), -SCE(0x10fe, 0, 0x42),SCE(0x1cbe, 1, 0x82),SCE(0x1e12, 0, 0x82),SCE(0x1e13, 1, 0x42), -SCE(0x10b9, 0, 0x82),SCE(0x2d19, 1, 0x42),SCE(0x0047, 0, 0x82),SCE(0x0067, 1, 0x42), -SCE(0x04fc, 0, 0x82),SCE(0x04fd, 1, 0x42),SCE(0x10c92, 0, 0x82),SCE(0x10cd2, 1, 0x42), -SCE(0x2c86, 0, 0x82),SCE(0x2c87, 1, 0x42),SCE(0x1e1a, 0, 0x82),SCE(0x1e1b, 1, 0x42), -SCE(0x10c90, 0, 0x82),SCE(0x10cd0, 1, 0x42),SCE(0x10bf, 0, 0x82),SCE(0x2d1f, 1, 0x42), -SCE(0x13ca, 0, 0x82),SCE(0xab9a, 1, 0x42),SCE(0x16e49, 0, 0x82),SCE(0x16e69, 1, 0x42), -SCE(0x0041, 0, 0x82),SCE(0x0061, 1, 0x42),SCE(0x01bc, 0, 0x82),SCE(0x01bd, 1, 0x42), -SCE(0x1eea, 0, 0x82),SCE(0x1eeb, 1, 0x42),SCE(0x0502, 0, 0x82),SCE(0x0503, 1, 0x42), -SCE(0x0248, 0, 0x82),SCE(0x0249, 1, 0x42),SCE(0x10df, 0, 0x42),SCE(0x1c9f, 1, 0x82), -SCE(0x01c4, 0, 0x83),SCE(0x01c5, 1, 0x3),SCE(0x01c6, 2, 0x43),SCE(0x0546, 0, 0x82), -SCE(0x0576, 1, 0x42),SCE(0x13ef, 0, 0x82),SCE(0xabbf, 1, 0x42),SCE(0x2ccc, 0, 0x82), -SCE(0x2ccd, 1, 0x42),SCE(0x10d7, 0, 0x42),SCE(0x1c97, 1, 0x82),SCE(0x13a7, 0, 0x82), -SCE(0xab77, 1, 0x42),SCE(0x047a, 0, 0x82),SCE(0x047b, 1, 0x42),SCE(0x0134, 0, 0x82), -SCE(0x0135, 1, 0x42),SCE(0x042a, 0, 0x83),SCE(0x044a, 1, 0x43),SCE(0x1c86, 2, 0x43), -SCE(0x2c19, 0, 0x82),SCE(0x2c49, 1, 0x42),SCE(0x0204, 0, 0x82),SCE(0x0205, 1, 0x42), -SCE(0x025c, 0, 0x42),SCE(0xa7ab, 1, 0x82),SCE(0x24cf, 0, 0x82),SCE(0x24e9, 1, 0x42), -SCE(0x1e54, 0, 0x82),SCE(0x1e55, 1, 0x42),SCE(0x10579, 0, 0x82),SCE(0x105a0, 1, 0x42), -SCE(0x054a, 0, 0x82),SCE(0x057a, 1, 0x42),SCE(0xa684, 0, 0x82),SCE(0xa685, 1, 0x42), -SCE(0xff27, 0, 0x82),SCE(0xff47, 1, 0x42),SCE(0x1f05, 0, 0x42),SCE(0x1f0d, 1, 0x82), -SCE(0x2132, 0, 0x82),SCE(0x214e, 1, 0x42),SCE(0x024c, 0, 0x82),SCE(0x024d, 1, 0x42), -SCE(0x13b5, 0, 0x82),SCE(0xab85, 1, 0x42),SCE(0x2cc6, 0, 0x82),SCE(0x2cc7, 1, 0x42), -SCE(0x10408, 0, 0x82),SCE(0x10430, 1, 0x42),SCE(0x2c1d, 0, 0x82),SCE(0x2c4d, 1, 0x42), -SCE(0x023f, 0, 0x42),SCE(0x2c7e, 1, 0x82),SCE(0xa742, 0, 0x82),SCE(0xa743, 1, 0x42), -SCE(0x1e62, 0, 0x82),SCE(0x1e63, 1, 0x42),SCE(0x10ca8, 0, 0x82),SCE(0x10ce8, 1, 0x42), -SCE(0x00b5, 0, 0x43),SCE(0x039c, 1, 0x83),SCE(0x03bc, 2, 0x43),SCE(0x1f81, 0, 0x42), -SCE(0x1f89, 1, 0x2),SCE(0x10c9a, 0, 0x82),SCE(0x10cda, 1, 0x42),SCE(0x012e, 0, 0x82), -SCE(0x012f, 1, 0x42),SCE(0x0403, 0, 0x82),SCE(0x0453, 1, 0x42),SCE(0x01fe, 0, 0x82), -SCE(0x01ff, 1, 0x42),SCE(0x0345, 0, 0x44),SCE(0x0399, 1, 0x84),SCE(0x03b9, 2, 0x44), -SCE(0x1fbe, 3, 0x44),SCE(0x0174, 0, 0x82),SCE(0x0175, 1, 0x42),SCE(0x03cf, 0, 0x82), -SCE(0x03d7, 1, 0x42),SCE(0x24cd, 0, 0x82),SCE(0x24e7, 1, 0x42),SCE(0x1fb3, 0, 0x42), -SCE(0x1fbc, 1, 0x2),SCE(0x118ad, 0, 0x82),SCE(0x118cd, 1, 0x42),SCE(0xa744, 0, 0x82), -SCE(0xa745, 1, 0x42),SCE(0x00d9, 0, 0x82),SCE(0x00f9, 1, 0x42),SCE(0x1e0c, 0, 0x82), -SCE(0x1e0d, 1, 0x42),SCE(0x2c17, 0, 0x82),SCE(0x2c47, 1, 0x42),SCE(0x03e2, 0, 0x82), -SCE(0x03e3, 1, 0x42),SCE(0x026c, 0, 0x42),SCE(0xa7ad, 1, 0x82),SCE(0xa756, 0, 0x82), -SCE(0xa757, 1, 0x42),SCE(0x0405, 0, 0x82),SCE(0x0455, 1, 0x42),SCE(0x0197, 0, 0x82), -SCE(0x0268, 1, 0x42),SCE(0x1f60, 0, 0x42),SCE(0x1f68, 1, 0x82),SCE(0x1eec, 0, 0x82), -SCE(0x1eed, 1, 0x42),SCE(0x2c8c, 0, 0x82),SCE(0x2c8d, 1, 0x42),SCE(0x10f2, 0, 0x42), -SCE(0x1cb2, 1, 0x82),SCE(0x104b6, 0, 0x82),SCE(0x104de, 1, 0x42),SCE(0x1e91d, 0, 0x82), -SCE(0x1e93f, 1, 0x42),SCE(0x1040a, 0, 0x82),SCE(0x10432, 1, 0x42),SCE(0x13c6, 0, 0x82), -SCE(0xab96, 1, 0x42),SCE(0x16e41, 0, 0x82),SCE(0x16e61, 1, 0x42),SCE(0x0424, 0, 0x82), -SCE(0x0444, 1, 0x42),SCE(0x01a9, 0, 0x82),SCE(0x0283, 1, 0x42),SCE(0x039a, 0, 0x83), -SCE(0x03ba, 1, 0x43),SCE(0x03f0, 2, 0x43),SCE(0x10e5, 0, 0x42),SCE(0x1ca5, 1, 0x82), -SCE(0x104c8, 0, 0x82),SCE(0x104f0, 1, 0x42),SCE(0x10407, 0, 0x82),SCE(0x1042f, 1, 0x42), -SCE(0x13d0, 0, 0x82),SCE(0xaba0, 1, 0x42),SCE(0x1fa2, 0, 0x42),SCE(0x1faa, 1, 0x2), -SCE(0x046c, 0, 0x82),SCE(0x046d, 1, 0x42),SCE(0x10a0, 0, 0x82),SCE(0x2d00, 1, 0x42), -SCE(0xa782, 0, 0x82),SCE(0xa783, 1, 0x42),SCE(0x00c5, 0, 0x83),SCE(0x00e5, 1, 0x43), -SCE(0x212b, 2, 0x83),SCE(0x04b4, 0, 0x82),SCE(0x04b5, 1, 0x42),SCE(0x2cce, 0, 0x82), -SCE(0x2ccf, 1, 0x42),SCE(0xa73a, 0, 0x82),SCE(0xa73b, 1, 0x42),SCE(0xff21, 0, 0x82), -SCE(0xff41, 1, 0x42),SCE(0x104b9, 0, 0x82),SCE(0x104e1, 1, 0x42),SCE(0x1ea4, 0, 0x82), -SCE(0x1ea5, 1, 0x42),SCE(0x038f, 0, 0x82),SCE(0x03ce, 1, 0x42),SCE(0x24be, 0, 0x82), -SCE(0x24d8, 1, 0x42),SCE(0xa79e, 0, 0x82),SCE(0xa79f, 1, 0x42),SCE(0x0049, 0, 0x82), -SCE(0x0069, 1, 0x42),SCE(0x1e91f, 0, 0x82),SCE(0x1e941, 1, 0x42),SCE(0x0246, 0, 0x82), -SCE(0x0247, 1, 0x42),SCE(0x1f73, 0, 0x42),SCE(0x1fc9, 1, 0x82),SCE(0x2c67, 0, 0x82), -SCE(0x2c68, 1, 0x42),SCE(0x2166, 0, 0x82),SCE(0x2176, 1, 0x42),SCE(0x0100, 0, 0x82), -SCE(0x0101, 1, 0x42),SCE(0x03e4, 0, 0x82),SCE(0x03e5, 1, 0x42),SCE(0x13d2, 0, 0x82), -SCE(0xaba2, 1, 0x42),SCE(0x1fa0, 0, 0x42),SCE(0x1fa8, 1, 0x2),SCE(0x10cb1, 0, 0x82), -SCE(0x10cf1, 1, 0x42),SCE(0x16e5d, 0, 0x82),SCE(0x16e7d, 1, 0x42),SCE(0x10c1, 0, 0x82), -SCE(0x2d21, 1, 0x42),SCE(0xa7f5, 0, 0x82),SCE(0xa7f6, 1, 0x42),SCE(0x13be, 0, 0x82), -SCE(0xab8e, 1, 0x42),SCE(0x042c, 0, 0x82),SCE(0x044c, 1, 0x42),SCE(0x10dd, 0, 0x42), -SCE(0x1c9d, 1, 0x82),SCE(0x1f93, 0, 0x42),SCE(0x1f9b, 1, 0x2),SCE(0x024e, 0, 0x82), -SCE(0x024f, 1, 0x42),SCE(0x04bc, 0, 0x82),SCE(0x04bd, 1, 0x42),SCE(0x0176, 0, 0x82), -SCE(0x0177, 1, 0x42),SCE(0x13ab, 0, 0x82),SCE(0xab7b, 1, 0x42),SCE(0x13e1, 0, 0x82), -SCE(0xabb1, 1, 0x42),SCE(0x0504, 0, 0x82),SCE(0x0505, 1, 0x42),SCE(0x1f03, 0, 0x42), -SCE(0x1f0b, 1, 0x82),SCE(0xa686, 0, 0x82),SCE(0xa687, 1, 0x42),SCE(0x054c, 0, 0x82), -SCE(0x057c, 1, 0x42),SCE(0x16e4f, 0, 0x82),SCE(0x16e6f, 1, 0x42),SCE(0x10eb, 0, 0x42), -SCE(0x1cab, 1, 0x82),SCE(0x13d9, 0, 0x82),SCE(0xaba9, 1, 0x42),SCE(0x023a, 0, 0x82), -SCE(0x2c65, 1, 0x42),SCE(0x04a8, 0, 0x82),SCE(0x04a9, 1, 0x42),SCE(0x2cda, 0, 0x82), -SCE(0x2cdb, 1, 0x42),SCE(0x041e, 0, 0x83),SCE(0x043e, 1, 0x43),SCE(0x1c82, 2, 0x43), -SCE(0x0394, 0, 0x82),SCE(0x03b4, 1, 0x42),SCE(0x2c72, 0, 0x82),SCE(0x2c73, 1, 0x42), -SCE(0x0510, 0, 0x82),SCE(0x0511, 1, 0x42),SCE(0x1e26, 0, 0x82),SCE(0x1e27, 1, 0x42), -SCE(0xa642, 0, 0x82),SCE(0xa643, 1, 0x42),SCE(0x04c9, 0, 0x82),SCE(0x04ca, 1, 0x42), -SCE(0x0147, 0, 0x82),SCE(0x0148, 1, 0x42),SCE(0x1eb0, 0, 0x82),SCE(0x1eb1, 1, 0x42), -SCE(0xa75e, 0, 0x82),SCE(0xa75f, 1, 0x42),SCE(0x1058c, 0, 0x82),SCE(0x105b3, 1, 0x42), -SCE(0xa73c, 0, 0x82),SCE(0xa73d, 1, 0x42),SCE(0x104d1, 0, 0x82),SCE(0x104f9, 1, 0x42), -SCE(0x104d2, 0, 0x82),SCE(0x104fa, 1, 0x42),SCE(0x10590, 0, 0x82),SCE(0x105b7, 1, 0x42), -SCE(0x0055, 0, 0x82),SCE(0x0075, 1, 0x42),SCE(0x1f11, 0, 0x42),SCE(0x1f19, 1, 0x82), -SCE(0x037b, 0, 0x42),SCE(0x03fd, 1, 0x82),SCE(0x1f31, 0, 0x42),SCE(0x1f39, 1, 0x82), -SCE(0x2cba, 0, 0x82),SCE(0x2cbb, 1, 0x42),SCE(0x0552, 0, 0x82),SCE(0x0582, 1, 0x42), -SCE(0xa68c, 0, 0x82),SCE(0xa68d, 1, 0x42),SCE(0x1e6e, 0, 0x82),SCE(0x1e6f, 1, 0x42), -SCE(0x2167, 0, 0x82),SCE(0x2177, 1, 0x42),SCE(0x00de, 0, 0x82),SCE(0x00fe, 1, 0x42), -SCE(0x0190, 0, 0x82),SCE(0x025b, 1, 0x42),SCE(0x1ef8, 0, 0x82),SCE(0x1ef9, 1, 0x42), -SCE(0x104b0, 0, 0x82),SCE(0x104d8, 1, 0x42),SCE(0x10c8e, 0, 0x82),SCE(0x10cce, 1, 0x42), -SCE(0x2c08, 0, 0x82),SCE(0x2c38, 1, 0x42),SCE(0x016e, 0, 0x82),SCE(0x016f, 1, 0x42), -SCE(0x16e5c, 0, 0x82),SCE(0x16e7c, 1, 0x42),SCE(0x10cd, 0, 0x82),SCE(0x2d2d, 1, 0x42), -SCE(0x1f7b, 0, 0x42),SCE(0x1feb, 1, 0x82),SCE(0x1e90, 0, 0x82),SCE(0x1e91, 1, 0x42), -SCE(0x13b3, 0, 0x82),SCE(0xab83, 1, 0x42),SCE(0x01d1, 0, 0x82),SCE(0x01d2, 1, 0x42), -SCE(0x1f53, 0, 0x42),SCE(0x1f5b, 1, 0x82),SCE(0x0126, 0, 0x82),SCE(0x0127, 1, 0x42), -SCE(0x1e48, 0, 0x82),SCE(0x1e49, 1, 0x42),SCE(0x2c98, 0, 0x82),SCE(0x2c99, 1, 0x42), -SCE(0x10400, 0, 0x82),SCE(0x10428, 1, 0x42),SCE(0x10ca4, 0, 0x82),SCE(0x10ce4, 1, 0x42), -SCE(0x118b9, 0, 0x82),SCE(0x118d9, 1, 0x42),SCE(0x13b0, 0, 0x82),SCE(0xab80, 1, 0x42), -SCE(0x1ed8, 0, 0x82),SCE(0x1ed9, 1, 0x42),SCE(0x1f74, 0, 0x42),SCE(0x1fca, 1, 0x82), -SCE(0x0422, 0, 0x84),SCE(0x0442, 1, 0x44),SCE(0x1c84, 2, 0x44),SCE(0x1c85, 3, 0x44), -SCE(0x1ef2, 0, 0x82),SCE(0x1ef3, 1, 0x42),SCE(0x2161, 0, 0x82),SCE(0x2171, 1, 0x42), -SCE(0x10420, 0, 0x82),SCE(0x10448, 1, 0x42),SCE(0x01f1, 0, 0x83),SCE(0x01f2, 1, 0x3), -SCE(0x01f3, 2, 0x43),SCE(0x01d7, 0, 0x82),SCE(0x01d8, 1, 0x42),SCE(0xa68a, 0, 0x82), -SCE(0xa68b, 1, 0x42),SCE(0x03f7, 0, 0x82),SCE(0x03f8, 1, 0x42),SCE(0xff35, 0, 0x82), -SCE(0xff55, 1, 0x42),SCE(0x03dc, 0, 0x82),SCE(0x03dd, 1, 0x42),SCE(0x10c8d, 0, 0x82), -SCE(0x10ccd, 1, 0x42),SCE(0x0418, 0, 0x82),SCE(0x0438, 1, 0x42),SCE(0x0212, 0, 0x82), -SCE(0x0213, 1, 0x42),SCE(0x04f0, 0, 0x82),SCE(0x04f1, 1, 0x42),SCE(0x24c1, 0, 0x82), -SCE(0x24db, 1, 0x42),SCE(0x050a, 0, 0x82),SCE(0x050b, 1, 0x42),SCE(0x1e917, 0, 0x82), -SCE(0x1e939, 1, 0x42),SCE(0xa644, 0, 0x82),SCE(0xa645, 1, 0x42),SCE(0x0537, 0, 0x82), -SCE(0x0567, 1, 0x42),SCE(0x10ac, 0, 0x82),SCE(0x2d0c, 1, 0x42),SCE(0x10ad, 0, 0x82), -SCE(0x2d0d, 1, 0x42),SCE(0x24c7, 0, 0x82),SCE(0x24e1, 1, 0x42),SCE(0x0460, 0, 0x82), -SCE(0x0461, 1, 0x42),SCE(0x2c2b, 0, 0x82),SCE(0x2c5b, 1, 0x42),SCE(0x16e56, 0, 0x82), -SCE(0x16e76, 1, 0x42),SCE(0x10c7, 0, 0x82),SCE(0x2d27, 1, 0x42),SCE(0x10406, 0, 0x82), -SCE(0x1042e, 1, 0x42),SCE(0x2cd4, 0, 0x82),SCE(0x2cd5, 1, 0x42),SCE(0x10f1, 0, 0x42), -SCE(0x1cb1, 1, 0x82),SCE(0x1f7a, 0, 0x42),SCE(0x1fea, 1, 0x82),SCE(0x2c0b, 0, 0x82), -SCE(0x2c3b, 1, 0x42),SCE(0xff34, 0, 0x82),SCE(0xff54, 1, 0x42),SCE(0x0417, 0, 0x82), -SCE(0x0437, 1, 0x42),SCE(0x118ba, 0, 0x82),SCE(0x118da, 1, 0x42),SCE(0x01f1, 0, 0x83), -SCE(0x01f2, 1, 0x3),SCE(0x01f3, 2, 0x43),SCE(0x0395, 0, 0x83),SCE(0x03b5, 1, 0x43), -SCE(0x03f5, 2, 0x43),SCE(0x01b7, 0, 0x82),SCE(0x0292, 1, 0x42),SCE(0x018f, 0, 0x82), -SCE(0x0259, 1, 0x42),SCE(0x0538, 0, 0x82),SCE(0x0568, 1, 0x42),SCE(0xa66a, 0, 0x82), -SCE(0xa66b, 1, 0x42),SCE(0x1f32, 0, 0x42),SCE(0x1f3a, 1, 0x82),SCE(0x10421, 0, 0x82), -SCE(0x10449, 1, 0x42),SCE(0x052a, 0, 0x82),SCE(0x052b, 1, 0x42),SCE(0x0425, 0, 0x82), -SCE(0x0445, 1, 0x42),SCE(0xa784, 0, 0x82),SCE(0xa785, 1, 0x42),SCE(0x004f, 0, 0x82), -SCE(0x006f, 1, 0x42),SCE(0xa664, 0, 0x82),SCE(0xa665, 1, 0x42),SCE(0x104b1, 0, 0x82), -SCE(0x104d9, 1, 0x42),SCE(0x00c4, 0, 0x82),SCE(0x00e4, 1, 0x42),SCE(0x10ca5, 0, 0x82), -SCE(0x10ce5, 1, 0x42),SCE(0x1eaa, 0, 0x82),SCE(0x1eab, 1, 0x42),SCE(0x13d8, 0, 0x82), -SCE(0xaba8, 1, 0x42),SCE(0x10e4, 0, 0x42),SCE(0x1ca4, 1, 0x82),SCE(0x00d8, 0, 0x82), -SCE(0x00f8, 1, 0x42),SCE(0x01ca, 0, 0x83),SCE(0x01cb, 1, 0x3),SCE(0x01cc, 2, 0x43), -SCE(0x10d1, 0, 0x42),SCE(0x1c91, 1, 0x82),SCE(0x10575, 0, 0x82),SCE(0x1059c, 1, 0x42), -SCE(0x216c, 0, 0x82),SCE(0x217c, 1, 0x42),SCE(0x2c02, 0, 0x82),SCE(0x2c32, 1, 0x42), -SCE(0x16e5b, 0, 0x82),SCE(0x16e7b, 1, 0x42),SCE(0xa7d8, 0, 0x82),SCE(0xa7d9, 1, 0x42), -SCE(0xff22, 0, 0x82),SCE(0xff42, 1, 0x42),SCE(0x0404, 0, 0x82),SCE(0x0454, 1, 0x42), -SCE(0x10b3, 0, 0x82),SCE(0x2d13, 1, 0x42),SCE(0x1eca, 0, 0x82),SCE(0x1ecb, 1, 0x42), -SCE(0x10409, 0, 0x82),SCE(0x10431, 1, 0x42),SCE(0x1e918, 0, 0x82),SCE(0x1e93a, 1, 0x42), -SCE(0x04f6, 0, 0x82),SCE(0x04f7, 1, 0x42),SCE(0x2cc0, 0, 0x82),SCE(0x2cc1, 1, 0x42), -SCE(0x1e20, 0, 0x82),SCE(0x1e21, 1, 0x42),SCE(0x104b7, 0, 0x82),SCE(0x104df, 1, 0x42), -SCE(0x039b, 0, 0x82),SCE(0x03bb, 1, 0x42),SCE(0x0196, 0, 0x82),SCE(0x0269, 1, 0x42), -SCE(0x2c25, 0, 0x82),SCE(0x2c55, 1, 0x42),SCE(0xa790, 0, 0x82),SCE(0xa791, 1, 0x42), -SCE(0xa764, 0, 0x82),SCE(0xa765, 1, 0x42),SCE(0x020c, 0, 0x82),SCE(0x020d, 1, 0x42), -SCE(0x1f94, 0, 0x42),SCE(0x1f9c, 1, 0x2),SCE(0x118b0, 0, 0x82),SCE(0x118d0, 1, 0x42), -SCE(0x0182, 0, 0x82),SCE(0x0183, 1, 0x42),SCE(0x2cac, 0, 0x82),SCE(0x2cad, 1, 0x42), -SCE(0x1f80, 0, 0x42),SCE(0x1f88, 1, 0x2),SCE(0x24cc, 0, 0x82),SCE(0x24e6, 1, 0x42), -SCE(0x0251, 0, 0x42),SCE(0x2c6d, 1, 0x82),SCE(0x0480, 0, 0x82),SCE(0x0481, 1, 0x42), -SCE(0x13e6, 0, 0x82),SCE(0xabb6, 1, 0x42),SCE(0x24b8, 0, 0x82),SCE(0x24d2, 1, 0x42), -SCE(0x054b, 0, 0x82),SCE(0x057b, 1, 0x42),SCE(0x13aa, 0, 0x82),SCE(0xab7a, 1, 0x42), -SCE(0x004b, 0, 0x83),SCE(0x006b, 1, 0x43),SCE(0x212a, 2, 0x83),SCE(0x0261, 0, 0x42), -SCE(0xa7ac, 1, 0x82),SCE(0x0141, 0, 0x82),SCE(0x0142, 1, 0x42),SCE(0x039a, 0, 0x83), -SCE(0x03ba, 1, 0x43),SCE(0x03f0, 2, 0x43),SCE(0x10f8, 0, 0x42),SCE(0x1cb8, 1, 0x82), -SCE(0x104c4, 0, 0x82),SCE(0x104ec, 1, 0x42),SCE(0x0189, 0, 0x82),SCE(0x0256, 1, 0x42), -SCE(0x10de, 0, 0x42),SCE(0x1c9e, 1, 0x82),SCE(0x1e68, 0, 0x82),SCE(0x1e69, 1, 0x42), -SCE(0x104ba, 0, 0x82),SCE(0x104e2, 1, 0x42),SCE(0x1f04, 0, 0x42),SCE(0x1f0c, 1, 0x82), -SCE(0x10578, 0, 0x82),SCE(0x1059f, 1, 0x42),SCE(0x0411, 0, 0x82),SCE(0x0431, 1, 0x42), -SCE(0x10582, 0, 0x82),SCE(0x105a9, 1, 0x42),SCE(0x0466, 0, 0x82),SCE(0x0467, 1, 0x42), -SCE(0xa736, 0, 0x82),SCE(0xa737, 1, 0x42),SCE(0x00cb, 0, 0x82),SCE(0x00eb, 1, 0x42), -SCE(0x10c0, 0, 0x82),SCE(0x2d20, 1, 0x42),SCE(0x10427, 0, 0x82),SCE(0x1044f, 1, 0x42), -SCE(0x01de, 0, 0x82),SCE(0x01df, 1, 0x42),SCE(0x2c92, 0, 0x82),SCE(0x2c93, 1, 0x42), -SCE(0x0106, 0, 0x82),SCE(0x0107, 1, 0x42),SCE(0x1e4e, 0, 0x82),SCE(0x1e4f, 1, 0x42), -SCE(0x042b, 0, 0x82),SCE(0x044b, 1, 0x42),SCE(0xa748, 0, 0x82),SCE(0xa749, 1, 0x42), -SCE(0x2c11, 0, 0x82),SCE(0x2c41, 1, 0x42),SCE(0xa7b3, 0, 0x82),SCE(0xab53, 1, 0x42), -SCE(0x053e, 0, 0x82),SCE(0x056e, 1, 0x42),SCE(0x014e, 0, 0x82),SCE(0x014f, 1, 0x42), -SCE(0x13d3, 0, 0x82),SCE(0xaba3, 1, 0x42),SCE(0x0524, 0, 0x82),SCE(0x0525, 1, 0x42), -SCE(0xa65e, 0, 0x82),SCE(0xa65f, 1, 0x42),SCE(0x01f8, 0, 0x82),SCE(0x01f9, 1, 0x42), -SCE(0x04ae, 0, 0x82),SCE(0x04af, 1, 0x42),SCE(0xa77e, 0, 0x82),SCE(0xa77f, 1, 0x42), -SCE(0x03a0, 0, 0x83),SCE(0x03c0, 1, 0x43),SCE(0x03d6, 2, 0x43),SCE(0x0265, 0, 0x42), -SCE(0xa78d, 1, 0x82),SCE(0xff2b, 0, 0x82),SCE(0xff4b, 1, 0x42),SCE(0x1fa1, 0, 0x42), -SCE(0x1fa9, 1, 0x2),SCE(0x1ede, 0, 0x82),SCE(0x1edf, 1, 0x42),SCE(0x13b9, 0, 0x82), -SCE(0xab89, 1, 0x42),SCE(0x0168, 0, 0x82),SCE(0x0169, 1, 0x42),SCE(0x0226, 0, 0x82), -SCE(0x0227, 1, 0x42),SCE(0x13f1, 0, 0x82),SCE(0x13f9, 1, 0x42),SCE(0x1e06, 0, 0x82), -SCE(0x1e07, 1, 0x42),SCE(0x0120, 0, 0x82),SCE(0x0121, 1, 0x42),SCE(0x1041d, 0, 0x82), -SCE(0x10445, 1, 0x42),SCE(0x1f66, 0, 0x42),SCE(0x1f6e, 1, 0x82),SCE(0x10a6, 0, 0x82), -SCE(0x2d06, 1, 0x42),SCE(0x10c91, 0, 0x82),SCE(0x10cd1, 1, 0x42),SCE(0x1d8e, 0, 0x42), -SCE(0xa7c6, 1, 0x82),SCE(0x10c84, 0, 0x82),SCE(0x10cc4, 1, 0x42),SCE(0x10cae, 0, 0x82), -SCE(0x10cee, 1, 0x42),SCE(0x118a3, 0, 0x82),SCE(0x118c3, 1, 0x42),SCE(0x0048, 0, 0x82), -SCE(0x0068, 1, 0x42),SCE(0x13cc, 0, 0x82),SCE(0xab9c, 1, 0x42),SCE(0x1e91e, 0, 0x82), -SCE(0x1e940, 1, 0x42),SCE(0x038e, 0, 0x82),SCE(0x03cd, 1, 0x42),SCE(0x0531, 0, 0x82), -SCE(0x0561, 1, 0x42),]; -return t; +static immutable uint[] t = x" +0201E90B0211E92D0201E9110211E93302000496021004970200A7220210A72302001F7902101FF902001F4402101F4C +0200015A0210015B020010FD02101CBD02010D6102110D8102001E3802101E390201E9210211E94302016E4C02116E6C +02001F2302101F2B020001A0021001A1030003A3031003C2032003C3020004DC021004DD02002CA602102CA70200017B +0210017C0201E9060211E928020010DC02101C9C020104CD021104F502001F6502101F6D0200051E0210051F020010D8 +02101C9802002C1A02102C4A0200027D02102C640200A69A0210A69B02001F0202101F0A020005220210052302002C60 +02102C6102002C1E02102C4E0200A6500210A6510200A65C0210A65D020013C90210AB99020104140211043C020013CD +0210AB9D020000CE021000EE02001E7E02101E7F020013F0021013F802001EC402101EC50200A78B0210A78C02000114 +021001150200042F0210044F0201E9020211E924020004D8021004D902002CAA02102CAB020001100210011102000492 +0210049302001E3402101E35020013F4021013FC020002240210022502002CA202102CA30200A72E0210A72F02016E48 +02116E680200004A0210006A020013A60210AB760200015E0210015F030001C4031001C5032001C602001F4002101F48 +0200A6580210A6590200022C0210022D02010C9F02110CDF02001FA702101FAF020013AE0210AB7E0200004202100062 +020013D50210ABA502016E4002116E60020000D2021000F202001E8202101E8302010C9702110CD7020010E002101CA0 +0200013D0210013E02000406021004560200029D0210A7B2020001390210013A020001980210019902001EBC02101EBD +020003AB021003CB0200040E0210045E0200A7B60210A7B70200040A0210045A02001EC002101EC10201057202110599 +020024B9021024D302002C1602102C460200019C0210026F020003A7021003C70200A6920210A693030000C5031000E5 +0320212B0200052602100527020002660210A7AA0201057A021105A10201057E021105A502001FD002101FD802000046 +021000660201E90A0211E92C0200022802100229020013A20210AB720200A7260210A72702010C9302110CD30200049A +0210049B020000D6021000F60200010C0210010D020118A8021118C802000162021001630200019E0210022002002C9E +02102C9F03000392031003B2032003D002001E3002101E3102001FA302101FAB0200216D0210217D0200004E0210006E +030000B50310039C032003BC0200048E0210048F0200A72A0210A72B02010410021104380200038A021003AF02001EFE +02101EFF020118AC021118CC020001EA021001EB02001F0602101F0E02001FC302101FCC020010B402102D140200026A +0210A7AE030004120310043203201C800200A7600210A76102010C9B02110CDB020024C8021024E2020001A4021001A5 +0200039F021003BF020010C402102D24020004A2021004A302002C0302102C3302002CE002102CE1020105760211059D +020004E0021004E102002C2A02102C5A02001ED002101ED1020000C2021000E2020004E8021004E90200A7A60210A7A7 +020010F902101CB902000145021001460200037C021003FE02001EC802101EC90200041A0210043A020000CA021000EA +02001F8602101F8E030004210310044103201C83020104040211042C02010583021105AA0200053F0210056F02000547 +02100577020013B60210AB86020013EC0210ABBC0200FF2C0210FF4C0200A7BA0210A7BB0200A6480210A649020013C5 +0210AB950200FF240210FF440201040F021104370201041C0211044402010C8302110CC3020002410210024202001E76 +02101E77020010BC02102D1C02002C2202102C52020010D002101C900200A7680210A7690200A7320210A7330200011C +0210011D020004270210044702001E4002101E41020118B1021118D10200015202100153030003A1031003C1032003F1 +02000397021003B7020001AC021001AD020001E2021001E302000218021002190201E91A0211E93C0200051602100517 +02001F2702101F2F0200A7C90210A7CA02001FE002101FE802002165021021750200A66C0210A66D02000393021003B3 +0200053202100562020000560210007602001F3302101F3B020005540210058403001C880310A64A0320A64B0200A68E +0210A68F020003D8021003D9020024C5021024DF02002CB202102CB302010C8202110CC2020000570210007702010D50 +02110D700200FF370210FF5702001EF602101EF70201E9120211E93402001F1202101F1A02016E5302116E73020004A6 +021004A70200016A0210016B02001F3402101F3C02002CDC02102CDD020001B10210028A020118A4021118C402001E28 +02101E29020001BF021001F70200018B0210018C020010A702102D0702010D6502110D85020001280210012902001E6A +02101E6B020010AB02102D0B0200041F0210043F02002C2E02102C5E02010CAF02110CEF020104C5021104ED02010D51 +02110D7102001FE102101FE9030003A6031003C6032003D502002C0A02102C3A0200050E0210050F02010D5D02110D7D +0200010402100105020003720210037302001E8E02101E8F02000396021003B602001EFA02101EFB020003F2021003F9 +0200A6400210A641020118A5021118C5020010EC02101CAC020118A1021118C1020001660210016702001F3702101F3F +02010C8602110CC6020013DD0210ABAD02001F5102101F5902002C9A02102C9B020001FA021001FB0200216902102179 +02010D5402110D74020010A402102D0403000053031000730320017F0200037602100377020013B10210AB8102000468 +02100469020013E40210ABB402001F9602101F9E020001080210010902010CA002110CE002001E6602101E6702001E8A +02101E8B02001E4C02101E4D02001F7502101FCB02002C0E02102C3E02001E5002101E51020024C0021024DA0200A750 +0210A751020000DA021000FA020010E902101CA902002CD802102CD902001EB802101EB90200012C0210012D02000252 +02102C70020004C3021004C4020024C4021024DE020104B5021104DD02002C0F02102C3F020005330210056302000195 +021001F602001F1302101F1B020104B8021104E00200055302100583020104250211044D020013D10210ABA1020004F4 +021004F5020004C7021004C802010CAC02110CEC020004D0021004D10200A75C0210A75D02001E2C02101E2D020010A8 +02102D0802000464021004650200042602100446020004E4021004E5020010ED02101CAD0200A7920210A79302001EDC +02101EDD020104BC021104E4020105770211059E02001EA802101EA9020001B8021001B9020000C6021000E60200FF30 +0210FF5002016E4402116E640201041B0211044302001E0E02101E0F020004D4021004D502002CAE02102CAF02002C6B +02102C6C0200FF230210FF430200018402100185020105730211059A04000398041003B8042003D1043003F4020013D4 +0210ABA40201E9190211E93B020001870210018802002C1302102C430200A7A20210A7A3020001940210026302000416 +0210043602002CBE02102CBF02001FA602101FAE020104C6021104EE02001F8202101F8A020104C9021104F1020013E0 +0210ABB00200024002102C7F0200A7BE0210A7BF02001F9202101F9A0200040202100452020005360210056602000550 +021005800200A6820210A68302000386021003AC02001FE502101FEC020024C9021024E3020000D3021000F3020010F0 +02101CB002001E3C02101E3D02002C8002102C810201058A021105B1020001560210015702001E7A02101E7B020013ED +0210ABBD0200A73E0210A73F0200011802100119020002140210021503001E6003101E6103201E9B02002C8A02102C8B +0200A64C0210A64D03000395031003B5032003F5020001E6021001E702001F8502101F8D020005120210051302001F61 +02101F690200A6680210A66902010594021105BB02001E1802101E19020013B20210AB82020104150211043D02010418 +02110440020002450210028C02001F7202101FC8020118B5021118D5020010B802102D18020004C0021004CF0201040B +021104330200042302100443020010C502102D2502002C2D02102C5D02001F3002101F38020013C10210AB910200A76C +0210A76D020104CC021104F402001F7102101FBB0200FF330210FF530200216A0210217A02001ECC02101ECD020003E8 +021003E90200A7D00210A7D10200005A0210007A02010CB002110CF0020001D9021001DA02010587021105AE020001B5 +021001B6020005430210057302001F2202101F2A02001EA002101EA102010C8F02110CCF02016E5402116E7402016E57 +02116E7702001D7D02102C630200A7D60210A7D70200A74C0210A74D020013CE0210AB9E020000CF021000EF020010D9 +02101C99020000450210006502000136021001370200040D0210045D02016E4302116E6302001F7C02101FFA0200024A +0210024B020004B8021004B902002CCA02102CCB02002CED02102CEE0200019F02100275020003A4021003C40200A74E +0210A74F020104C0021104E802001E1602101E17020013AF0210AB7F020005000210050102002C8202102C83020010BD +02102D1D0201E9160211E93802010CA302110CE302010C9402110CD4020104C2021104EA030003A6031003C6032003D5 +02016E4D02116E6D020118B4021118D4020013E90210ABB902001F4102101F49020002870210A7B10200054202100572 +02001E5802101E5902001F4302101F4B02002CEB02102CEC020013EB0210ABBB02001FD102101FD902001EE802101EE9 +020013A30210AB73020003EE021003EF020118B8021118D802010C9E02110CDE0201E9200211E942020000FF02100178 +020104170211043F020118A9021118C902001FB002101FB802002C8802102C89020013A90210AB790201E9090211E92B +020013C20210AB92020024B6021024D002001E5E02101E5F02002C6902102C6A0201041F021104470200037F021003F3 +02000540021005700200039002101FD30300004B0310006B0320212A020004F8021004F9020013F3021013FB020000C9 +021000E90200040F0210045F020010B502102D150200A7460210A747020000CD021000ED02000476021004770200039E +021003BE02001F2002101F28020010FA02101CBA02002C2102102C5102001EA602101EA702001F8302101F8B0200053C +0210056C02001F0102101F0902002CC202102CC30200020802100209020013E30210ABB30200A7960210A79702001F64 +02101F6C02010592021105B9020004BE021004BF02001F9102101F99020003E6021003E702001EE002101EE102001FF3 +02101FFC02000413021004330200042E0210044E020104CA021104F202002C0002102C30020010DB02101C9B020010F6 +02101CB6020118BE021118DE020001A7021001A8020010C302102D23020004150210043502001E1E02101E1F02000506 +0210050702001E6402101E65020000C7021000E70200047C0210047D02001E5202101E53020010F402101CB402010586 +021105AD0200046A0210046B02002C2702102C5702010C8902110CC9020010A202102D020200FF320210FF5204000398 +041003B8042003D1043003F4030003A9031003C90320212602001EDA02101EDB0201E9010211E9230200A79C0210A79D +020010D302101C93020024BC021024D60200FF2F0210FF4F0200025002102C6F02002C2902102C59020004B2021004B3 +0201041902110441020002100210021102002C1502102C4502016E4702116E670200A7540210A75502016E4502116E65 +030001C7031001C8032001C90200047E0210047F020001FC021001FD0200020E0210020F020002440210028902001F77 +02101FDB02002CD602102CD702010589021105B0040004220410044204201C8404301C85020010E702101CA7020004FA +021004FB020010D502101C9502001EAC02101EAD020010B702102D17020013A10210AB710200A7C20210A7C30201E907 +0211E929020013F5021013FD0200019B0210A7DC02001EE202101EE302001F6202101F6A02001E9202101E93020001D5 +021001D602002C0602102C3602010C8B02110CCB02001F7002101FBA020003EC021003ED0201E9150211E9370200216E +0210217E020013C00210AB9002001EF402101EF50200FF3A0210FF5A020118BC021118DC020004AA021004AB02002163 +0210217302001E1C02101E1D020013C80210AB98020118AF021118CF02010C9802110CD8020105710211059802010CA7 +02110CE70200005102100071020004F2021004F302010CAA02110CEA020010AF02102D0F02002C8E02102C8F02002CC4 +02102CC502001E0A02101E0B02010D6002110D8002016E5002116E700201058E021105B5020104110211043902010423 +0211044B0200053A0210056A02001E6C02101E6D020104BE021104E6020104240211044C020010A902102D09020024C2 +021024DC02010C8102110CC1020013BC0210AB8C030004620310046303201C87020118A6021118C602001E4A02101E4B +020021620210217202001ED402101ED5020010AA02102D0A020004EC021004ED02002C0C02102C3C0200A79A0210A79B +020004CB021004CC020104BD021104E502000370021003710201E9140211E936020003DA021003DB02001F3502101F3D +02010D5202110D7203000392031003B2032003D002002C9602102C9702016E5102116E7102000391021003B102000534 +021005640200041B0210043B020013DF0210ABAF02002C2C02102C5C020001240210012502010CA202110CE202001E8C +02101E8D02001EB402101EB50200016C0210016D02001E0202101E030200019A0210023D020001020210010302001F14 +02101F1C0200FF280210FF4802010C8002110CC0020010EE02101CAE02001F5502101F5D0200A77B0210A77C02000059 +021000790200014A0210014B02001E2402101E25020013BD0210AB8D02002CBC02102CBD0201040D0211043502010D5C +02110D7C0201058F021105B6020118A7021118C70200A6600210A66102000514021005150200052E0210052F020004A4 +021004A5020004000210045002016E5802116E780200A64E0210A64F0200FF2E0210FF4E02010D5B02110D7B0201040C +02110434020000DB021000FB020001CD021001CE020010E802101CA80200054F0210057F0200A7380210A73902016E5F +02116E7F02001D790210A77D0201E90F0211E93102002C0702102C37020010A302102D030200A7A00210A7A103000421 +0310044103201C830200A6800210A681020002820210A7C5020024CB021024E502000401021004510200A7580210A759 +0200005802100078020001930210026002010CA102110CE10200054E0210057E0200018602100254020013DC0210ABAC +020024BD021024D7020001B3021001B40200A6960210A697020002160210021702001ECE02101ECF0200216802102178 +0201E90E0211E93002002C1202102C4202002C2F02102C5F02010CAB02110CEB02001E8602101E870300041203100432 +03201C80020013D60210ABA602001EBA02101EBB0201E91B0211E93D0201041A0211044202001EEE02101EEF0200FF31 +0210FF510200A7BC0210A7BD020001DB021001DC020001A60210028002001F0702101F0F020118BD021118DD020000C8 +021000E8020004D2021004D3020010E102101CA1020013B70210AB8702010585021105AC02016E4B02116E6B02000172 +021001730200049E0210049F020004E6021004E7020010B002102D1002002C9C02102C9D020001EE021001EF020104B4 +021104DC02010C8702110CC7020013BA0210AB8A02001E1002101E110200023002100231020004280210044802002CD0 +02102CD1020118A0021118C0020003E0021003E102010588021105AF0200A7800210A781020010F502101CB50200053B +0210056B020000D5021000F5030004140310043403201C8102001FA402101FAC0200012A0210012B0200005202100072 +020024B7021024D10201E9080211E92A04000398041003B8042003D1043003F402000202021002030200027102102C6E +020004700210047102002C1B02102C4B0200048A0210048B0200A7520210A7530200FF250210FF450200040702100457 +020000C1021000E102001E4402101E4502001F9702101F9F02000548021005780200021C0210021D020013E50210ABB5 +0200051A0210051B02002CB602102CB70200A6540210A655020104030211042B02001E7202101E73020010D402101C94 +020104C1021104E902010C8A02110CCA02001E2A02101E2B030004620310046303201C8702001F7602101FDA03000053 +031000730320017F02002C2602102C56020013A00210AB70020004C5021004C6020003FA021003FB0200055502100585 +020013E80210ABB8030001C7031001C8032001C902001F4202101F4A02001F6702101F6F0201057C021105A30200A7B4 +0210A7B50200A6980210A6990201E9040211E9260200040C0210045C020010DA02101C9A020000D0021000F002016E46 +02116E6602001EC202101EC3020001E4021001E502000044021000640200017D0210017E02001F2102101F290200FF39 +0210FF59020013AC0210AB7C02001F0002101F08020003A5021003C50200015802100159020104CF021104F702001E3A +02101E3B0200A72C0210A72D02010D6302110D83020001120210011302001E3602101E3702016E4E02116E6E02001F7D +02101FFB020004940210049502001E8002101E8102000116021001170200042D0210044D020013F2021013FA02000179 +0210017A020004DA021004DB02002CA802102CA9020000CC021000EC020001A2021001A3030003A1031003C1032003F1 +02001E7C02101E7D020118B7021118D7020013CF0210AB9F020104120211043A020005200210052102002C1C02102C4C +0200026B02102C6202010591021105B80200015C0210015D0200A6520210A6530200FF260210FF46020001E8021001E9 +020010B602102D160200A6560210A6570200051C0210051D020013C30210AB93020104CB021104F302001EC602101EC7 +020001E0021001E102001F6302101F6B02002C0102102C310201E9000211E92202001E7802101E79020024CE021024E8 +0200A76A0210A76B0200011A0210011B020004290210044902001F8402101F8C020010D602101C9602001FB102101FB9 +0200A7620210A76302010CB202110CF202002C2002102C50020010BE02102D1E0201041E02110446020004E2021004E3 +020004DE021004DF020013EA0210ABBA0200054102100571020005450210057502001F2502101F2D0200015402100155 +02002C2402102C54020002640210A7CB0200018102100253030003A3031003C2032003C3020118B3021118D3020010BA +02102D1A020001800210024302001E3E02101E3F020010FF02101CBF02010C8802110CC8020010D202101C920200A76E +0210A76F03001C880310A64A0320A64B020010B202102D12020013C70210AB9702000518021005190200A7660210A767 +020001EC021001ED020104C3021104EB020105740211059B020013EE0210ABBE0201E91C0211E93E020010E202101CA2 +02002C0502102C35020004A0021004A102001E4202101E43020013B40210AB84020118BF021118DF0200015002100151 +02002CB002102CB1020013A40210AB74020004C1021004C2030001CA031001CB032001CC0200004C0210006C020104C7 +021104EF02016E5A02116E7A0200022202100223020004900210049102002CF202102CF302010595021105BC0200053D +0210056D02000388021003AD0200054902100579020013E20210ABB202016E4A02116E6A02001EFC02101EFD02001F90 +02101F98020004D6021004D70200A7B80210A7B9030004140310043403201C8102010CAD02110CED020010F702101CB7 +02016E5502116E750200A7280210A72902001E0002101E010200023202100233020010A502102D0502001F1502101F1D +030003A9031003C9032021260200013B0210013C0200040802100458020000DC021000FC02001EBE02101EBF02002C18 +02102C480200A7A80210A7A90200216B0210217B02002C1002102C4002002CDE02102CDF0200029E0210A7B0020000D4 +021000F4020010EF02101CAF0200055102100581020013DA0210ABAA020005350210056502010C9D02110CDD020024C6 +021024E0020004100210043002001EB602101EB7020104160211043E02016E4202116E6202010D5E02110D7E02000164 +0210016502002CA002102CA102001E2E02101E2F02010C9502110CD502000498021004990200010A0210010B020118AA +021118CA02010D5302110D7302001E8802101E890200052802100529020013D70210ABA70200A65A0210A65B0200022A +0210022B02001FA502101FAD020104B3021104DB0201E90C0211E92E020024BB021024D5020001F4021001F50200A690 +0210A6910200FF290210FF4902002C7502102C7602002CB802102CB9020104010211042902002C0D02102C3D020104D0 +021104F80201E9130211E935020001AF021001B00200A7C70210A7C8020013BF0210AB8F020104020211042A020010EA +02101CAA020104BF021104E70201058D021105B402002164021021740200018E021001DD020001D3021001D402001F10 +02101F1802001F5702101F5F02001ED202101ED30200FF2A0210FF4A02001E0402101E05020004EE021004EF02002C94 +02102C95020000C0021000E0020013DB0210ABAB020001B20210028B020104260211044E0200A6620210A66302000054 +0210007402000556021005860300042A0310044A03201C86020104220211044A02001F3602101F3E0200A7940210A7C4 +020004CD021004CE020104BB021104E30200023B0210023C020001CF021001D00200050C0210050D0200A6460210A647 +02001E4602101E4702010CA602110CE60200A7790210A77A0200FF360210FF56020118A2021118C2020004EA021004EB +0200041D0210043D02016E5202116E720200A6880210A68902001EB202101EB3020021600210217002001ED602101ED7 +020024C3021024DD02016E5E02116E7E020004AC021004AD0201E9100211E9320200023E02102C6602002CB402102CB5 +0200FF2D0210FF4D0200014C0210014D02001E2202101E23020013BB0210AB8B020001430210014402010581021105A8 +020001700210017102001E9402101E9502002C2802102C580201040E02110436020104B2021104DA0200A7980210A799 +020013B80210AB8802001E7002101E71040004220410044204201C8404301C8502010C8502110CC502001EAE02101EAF +020001220210012302010C8C02110CCC020104050211042D0200042002100440020001AE021002880200021A0210021B +0200038C021003CC02001F9502101F9D0400034504100399042003B904301FBE0200018A0210025702002C9002102C91 +020010B102102D110200011E0210011F02001E0802101E090200A7C00210A7C102001C8902101C8A02010580021105A7 +0200041C0210043C0200FB050210FB060200A7A40210A7A502001E7402101E7502002C1402102C44020013E70210ABB7 +0201E90D0211E92F020013A50210AB75020010F302101CB3020024BA021024D40200013F021001400200039D021003BD +02002CE202102CE3020010A102102D0102000508021005090200004D0210006D02000389021003AE0200048C0210048D +02002C0402102C340200216F0210217F020004B0021004B102002CD202102CD30200A7340210A73502010584021105AB +0200005002100070020001600210016102010CA902110CE902001E3202101E330200020002100201020118AB021118CB +0200A7860210A787020118BB021118DB020118AE021118CE0200021E0210021F020003AA021003CA020010C202102D22 +020013C40210AB9402000539021005690200A74A0210A74B020000C3021000E30200046E0210046F0200054D0210057D +020010E302101CA3020003DE021003DF020024CA021024E40400034504100399042003B904301FBE0200A7DA0210A7DB +0200A75A0210A75B020004190210043902002C0902102C390200037D021003FF02001F2602101F2E02010C9902110CD9 +020021830210218402002C2302102C53020001320210013302001E5602101E57020010AE02102D0E0200A7400210A741 +020000DD021000FD020010E602101CA603001E6003101E6103201E9B02000478021004790200022E0210022F0200A694 +0210A6950200052C0210052D02010570021105970200A6660210A667020013A80210AB7802010C9602110CD6020118B2 +021118D202010D6402110D840200020A0210020B020024BF021024D9020013CB0210AB9B02010C9C02110CDC0300041E +0310043E03201C8202001E8402101E8502001EF002101EF102010D5702110D7702010D5A02110D7A02016E5902116E79 +02002CA402102CA50200A7240210A7250200049C0210049D0200010E0210010F020104D3021104FB0201E9030211E925 +0200019102100192020013DE0210ABAE030003A0031003C0032003D6020013AD0210AB7D020002060210020702001F45 +02101F4D020003EA021003EB020010BB02102D1B02000474021004750200FF380210FF58020004FE021004FF02002C84 +02102C85020104130211043B02002C1F02102C4F02001E5C02101E5D02001EE402101EE502002CC802102CC9020104CE +021104F6020004BA021004BB02010D6202110D82020000D1021000F10200047202100473020118B6021118D602001F78 +02101FF8020000430210006302001EA202101EA30201E9050211E92702001F2402101F2C0200019D02100272020004B6 +021004B7020000DF02101E9E02001F8702101F8F02001E1402101E1502001EE602101EE70200040B0210045B02000409 +021004590201057D021105A4020003A8021003C802001E5A02101E5B0201057F021105A60200054402100574020010FE +02101CBE02001E1202101E13020010B902102D190200004702100067020004FC021004FD02010C9202110CD202002C86 +02102C8702001E1A02101E1B02010C9002110CD0020010BF02102D1F020013CA0210AB9A02016E4902116E6902000041 +02100061020001BC021001BD02001EEA02101EEB02000502021005030200024802100249020010DF02101C9F030001C4 +031001C5032001C60200054602100576020013EF0210ABBF02002CCC02102CCD020010D702101C97020013A70210AB77 +0200047A0210047B02000134021001350300042A0310044A03201C8602002C1902102C4902000204021002050200025C +0210A7AB020024CF021024E902001E5402101E5502010579021105A00200054A0210057A0200A6840210A6850200FF27 +0210FF4702001F0502101F0D020021320210214E0200024C0210024D020013B50210AB8502002CC602102CC702010408 +0211043002002C1D02102C4D0200023F02102C7E0200A7420210A74302001E6202101E6302010CA802110CE8030000B5 +0310039C032003BC02001F8102101F8902010C9A02110CDA0200012E0210012F0200040302100453020001FE021001FF +0400034504100399042003B904301FBE0200017402100175020003CF021003D7020024CD021024E702001FB302101FBC +020118AD021118CD0200A7440210A745020000D9021000F902001E0C02101E0D02002C1702102C47020003E2021003E3 +0200026C0210A7AD0200A7560210A7570200040502100455020001970210026802001F6002101F6802001EEC02101EED +02002C8C02102C8D020010F202101CB20200A7CC0210A7CD02010D5902110D790201040A02110432020013C60210AB96 +0201E91D0211E93F020104B6021104DE0200042402100444020001A9021002830300039A031003BA032003F0020010E5 +02101CA5020104C8021104F0020104070211042F020013D00210ABA002001FA202101FAA0200046C0210046D020010A0 +02102D000200A7820210A783030000C5031000E50320212B020004B4021004B502002CCE02102CCF0200A73A0210A73B +0200FF210210FF4102010D5602110D76020104B9021104E102001EA402101EA50200038F021003CE020024BE021024D8 +020003B002101FE3020000490210006902016E4102116E6102000246021002470201E91F0211E94102001F7302101FC9 +02002C6702102C6802002166021021760200010002100101020003E4021003E5020013D20210ABA20200A79E0210A79F +02001FA002101FA802010CB102110CF102016E5D02116E7D020010C102102D210200A7F50210A7F6020013BE0210AB8E +0200042C0210044C020010DD02101C9D02001F9302101F9B0200024E0210024F020004BC021004BD0200017602100177 +020013AB0210AB7B020013E10210ABB1020005040210050502001F0302101F0B0200A6860210A6870200054C0210057C +02016E4F02116E6F020010EB02101CAB020013D90210ABA90200023A02102C65020004A8021004A902002CDA02102CDB +0300041E0310043E03201C8202000394021003B402002C7202102C73020005100210051102001E2602101E270200A642 +0210A643020004C9021004CA020001470210014802001EB002101EB10200A75E0210A75F0201058C021105B30200A73C +0210A73D020104D1021104F9020104D2021104FA02010590021105B7020000550210007502001F1102101F190200037B +021003FD02001F3102101F3902002CBA02102CBB02000552021005820200A68C0210A68D02001E6E02101E6F02002167 +02102177020000DE021000FE020001900210025B02001EF802101EF902010D5F02110D7F020104B0021104D802010C8E +02110CCE02002C0802102C380200016E0210016F02016E5C02116E7C020010CD02102D2D02001F7B02101FEB02001E90 +02101E91020013B30210AB83020001D1021001D202001F5302101F5B020001260210012702001E4802101E4902002C98 +02102C99020104000211042802010CA402110CE4020118B9021118D9020013B00210AB8002001ED802101ED902001F74 +02101FCA040004220410044204201C8404301C8502001EF202101EF302002161021021710201042002110448030001F1 +031001F2032001F3020001D7021001D80200A68A0210A68B020003F7021003F80200FF350210FF55020003DC021003DD +02010C8D02110CCD02000418021004380200021202100213020004F0021004F1020024C1021024DB0200050A0210050B +0201E9170211E9390200A6440210A6450200053702100567020010AC02102D0C020010AD02102D0D020024C7021024E1 +020004600210046102002C2B02102C5B02016E5602116E76020010C702102D27020104060211042E02002CD402102CD5 +020010F102101CB102001F7A02101FEA02002C0B02102C3B0200FF340210FF540200041702100437020118BA021118DA +030001F1031001F2032001F303000395031003B5032003F5020001B7021002920200018F021002590200053802100568 +0200A66A0210A66B02001F3202101F3A02010421021104490200052A0210052B02000425021004450200A7840210A785 +0200004F0210006F0200A6640210A665020104B1021104D9020000C4021000E402010CA502110CE502001EAA02101EAB +020013D80210ABA802010D5502110D75020010E402101CA4020000D8021000F8030001CA031001CB032001CC020010D1 +02101C91020105750211059C0200216C0210217C02002C0202102C3202010D5802110D780200A7D80210A7D90200FF22 +0210FF4202016E5B02116E7B0200040402100454020010B302102D1302001ECA02101ECB02010409021104310201E918 +0211E93A020004F6021004F702002CC002102CC102001E2002101E21020104B7021104DF0200039B021003BB02000196 +0210026902002C2502102C550200A7900210A7910200A7640210A7650200020C0210020D02001F9402101F9C020118B0 +021118D0020001820210018302002CAC02102CAD02001F8002101F88020024CC021024E60200025102102C6D02000480 +02100481020013E60210ABB6020024B8021024D20200054B0210057B020013AA0210AB7A0300004B0310006B0320212A +020002610210A7AC02000141021001420300039A031003BA032003F0020010F802101CB8020104C4021104EC02000189 +02100256020010DE02101C9E02001E6802101E69020104BA021104E202001F0402101F0C020105780211059F02000411 +0210043102010582021105A902000466021004670200A7360210A737020000CB021000EB020010C002102D2002010427 +0211044F020001DE021001DF02002C9202102C93020001060210010702001E4E02101E4F0200042B0210044B0200A748 +0210A74902002C1102102C410200A7B30210AB530200053E0210056E0200014E0210014F020013D30210ABA302000524 +021005250200A65E0210A65F020001F8021001F9020004AE021004AF0200A77E0210A77F030003A0031003C0032003D6 +020002650210A78D0200FF2B0210FF4B02001FA102101FA902001EDE02101EDF020013B90210AB890200016802100169 +0200022602100227020013F1021013F902001E0602101E0702000120021001210201041D0211044502001F6602101F6E +020010A602102D0602010C9102110CD102001D8E0210A7C602010C8402110CC402010CAE02110CEE020118A3021118C3 +0200004802100068020013CC0210AB9C0201E91E0211E9400200038E021003CD0200053102100561"; +return SCE(t[i]); } -@property immutable(FullCaseEntry[]) fullCaseTable() nothrow @nogc @safe pure +@property FCE fullCaseTable(size_t index) nothrow @nogc @safe pure { -alias FCE = FullCaseEntry; -static immutable FCE[] t = [ -FCE("𞤋", 0, 2, 1), -FCE("𞤭", 1, 2, 1),FCE("𐲮", 0, 2, 1),FCE("𐳮", 1, 2, 1),FCE("Җ", 0, 2, 1), -FCE("җ", 1, 2, 1),FCE("𞤑", 0, 2, 1),FCE("𞤳", 1, 2, 1),FCE("Ꜣ", 0, 2, 1), -FCE("ꜣ", 1, 2, 1),FCE("ό", 0, 2, 1),FCE("Ό", 1, 2, 1),FCE("ὄ", 0, 2, 1), -FCE("Ὄ", 1, 2, 1),FCE("Ś", 0, 2, 1),FCE("ś", 1, 2, 1),FCE("ჽ", 0, 2, 1), -FCE("Ჽ", 1, 2, 1),FCE("𖹌", 0, 2, 1),FCE("𖹬", 1, 2, 1),FCE("Ḹ", 0, 2, 1), -FCE("ḹ", 1, 2, 1),FCE("ﬖ", 0, 2, 1),FCE("վն", 1, 2, 2),FCE("𞤡", 0, 2, 1), -FCE("𞥃", 1, 2, 1),FCE("ἣ", 0, 2, 1),FCE("Ἣ", 1, 2, 1),FCE("Ơ", 0, 2, 1), -FCE("ơ", 1, 2, 1),FCE("Σ", 0, 3, 1),FCE("ς", 1, 3, 1),FCE("σ", 2, 3, 1), -FCE("Ӝ", 0, 2, 1),FCE("ӝ", 1, 2, 1),FCE("Ⲧ", 0, 2, 1),FCE("ⲧ", 1, 2, 1), -FCE("Ż", 0, 2, 1),FCE("ż", 1, 2, 1),FCE("𞤆", 0, 2, 1),FCE("𞤨", 1, 2, 1), -FCE("ნ", 0, 2, 1),FCE("Ნ", 1, 2, 1),FCE("𐓍", 0, 2, 1),FCE("𐓵", 1, 2, 1), -FCE("ὥ", 0, 2, 1),FCE("Ὥ", 1, 2, 1),FCE("Ԟ", 0, 2, 1),FCE("ԟ", 1, 2, 1), -FCE("ი", 0, 2, 1),FCE("Ი", 1, 2, 1),FCE("Ⱊ", 0, 2, 1),FCE("ⱊ", 1, 2, 1), -FCE("ɽ", 0, 2, 1),FCE("Ɽ", 1, 2, 1),FCE("Ꚛ", 0, 2, 1),FCE("ꚛ", 1, 2, 1), -FCE("ἂ", 0, 2, 1),FCE("Ἂ", 1, 2, 1),FCE("Ԣ", 0, 2, 1),FCE("ԣ", 1, 2, 1), -FCE("Ⱡ", 0, 2, 1),FCE("ⱡ", 1, 2, 1),FCE("ᾷ", 0, 2, 1),FCE("ᾶι", 1, 2, 3), -FCE("Ꙑ", 0, 2, 1),FCE("ꙑ", 1, 2, 1),FCE("Ꙝ", 0, 2, 1),FCE("ꙝ", 1, 2, 1), -FCE("Ⱎ", 0, 2, 1),FCE("ⱎ", 1, 2, 1),FCE("ᾳ", 0, 3, 1),FCE("ᾼ", 1, 3, 1), -FCE("αι", 2, 3, 2),FCE("Ꮙ", 0, 2, 1),FCE("ꮙ", 1, 2, 1),FCE("Ꮝ", 0, 2, 1), -FCE("ꮝ", 1, 2, 1),FCE("Î", 0, 2, 1),FCE("î", 1, 2, 1),FCE("Ṿ", 0, 2, 1), -FCE("ṿ", 1, 2, 1),FCE("𐐔", 0, 2, 1),FCE("𐐼", 1, 2, 1),FCE("Ᏸ", 0, 2, 1), -FCE("ᏸ", 1, 2, 1),FCE("Ễ", 0, 2, 1),FCE("ễ", 1, 2, 1),FCE("Ꞌ", 0, 2, 1), -FCE("ꞌ", 1, 2, 1),FCE("Ĕ", 0, 2, 1),FCE("ĕ", 1, 2, 1),FCE("Я", 0, 2, 1), -FCE("я", 1, 2, 1),FCE("𞤂", 0, 2, 1),FCE("𞤤", 1, 2, 1),FCE("Ә", 0, 2, 1), -FCE("ә", 1, 2, 1),FCE("Ⲫ", 0, 2, 1),FCE("ⲫ", 1, 2, 1),FCE("Đ", 0, 2, 1), -FCE("đ", 1, 2, 1),FCE("Ғ", 0, 2, 1),FCE("ғ", 1, 2, 1),FCE("Ḵ", 0, 2, 1), -FCE("ḵ", 1, 2, 1),FCE("Ᏼ", 0, 2, 1),FCE("ᏼ", 1, 2, 1),FCE("Ȥ", 0, 2, 1), -FCE("ȥ", 1, 2, 1),FCE("Ⲣ", 0, 2, 1),FCE("ⲣ", 1, 2, 1),FCE("Ꜯ", 0, 2, 1), -FCE("ꜯ", 1, 2, 1),FCE("𖹈", 0, 2, 1),FCE("𖹨", 1, 2, 1),FCE("J", 0, 2, 1), -FCE("j", 1, 2, 1),FCE("Ꭶ", 0, 2, 1),FCE("ꭶ", 1, 2, 1),FCE("Ş", 0, 2, 1), -FCE("ş", 1, 2, 1),FCE("DŽ", 0, 3, 1),FCE("Dž", 1, 3, 1),FCE("dž", 2, 3, 1), -FCE("ὀ", 0, 2, 1),FCE("Ὀ", 1, 2, 1),FCE("Ꙙ", 0, 2, 1),FCE("ꙙ", 1, 2, 1), -FCE("Ȭ", 0, 2, 1),FCE("ȭ", 1, 2, 1),FCE("𐲟", 0, 2, 1),FCE("𐳟", 1, 2, 1), -FCE("ὐ", 0, 2, 1),FCE("ὐ", 1, 2, 2),FCE("ᾧ", 0, 3, 1),FCE("ᾯ", 1, 3, 1), -FCE("ὧι", 2, 3, 2),FCE("B", 0, 2, 1),FCE("b", 1, 2, 1),FCE("Ꭾ", 0, 2, 1), -FCE("ꭾ", 1, 2, 1),FCE("𖹀", 0, 2, 1),FCE("𖹠", 1, 2, 1),FCE("Ò", 0, 2, 1), -FCE("ò", 1, 2, 1),FCE("Ẃ", 0, 2, 1),FCE("ẃ", 1, 2, 1),FCE("Ꮥ", 0, 2, 1), -FCE("ꮥ", 1, 2, 1),FCE("რ", 0, 2, 1),FCE("Რ", 1, 2, 1),FCE("Ľ", 0, 2, 1), -FCE("ľ", 1, 2, 1),FCE("І", 0, 2, 1),FCE("і", 1, 2, 1),FCE("ʝ", 0, 2, 1), -FCE("Ʝ", 1, 2, 1),FCE("Ĺ", 0, 2, 1),FCE("ĺ", 1, 2, 1),FCE("Ƙ", 0, 2, 1), -FCE("ƙ", 1, 2, 1),FCE("Ẽ", 0, 2, 1),FCE("ẽ", 1, 2, 1),FCE("Ϋ", 0, 2, 1), -FCE("ϋ", 1, 2, 1),FCE("Ў", 0, 2, 1),FCE("ў", 1, 2, 1),FCE("Ꞷ", 0, 2, 1), -FCE("ꞷ", 1, 2, 1),FCE("Њ", 0, 2, 1),FCE("њ", 1, 2, 1),FCE("Ề", 0, 2, 1), -FCE("ề", 1, 2, 1),FCE("𐕲", 0, 2, 1),FCE("𐖙", 1, 2, 1),FCE("Ⓓ", 0, 2, 1), -FCE("ⓓ", 1, 2, 1),FCE("Ⱆ", 0, 2, 1),FCE("ⱆ", 1, 2, 1),FCE("Ɯ", 0, 2, 1), -FCE("ɯ", 1, 2, 1),FCE("Χ", 0, 2, 1),FCE("χ", 1, 2, 1),FCE("Ꚓ", 0, 2, 1), -FCE("ꚓ", 1, 2, 1),FCE("Å", 0, 3, 1),FCE("å", 1, 3, 1),FCE("Å", 2, 3, 1), -FCE("Ԧ", 0, 2, 1),FCE("ԧ", 1, 2, 1),FCE("ɦ", 0, 2, 1),FCE("Ɦ", 1, 2, 1), -FCE("𐕺", 0, 2, 1),FCE("𐖡", 1, 2, 1),FCE("𐕾", 0, 2, 1),FCE("𐖥", 1, 2, 1), -FCE("ῐ", 0, 2, 1),FCE("Ῐ", 1, 2, 1),FCE("F", 0, 2, 1),FCE("f", 1, 2, 1), -FCE("𞤊", 0, 2, 1),FCE("𞤬", 1, 2, 1),FCE("Ȩ", 0, 2, 1),FCE("ȩ", 1, 2, 1), -FCE("Ꭲ", 0, 2, 1),FCE("ꭲ", 1, 2, 1),FCE("Ꜧ", 0, 2, 1),FCE("ꜧ", 1, 2, 1), -FCE("𐲓", 0, 2, 1),FCE("𐳓", 1, 2, 1),FCE("Қ", 0, 2, 1),FCE("қ", 1, 2, 1), -FCE("Ö", 0, 2, 1),FCE("ö", 1, 2, 1),FCE("Č", 0, 2, 1),FCE("č", 1, 2, 1), -FCE("𐲗", 0, 2, 1),FCE("𐳗", 1, 2, 1),FCE("Ţ", 0, 2, 1),FCE("ţ", 1, 2, 1), -FCE("ƞ", 0, 2, 1),FCE("Ƞ", 1, 2, 1),FCE("ẗ", 0, 2, 1),FCE("ẗ", 1, 2, 2), -FCE("Β", 0, 3, 1),FCE("β", 1, 3, 1),FCE("ϐ", 2, 3, 1),FCE("Ḱ", 0, 2, 1), -FCE("ḱ", 1, 2, 1),FCE("ᾣ", 0, 3, 1),FCE("ᾫ", 1, 3, 1),FCE("ὣι", 2, 3, 2), -FCE("𑢨", 0, 2, 1),FCE("𑣈", 1, 2, 1),FCE("Ⅽ", 0, 2, 1),FCE("ⅽ", 1, 2, 1), -FCE("Ⲟ", 0, 2, 1),FCE("ⲟ", 1, 2, 1),FCE("N", 0, 2, 1),FCE("n", 1, 2, 1), -FCE("µ", 0, 3, 1),FCE("Μ", 1, 3, 1),FCE("μ", 2, 3, 1),FCE("Ҏ", 0, 2, 1), -FCE("ҏ", 1, 2, 1),FCE("Ꜫ", 0, 2, 1),FCE("ꜫ", 1, 2, 1),FCE("𐐐", 0, 2, 1), -FCE("𐐸", 1, 2, 1),FCE("Ί", 0, 2, 1),FCE("ί", 1, 2, 1),FCE("Ỿ", 0, 2, 1), -FCE("ỿ", 1, 2, 1),FCE("𑢬", 0, 2, 1),FCE("𑣌", 1, 2, 1),FCE("Ǫ", 0, 2, 1), -FCE("ǫ", 1, 2, 1),FCE("ἆ", 0, 2, 1),FCE("Ἆ", 1, 2, 1),FCE("ῃ", 0, 3, 1), -FCE("ῌ", 1, 3, 1),FCE("ηι", 2, 3, 2),FCE("Ⴔ", 0, 2, 1),FCE("ⴔ", 1, 2, 1), -FCE("ɪ", 0, 2, 1),FCE("Ɪ", 1, 2, 1),FCE("В", 0, 3, 1),FCE("в", 1, 3, 1), -FCE("ᲀ", 2, 3, 1),FCE("ᾆ", 0, 3, 1),FCE("ᾎ", 1, 3, 1),FCE("ἆι", 2, 3, 2), -FCE("𐲛", 0, 2, 1),FCE("𐳛", 1, 2, 1),FCE("Ꝡ", 0, 2, 1),FCE("ꝡ", 1, 2, 1), -FCE("Ⓢ", 0, 2, 1),FCE("ⓢ", 1, 2, 1),FCE("Ƥ", 0, 2, 1),FCE("ƥ", 1, 2, 1), -FCE("Ο", 0, 2, 1),FCE("ο", 1, 2, 1),FCE("Ⴤ", 0, 2, 1),FCE("ⴤ", 1, 2, 1), -FCE("Ң", 0, 2, 1),FCE("ң", 1, 2, 1),FCE("Ⰳ", 0, 2, 1),FCE("ⰳ", 1, 2, 1), -FCE("Ⳡ", 0, 2, 1),FCE("ⳡ", 1, 2, 1),FCE("𐕶", 0, 2, 1),FCE("𐖝", 1, 2, 1), -FCE("ᾖ", 0, 3, 1),FCE("ᾞ", 1, 3, 1),FCE("ἦι", 2, 3, 2),FCE("Ӡ", 0, 2, 1), -FCE("ӡ", 1, 2, 1),FCE("Ⱚ", 0, 2, 1),FCE("ⱚ", 1, 2, 1),FCE("Ố", 0, 2, 1), -FCE("ố", 1, 2, 1),FCE("Â", 0, 2, 1),FCE("â", 1, 2, 1),FCE("Ө", 0, 2, 1), -FCE("ө", 1, 2, 1),FCE("Ꞧ", 0, 2, 1),FCE("ꞧ", 1, 2, 1),FCE("ჹ", 0, 2, 1), -FCE("Ჹ", 1, 2, 1),FCE("Ņ", 0, 2, 1),FCE("ņ", 1, 2, 1),FCE("ͼ", 0, 2, 1), -FCE("Ͼ", 1, 2, 1),FCE("Ỉ", 0, 2, 1),FCE("ỉ", 1, 2, 1),FCE("К", 0, 2, 1), -FCE("к", 1, 2, 1),FCE("Ê", 0, 2, 1),FCE("ê", 1, 2, 1),FCE("ᾆ", 0, 3, 1), -FCE("ᾎ", 1, 3, 1),FCE("ἆι", 2, 3, 2),FCE("С", 0, 3, 1),FCE("с", 1, 3, 1), -FCE("ᲃ", 2, 3, 1),FCE("𐐄", 0, 2, 1),FCE("𐐬", 1, 2, 1),FCE("fl", 0, 2, 1), -FCE("fl", 1, 2, 2),FCE("Կ", 0, 2, 1),FCE("կ", 1, 2, 1),FCE("Շ", 0, 2, 1), -FCE("շ", 1, 2, 1),FCE("Ꮆ", 0, 2, 1),FCE("ꮆ", 1, 2, 1),FCE("Ꮼ", 0, 2, 1), -FCE("ꮼ", 1, 2, 1),FCE("L", 0, 2, 1),FCE("l", 1, 2, 1),FCE("Ꞻ", 0, 2, 1), -FCE("ꞻ", 1, 2, 1),FCE("Ꙉ", 0, 2, 1),FCE("ꙉ", 1, 2, 1),FCE("Ꮕ", 0, 2, 1), -FCE("ꮕ", 1, 2, 1),FCE("D", 0, 2, 1),FCE("d", 1, 2, 1),FCE("𐐏", 0, 2, 1), -FCE("𐐷", 1, 2, 1),FCE("𐐜", 0, 2, 1),FCE("𐑄", 1, 2, 1),FCE("𐖃", 0, 2, 1), -FCE("𐖪", 1, 2, 1),FCE("𐲃", 0, 2, 1),FCE("𐳃", 1, 2, 1),FCE("Ɂ", 0, 2, 1), -FCE("ɂ", 1, 2, 1),FCE("Ṷ", 0, 2, 1),FCE("ṷ", 1, 2, 1),FCE("Ⴜ", 0, 2, 1), -FCE("ⴜ", 1, 2, 1),FCE("Ⱒ", 0, 2, 1),FCE("ⱒ", 1, 2, 1),FCE("ა", 0, 2, 1), -FCE("Ა", 1, 2, 1),FCE("Ꝩ", 0, 2, 1),FCE("ꝩ", 1, 2, 1),FCE("Ꜳ", 0, 2, 1), -FCE("ꜳ", 1, 2, 1),FCE("Ĝ", 0, 2, 1),FCE("ĝ", 1, 2, 1),FCE("Ч", 0, 2, 1), -FCE("ч", 1, 2, 1),FCE("Ṁ", 0, 2, 1),FCE("ṁ", 1, 2, 1),FCE("𑢱", 0, 2, 1), -FCE("𑣑", 1, 2, 1),FCE("Œ", 0, 2, 1),FCE("œ", 1, 2, 1),FCE("Ρ", 0, 3, 1), -FCE("ρ", 1, 3, 1),FCE("ϱ", 2, 3, 1),FCE("Η", 0, 2, 1),FCE("η", 1, 2, 1), -FCE("Ƭ", 0, 2, 1),FCE("ƭ", 1, 2, 1),FCE("Ǣ", 0, 2, 1),FCE("ǣ", 1, 2, 1), -FCE("Ș", 0, 2, 1),FCE("ș", 1, 2, 1),FCE("𞤚", 0, 2, 1),FCE("𞤼", 1, 2, 1), -FCE("Ԗ", 0, 2, 1),FCE("ԗ", 1, 2, 1),FCE("ἧ", 0, 2, 1),FCE("Ἧ", 1, 2, 1), -FCE("Ꟊ", 0, 2, 1),FCE("ꟊ", 1, 2, 1),FCE("ῠ", 0, 2, 1),FCE("Ῠ", 1, 2, 1), -FCE("Ⅵ", 0, 2, 1),FCE("ⅵ", 1, 2, 1),FCE("Ꙭ", 0, 2, 1),FCE("ꙭ", 1, 2, 1), -FCE("Γ", 0, 2, 1),FCE("γ", 1, 2, 1),FCE("Բ", 0, 2, 1),FCE("բ", 1, 2, 1), -FCE("V", 0, 2, 1),FCE("v", 1, 2, 1),FCE("ἳ", 0, 2, 1),FCE("Ἳ", 1, 2, 1), -FCE("Ք", 0, 2, 1),FCE("ք", 1, 2, 1),FCE("ᲈ", 0, 3, 1),FCE("Ꙋ", 1, 3, 1), -FCE("ꙋ", 2, 3, 1),FCE("Ꚏ", 0, 2, 1),FCE("ꚏ", 1, 2, 1),FCE("Ϙ", 0, 2, 1), -FCE("ϙ", 1, 2, 1),FCE("Ⓟ", 0, 2, 1),FCE("ⓟ", 1, 2, 1),FCE("Ⲳ", 0, 2, 1), -FCE("ⲳ", 1, 2, 1),FCE("𐲂", 0, 2, 1),FCE("𐳂", 1, 2, 1),FCE("W", 0, 2, 1), -FCE("w", 1, 2, 1),FCE("𖹓", 0, 2, 1),FCE("𖹳", 1, 2, 1),FCE("W", 0, 2, 1), -FCE("w", 1, 2, 1),FCE("Ỷ", 0, 2, 1),FCE("ỷ", 1, 2, 1),FCE("𞤒", 0, 2, 1), -FCE("𞤴", 1, 2, 1),FCE("ἒ", 0, 2, 1),FCE("Ἒ", 1, 2, 1),FCE("Ҧ", 0, 2, 1), -FCE("ҧ", 1, 2, 1),FCE("Ū", 0, 2, 1),FCE("ū", 1, 2, 1),FCE("ἴ", 0, 2, 1), -FCE("Ἴ", 1, 2, 1),FCE("Ⳝ", 0, 2, 1),FCE("ⳝ", 1, 2, 1),FCE("Ʊ", 0, 2, 1), -FCE("ʊ", 1, 2, 1),FCE("𑢤", 0, 2, 1),FCE("𑣄", 1, 2, 1),FCE("Ḩ", 0, 2, 1), -FCE("ḩ", 1, 2, 1),FCE("ƿ", 0, 2, 1),FCE("Ƿ", 1, 2, 1),FCE("Ƌ", 0, 2, 1), -FCE("ƌ", 1, 2, 1),FCE("Ⴇ", 0, 2, 1),FCE("ⴇ", 1, 2, 1),FCE("Ĩ", 0, 2, 1), -FCE("ĩ", 1, 2, 1),FCE("Ṫ", 0, 2, 1),FCE("ṫ", 1, 2, 1),FCE("Ⴋ", 0, 2, 1), -FCE("ⴋ", 1, 2, 1),FCE("П", 0, 2, 1),FCE("п", 1, 2, 1),FCE("Ⱞ", 0, 2, 1), -FCE("ⱞ", 1, 2, 1),FCE("𐲯", 0, 2, 1),FCE("𐳯", 1, 2, 1),FCE("𐓅", 0, 2, 1), -FCE("𐓭", 1, 2, 1),FCE("𑢥", 0, 2, 1),FCE("𑣅", 1, 2, 1),FCE("ῡ", 0, 2, 1), -FCE("Ῡ", 1, 2, 1),FCE("Φ", 0, 3, 1),FCE("φ", 1, 3, 1),FCE("ϕ", 2, 3, 1), -FCE("Ⰺ", 0, 2, 1),FCE("ⰺ", 1, 2, 1),FCE("Ԏ", 0, 2, 1),FCE("ԏ", 1, 2, 1), -FCE("Ą", 0, 2, 1),FCE("ą", 1, 2, 1),FCE("Ͳ", 0, 2, 1),FCE("ͳ", 1, 2, 1), -FCE("Ẏ", 0, 2, 1),FCE("ẏ", 1, 2, 1),FCE("Ζ", 0, 2, 1),FCE("ζ", 1, 2, 1), -FCE("Ỻ", 0, 2, 1),FCE("ỻ", 1, 2, 1),FCE("ϲ", 0, 2, 1),FCE("Ϲ", 1, 2, 1), -FCE("Ꙁ", 0, 2, 1),FCE("ꙁ", 1, 2, 1),FCE("წ", 0, 2, 1),FCE("Წ", 1, 2, 1), -FCE("𑢡", 0, 2, 1),FCE("𑣁", 1, 2, 1),FCE("ᾧ", 0, 3, 1),FCE("ᾯ", 1, 3, 1), -FCE("ὧι", 2, 3, 2),FCE("Ŧ", 0, 2, 1),FCE("ŧ", 1, 2, 1),FCE("ἷ", 0, 2, 1), -FCE("Ἷ", 1, 2, 1),FCE("𐲆", 0, 2, 1),FCE("𐳆", 1, 2, 1),FCE("Ꮭ", 0, 2, 1), -FCE("ꮭ", 1, 2, 1),FCE("ὑ", 0, 2, 1),FCE("Ὑ", 1, 2, 1),FCE("Ⲛ", 0, 2, 1), -FCE("ⲛ", 1, 2, 1),FCE("Ǻ", 0, 2, 1),FCE("ǻ", 1, 2, 1),FCE("Ⅹ", 0, 2, 1), -FCE("ⅹ", 1, 2, 1),FCE("𖹗", 0, 2, 1),FCE("𖹷", 1, 2, 1),FCE("Ⴄ", 0, 2, 1), -FCE("ⴄ", 1, 2, 1),FCE("S", 0, 3, 1),FCE("s", 1, 3, 1),FCE("ſ", 2, 3, 1), -FCE("Ͷ", 0, 2, 1),FCE("ͷ", 1, 2, 1),FCE("Ꮁ", 0, 2, 1),FCE("ꮁ", 1, 2, 1), -FCE("Ѩ", 0, 2, 1),FCE("ѩ", 1, 2, 1),FCE("Ꮴ", 0, 2, 1),FCE("ꮴ", 1, 2, 1), -FCE("ᾖ", 0, 3, 1),FCE("ᾞ", 1, 3, 1),FCE("ἦι", 2, 3, 2),FCE("Ĉ", 0, 2, 1), -FCE("ĉ", 1, 2, 1),FCE("𐲠", 0, 2, 1),FCE("𐳠", 1, 2, 1),FCE("Ṧ", 0, 2, 1), -FCE("ṧ", 1, 2, 1),FCE("Ẋ", 0, 2, 1),FCE("ẋ", 1, 2, 1),FCE("Ṍ", 0, 2, 1), -FCE("ṍ", 1, 2, 1),FCE("ή", 0, 2, 1),FCE("Ή", 1, 2, 1),FCE("Ⰾ", 0, 2, 1), -FCE("ⰾ", 1, 2, 1),FCE("Ṑ", 0, 2, 1),FCE("ṑ", 1, 2, 1),FCE("Ⓚ", 0, 2, 1), -FCE("ⓚ", 1, 2, 1),FCE("Ꝑ", 0, 2, 1),FCE("ꝑ", 1, 2, 1),FCE("Ú", 0, 2, 1), -FCE("ú", 1, 2, 1),FCE("ჩ", 0, 2, 1),FCE("Ჩ", 1, 2, 1),FCE("Ⳙ", 0, 2, 1), -FCE("ⳙ", 1, 2, 1),FCE("Ẹ", 0, 2, 1),FCE("ẹ", 1, 2, 1),FCE("Ĭ", 0, 2, 1), -FCE("ĭ", 1, 2, 1),FCE("ɒ", 0, 2, 1),FCE("Ɒ", 1, 2, 1),FCE("Ӄ", 0, 2, 1), -FCE("ӄ", 1, 2, 1),FCE("ΰ", 0, 3, 1),FCE("ΰ", 1, 3, 1),FCE("ΰ", 2, 3, 3), -FCE("Ⓞ", 0, 2, 1),FCE("ⓞ", 1, 2, 1),FCE("Ⰿ", 0, 2, 1),FCE("ⰿ", 1, 2, 1), -FCE("Գ", 0, 2, 1),FCE("գ", 1, 2, 1),FCE("ƕ", 0, 2, 1),FCE("Ƕ", 1, 2, 1), -FCE("ἓ", 0, 2, 1),FCE("Ἓ", 1, 2, 1),FCE("𐒸", 0, 2, 1),FCE("𐓠", 1, 2, 1), -FCE("Փ", 0, 2, 1),FCE("փ", 1, 2, 1),FCE("𐐥", 0, 2, 1),FCE("𐑍", 1, 2, 1), -FCE("Ꮡ", 0, 2, 1),FCE("ꮡ", 1, 2, 1),FCE("Ӵ", 0, 2, 1),FCE("ӵ", 1, 2, 1), -FCE("Ӈ", 0, 2, 1),FCE("ӈ", 1, 2, 1),FCE("𐒵", 0, 2, 1),FCE("𐓝", 1, 2, 1), -FCE("Ӑ", 0, 2, 1),FCE("ӑ", 1, 2, 1),FCE("Ꝝ", 0, 2, 1),FCE("ꝝ", 1, 2, 1), -FCE("𐲬", 0, 2, 1),FCE("𐳬", 1, 2, 1),FCE("Ḭ", 0, 2, 1),FCE("ḭ", 1, 2, 1), -FCE("Ⴈ", 0, 2, 1),FCE("ⴈ", 1, 2, 1),FCE("Ѥ", 0, 2, 1),FCE("ѥ", 1, 2, 1), -FCE("Ц", 0, 2, 1),FCE("ц", 1, 2, 1),FCE("Ӥ", 0, 2, 1),FCE("ӥ", 1, 2, 1), -FCE("ჭ", 0, 2, 1),FCE("Ჭ", 1, 2, 1),FCE("Ꞓ", 0, 2, 1),FCE("ꞓ", 1, 2, 1), -FCE("Ờ", 0, 2, 1),FCE("ờ", 1, 2, 1),FCE("𐒼", 0, 2, 1),FCE("𐓤", 1, 2, 1), -FCE("𐕷", 0, 2, 1),FCE("𐖞", 1, 2, 1),FCE("Ẩ", 0, 2, 1),FCE("ẩ", 1, 2, 1), -FCE("Ƹ", 0, 2, 1),FCE("ƹ", 1, 2, 1),FCE("Æ", 0, 2, 1),FCE("æ", 1, 2, 1), -FCE("P", 0, 2, 1),FCE("p", 1, 2, 1),FCE("𖹄", 0, 2, 1),FCE("𖹤", 1, 2, 1), -FCE("𐐛", 0, 2, 1),FCE("𐑃", 1, 2, 1),FCE("Ḏ", 0, 2, 1),FCE("ḏ", 1, 2, 1), -FCE("Ӕ", 0, 2, 1),FCE("ӕ", 1, 2, 1),FCE("Ⲯ", 0, 2, 1),FCE("ⲯ", 1, 2, 1), -FCE("Ⱬ", 0, 2, 1),FCE("ⱬ", 1, 2, 1),FCE("C", 0, 2, 1),FCE("c", 1, 2, 1), -FCE("Ƅ", 0, 2, 1),FCE("ƅ", 1, 2, 1),FCE("𐕳", 0, 2, 1),FCE("𐖚", 1, 2, 1), -FCE("Θ", 0, 4, 1),FCE("θ", 1, 4, 1),FCE("ϑ", 2, 4, 1),FCE("ϴ", 3, 4, 1), -FCE("Ꮤ", 0, 2, 1),FCE("ꮤ", 1, 2, 1),FCE("𞤙", 0, 2, 1),FCE("𞤻", 1, 2, 1), -FCE("Ƈ", 0, 2, 1),FCE("ƈ", 1, 2, 1),FCE("Ⱃ", 0, 2, 1),FCE("ⱃ", 1, 2, 1), -FCE("Ꞣ", 0, 2, 1),FCE("ꞣ", 1, 2, 1),FCE("Ɣ", 0, 2, 1),FCE("ɣ", 1, 2, 1), -FCE("Ж", 0, 2, 1),FCE("ж", 1, 2, 1),FCE("Ⲿ", 0, 2, 1),FCE("ⲿ", 1, 2, 1), -FCE("ᾦ", 0, 3, 1),FCE("ᾮ", 1, 3, 1),FCE("ὦι", 2, 3, 2),FCE("𐓆", 0, 2, 1), -FCE("𐓮", 1, 2, 1),FCE("ᾂ", 0, 3, 1),FCE("ᾊ", 1, 3, 1),FCE("ἂι", 2, 3, 2), -FCE("𐓉", 0, 2, 1),FCE("𐓱", 1, 2, 1),FCE("Ꮰ", 0, 2, 1),FCE("ꮰ", 1, 2, 1), -FCE("ɀ", 0, 2, 1),FCE("Ɀ", 1, 2, 1),FCE("Ꞿ", 0, 2, 1),FCE("ꞿ", 1, 2, 1), -FCE("ᾒ", 0, 3, 1),FCE("ᾚ", 1, 3, 1),FCE("ἢι", 2, 3, 2),FCE("Ђ", 0, 2, 1), -FCE("ђ", 1, 2, 1),FCE("Զ", 0, 2, 1),FCE("զ", 1, 2, 1),FCE("Ր", 0, 2, 1), -FCE("ր", 1, 2, 1),FCE("Ꚃ", 0, 2, 1),FCE("ꚃ", 1, 2, 1),FCE("Ά", 0, 2, 1), -FCE("ά", 1, 2, 1),FCE("ῥ", 0, 2, 1),FCE("Ῥ", 1, 2, 1),FCE("Ⓣ", 0, 2, 1), -FCE("ⓣ", 1, 2, 1),FCE("Ó", 0, 2, 1),FCE("ó", 1, 2, 1),FCE("ჰ", 0, 2, 1), -FCE("Ჰ", 1, 2, 1),FCE("Ḽ", 0, 2, 1),FCE("ḽ", 1, 2, 1),FCE("Ⲁ", 0, 2, 1), -FCE("ⲁ", 1, 2, 1),FCE("ᾗ", 0, 3, 1),FCE("ᾟ", 1, 3, 1),FCE("ἧι", 2, 3, 2), -FCE("𐖊", 0, 2, 1),FCE("𐖱", 1, 2, 1),FCE("Ŗ", 0, 2, 1),FCE("ŗ", 1, 2, 1), -FCE("Ṻ", 0, 2, 1),FCE("ṻ", 1, 2, 1),FCE("Ꮽ", 0, 2, 1),FCE("ꮽ", 1, 2, 1), -FCE("Ꜿ", 0, 2, 1),FCE("ꜿ", 1, 2, 1),FCE("Ę", 0, 2, 1),FCE("ę", 1, 2, 1), -FCE("Ȕ", 0, 2, 1),FCE("ȕ", 1, 2, 1),FCE("Ṡ", 0, 3, 1),FCE("ṡ", 1, 3, 1), -FCE("ẛ", 2, 3, 1),FCE("Ⲋ", 0, 2, 1),FCE("ⲋ", 1, 2, 1),FCE("Ꙍ", 0, 2, 1), -FCE("ꙍ", 1, 2, 1),FCE("Ε", 0, 3, 1),FCE("ε", 1, 3, 1),FCE("ϵ", 2, 3, 1), -FCE("Ǧ", 0, 2, 1),FCE("ǧ", 1, 2, 1),FCE("ᾅ", 0, 3, 1),FCE("ᾍ", 1, 3, 1), -FCE("ἅι", 2, 3, 2),FCE("Ԓ", 0, 2, 1),FCE("ԓ", 1, 2, 1),FCE("ὡ", 0, 2, 1), -FCE("Ὡ", 1, 2, 1),FCE("Ꙩ", 0, 2, 1),FCE("ꙩ", 1, 2, 1),FCE("𐖔", 0, 2, 1), -FCE("𐖻", 1, 2, 1),FCE("Ḙ", 0, 2, 1),FCE("ḙ", 1, 2, 1),FCE("Ꮂ", 0, 2, 1), -FCE("ꮂ", 1, 2, 1),FCE("𐐕", 0, 2, 1),FCE("𐐽", 1, 2, 1),FCE("𐐘", 0, 2, 1), -FCE("𐑀", 1, 2, 1),FCE("Ʌ", 0, 2, 1),FCE("ʌ", 1, 2, 1),FCE("ὲ", 0, 2, 1), -FCE("Ὲ", 1, 2, 1),FCE("𑢵", 0, 2, 1),FCE("𑣕", 1, 2, 1),FCE("Ⴘ", 0, 2, 1), -FCE("ⴘ", 1, 2, 1),FCE("Ӏ", 0, 2, 1),FCE("ӏ", 1, 2, 1),FCE("𐐋", 0, 2, 1), -FCE("𐐳", 1, 2, 1),FCE("У", 0, 2, 1),FCE("у", 1, 2, 1),FCE("Ⴥ", 0, 2, 1), -FCE("ⴥ", 1, 2, 1),FCE("Ⱝ", 0, 2, 1),FCE("ⱝ", 1, 2, 1),FCE("ἰ", 0, 2, 1), -FCE("Ἰ", 1, 2, 1),FCE("Ꮑ", 0, 2, 1),FCE("ꮑ", 1, 2, 1),FCE("Ꝭ", 0, 2, 1), -FCE("ꝭ", 1, 2, 1),FCE("𐓌", 0, 2, 1),FCE("𐓴", 1, 2, 1),FCE("ά", 0, 2, 1), -FCE("Ά", 1, 2, 1),FCE("S", 0, 2, 1),FCE("s", 1, 2, 1),FCE("Ⅺ", 0, 2, 1), -FCE("ⅺ", 1, 2, 1),FCE("ʼn", 0, 2, 1),FCE("ʼn", 1, 2, 2),FCE("Ϩ", 0, 2, 1), -FCE("ϩ", 1, 2, 1),FCE("Ꟑ", 0, 2, 1),FCE("ꟑ", 1, 2, 1),FCE("Z", 0, 2, 1), -FCE("z", 1, 2, 1),FCE("𐲰", 0, 2, 1),FCE("𐳰", 1, 2, 1),FCE("Ǚ", 0, 2, 1), -FCE("ǚ", 1, 2, 1),FCE("Ọ", 0, 2, 1),FCE("ọ", 1, 2, 1),FCE("Ƶ", 0, 2, 1), -FCE("ƶ", 1, 2, 1),FCE("Ճ", 0, 2, 1),FCE("ճ", 1, 2, 1),FCE("ἢ", 0, 2, 1), -FCE("Ἢ", 1, 2, 1),FCE("𐖇", 0, 2, 1),FCE("𐖮", 1, 2, 1),FCE("Ạ", 0, 2, 1), -FCE("ạ", 1, 2, 1),FCE("𐲏", 0, 2, 1),FCE("𐳏", 1, 2, 1),FCE("𖹔", 0, 2, 1), -FCE("𖹴", 1, 2, 1),FCE("ᾴ", 0, 2, 1),FCE("άι", 1, 2, 2),FCE("ᵽ", 0, 2, 1), -FCE("Ᵽ", 1, 2, 1),FCE("Ꟗ", 0, 2, 1),FCE("ꟗ", 1, 2, 1),FCE("Ꝍ", 0, 2, 1), -FCE("ꝍ", 1, 2, 1),FCE("Ꮞ", 0, 2, 1),FCE("ꮞ", 1, 2, 1),FCE("Ï", 0, 2, 1), -FCE("ï", 1, 2, 1),FCE("კ", 0, 2, 1),FCE("Კ", 1, 2, 1),FCE("E", 0, 2, 1), -FCE("e", 1, 2, 1),FCE("Ķ", 0, 2, 1),FCE("ķ", 1, 2, 1),FCE("Ѝ", 0, 2, 1), -FCE("ѝ", 1, 2, 1),FCE("𖹃", 0, 2, 1),FCE("𖹣", 1, 2, 1),FCE("ὼ", 0, 2, 1), -FCE("Ὼ", 1, 2, 1),FCE("Ɋ", 0, 2, 1),FCE("ɋ", 1, 2, 1),FCE("Ҹ", 0, 2, 1), -FCE("ҹ", 1, 2, 1),FCE("Ⳋ", 0, 2, 1),FCE("ⳋ", 1, 2, 1),FCE("Ⳮ", 0, 2, 1), -FCE("ⳮ", 1, 2, 1),FCE("Ɵ", 0, 2, 1),FCE("ɵ", 1, 2, 1),FCE("Τ", 0, 2, 1), -FCE("τ", 1, 2, 1),FCE("ﬗ", 0, 2, 1),FCE("մխ", 1, 2, 2),FCE("Ꝏ", 0, 2, 1), -FCE("ꝏ", 1, 2, 1),FCE("𐓀", 0, 2, 1),FCE("𐓨", 1, 2, 1),FCE("Ḗ", 0, 2, 1), -FCE("ḗ", 1, 2, 1),FCE("Ꭿ", 0, 2, 1),FCE("ꭿ", 1, 2, 1),FCE("Ԁ", 0, 2, 1), -FCE("ԁ", 1, 2, 1),FCE("Ⲃ", 0, 2, 1),FCE("ⲃ", 1, 2, 1),FCE("Ⴝ", 0, 2, 1), -FCE("ⴝ", 1, 2, 1),FCE("𞤖", 0, 2, 1),FCE("𞤸", 1, 2, 1),FCE("𐲣", 0, 2, 1), -FCE("𐳣", 1, 2, 1),FCE("𐲔", 0, 2, 1),FCE("𐳔", 1, 2, 1),FCE("𐓂", 0, 2, 1), -FCE("𐓪", 1, 2, 1),FCE("Φ", 0, 3, 1),FCE("φ", 1, 3, 1),FCE("ϕ", 2, 3, 1), -FCE("ᾓ", 0, 3, 1),FCE("ᾛ", 1, 3, 1),FCE("ἣι", 2, 3, 2),FCE("𑢴", 0, 2, 1), -FCE("𑣔", 1, 2, 1),FCE("Ꮹ", 0, 2, 1),FCE("ꮹ", 1, 2, 1),FCE("𖹍", 0, 2, 1), -FCE("𖹭", 1, 2, 1),FCE("ὁ", 0, 2, 1),FCE("Ὁ", 1, 2, 1),FCE("ʇ", 0, 2, 1), -FCE("Ʇ", 1, 2, 1),FCE("Ղ", 0, 2, 1),FCE("ղ", 1, 2, 1),FCE("Ṙ", 0, 2, 1), -FCE("ṙ", 1, 2, 1),FCE("ὃ", 0, 2, 1),FCE("Ὃ", 1, 2, 1),FCE("ᾑ", 0, 3, 1), -FCE("ᾙ", 1, 3, 1),FCE("ἡι", 2, 3, 2),FCE("Ⳬ", 0, 2, 1),FCE("ⳬ", 1, 2, 1), -FCE("ῑ", 0, 2, 1),FCE("Ῑ", 1, 2, 1),FCE("Ứ", 0, 2, 1),FCE("ứ", 1, 2, 1), -FCE("Ꭳ", 0, 2, 1),FCE("ꭳ", 1, 2, 1),FCE("Ϯ", 0, 2, 1),FCE("ϯ", 1, 2, 1), -FCE("𑢸", 0, 2, 1),FCE("𑣘", 1, 2, 1),FCE("𐲞", 0, 2, 1),FCE("𐳞", 1, 2, 1), -FCE("Ꮻ", 0, 2, 1),FCE("ꮻ", 1, 2, 1),FCE("ÿ", 0, 2, 1),FCE("Ÿ", 1, 2, 1), -FCE("𐐗", 0, 2, 1),FCE("𐐿", 1, 2, 1),FCE("𑢩", 0, 2, 1),FCE("𑣉", 1, 2, 1), -FCE("ᾰ", 0, 2, 1),FCE("Ᾰ", 1, 2, 1),FCE("Ⲉ", 0, 2, 1),FCE("ⲉ", 1, 2, 1), -FCE("Ꭹ", 0, 2, 1),FCE("ꭹ", 1, 2, 1),FCE("𞤉", 0, 2, 1),FCE("𞤫", 1, 2, 1), -FCE("Ꮒ", 0, 2, 1),FCE("ꮒ", 1, 2, 1),FCE("Ⓐ", 0, 2, 1),FCE("ⓐ", 1, 2, 1), -FCE("Ṟ", 0, 2, 1),FCE("ṟ", 1, 2, 1),FCE("Ⱪ", 0, 2, 1),FCE("ⱪ", 1, 2, 1), -FCE("𐐟", 0, 2, 1),FCE("𐑇", 1, 2, 1),FCE("Ϳ", 0, 2, 1),FCE("ϳ", 1, 2, 1), -FCE("Հ", 0, 2, 1),FCE("հ", 1, 2, 1),FCE("ΐ", 0, 3, 1),FCE("ΐ", 1, 3, 1), -FCE("ΐ", 2, 3, 3),FCE("K", 0, 3, 1),FCE("k", 1, 3, 1),FCE("K", 2, 3, 1), -FCE("Ӹ", 0, 2, 1),FCE("ӹ", 1, 2, 1),FCE("Ᏻ", 0, 2, 1),FCE("ᏻ", 1, 2, 1), -FCE("É", 0, 2, 1),FCE("é", 1, 2, 1),FCE("Џ", 0, 2, 1),FCE("џ", 1, 2, 1), -FCE("Ⴕ", 0, 2, 1),FCE("ⴕ", 1, 2, 1),FCE("Ꝇ", 0, 2, 1),FCE("ꝇ", 1, 2, 1), -FCE("Í", 0, 2, 1),FCE("í", 1, 2, 1),FCE("Ѷ", 0, 2, 1),FCE("ѷ", 1, 2, 1), -FCE("Ξ", 0, 2, 1),FCE("ξ", 1, 2, 1),FCE("ἠ", 0, 2, 1),FCE("Ἠ", 1, 2, 1), -FCE("ჺ", 0, 2, 1),FCE("Ჺ", 1, 2, 1),FCE("Ⱑ", 0, 2, 1),FCE("ⱑ", 1, 2, 1), -FCE("Ầ", 0, 2, 1),FCE("ầ", 1, 2, 1),FCE("ᾃ", 0, 3, 1),FCE("ᾋ", 1, 3, 1), -FCE("ἃι", 2, 3, 2),FCE("Լ", 0, 2, 1),FCE("լ", 1, 2, 1),FCE("ἁ", 0, 2, 1), -FCE("Ἁ", 1, 2, 1),FCE("Ⳃ", 0, 2, 1),FCE("ⳃ", 1, 2, 1),FCE("Ȉ", 0, 2, 1), -FCE("ȉ", 1, 2, 1),FCE("Ꮳ", 0, 2, 1),FCE("ꮳ", 1, 2, 1),FCE("Ꞗ", 0, 2, 1), -FCE("ꞗ", 1, 2, 1),FCE("ὤ", 0, 2, 1),FCE("Ὤ", 1, 2, 1),FCE("𐖒", 0, 2, 1), -FCE("𐖹", 1, 2, 1),FCE("Ҿ", 0, 2, 1),FCE("ҿ", 1, 2, 1),FCE("ᾑ", 0, 3, 1), -FCE("ᾙ", 1, 3, 1),FCE("ἡι", 2, 3, 2),FCE("Ϧ", 0, 2, 1),FCE("ϧ", 1, 2, 1), -FCE("Ỡ", 0, 2, 1),FCE("ỡ", 1, 2, 1),FCE("ῳ", 0, 3, 1),FCE("ῼ", 1, 3, 1), -FCE("ωι", 2, 3, 2),FCE("İ", 0, 2, 1),FCE("i̇", 1, 2, 2),FCE("Г", 0, 2, 1), -FCE("г", 1, 2, 1),FCE("ẘ", 0, 2, 1),FCE("ẘ", 1, 2, 2),FCE("Ю", 0, 2, 1), -FCE("ю", 1, 2, 1),FCE("მ", 0, 2, 1),FCE("Მ", 1, 2, 1),FCE("ჶ", 0, 2, 1), -FCE("Ჶ", 1, 2, 1),FCE("Ⰰ", 0, 2, 1),FCE("ⰰ", 1, 2, 1),FCE("𑢾", 0, 2, 1), -FCE("𑣞", 1, 2, 1),FCE("Ƨ", 0, 2, 1),FCE("ƨ", 1, 2, 1),FCE("Ⴣ", 0, 2, 1), -FCE("ⴣ", 1, 2, 1),FCE("Е", 0, 2, 1),FCE("е", 1, 2, 1),FCE("Ḟ", 0, 2, 1), -FCE("ḟ", 1, 2, 1),FCE("Ԇ", 0, 2, 1),FCE("ԇ", 1, 2, 1),FCE("Ṥ", 0, 2, 1), -FCE("ṥ", 1, 2, 1),FCE("Ç", 0, 2, 1),FCE("ç", 1, 2, 1),FCE("Ѽ", 0, 2, 1), -FCE("ѽ", 1, 2, 1),FCE("Ṓ", 0, 2, 1),FCE("ṓ", 1, 2, 1),FCE("ჴ", 0, 2, 1), -FCE("Ჴ", 1, 2, 1),FCE("𐖆", 0, 2, 1),FCE("𐖭", 1, 2, 1),FCE("Ѫ", 0, 2, 1), -FCE("ѫ", 1, 2, 1),FCE("Ⱗ", 0, 2, 1),FCE("ⱗ", 1, 2, 1),FCE("𐓊", 0, 2, 1), -FCE("𐓲", 1, 2, 1),FCE("Ⴂ", 0, 2, 1),FCE("ⴂ", 1, 2, 1),FCE("𐲉", 0, 2, 1), -FCE("𐳉", 1, 2, 1),FCE("R", 0, 2, 1),FCE("r", 1, 2, 1),FCE("Θ", 0, 4, 1), -FCE("θ", 1, 4, 1),FCE("ϑ", 2, 4, 1),FCE("ϴ", 3, 4, 1),FCE("Ω", 0, 3, 1), -FCE("ω", 1, 3, 1),FCE("Ω", 2, 3, 1),FCE("Ớ", 0, 2, 1),FCE("ớ", 1, 2, 1), -FCE("𞤁", 0, 2, 1),FCE("𞤣", 1, 2, 1),FCE("Ꞝ", 0, 2, 1),FCE("ꞝ", 1, 2, 1), -FCE("დ", 0, 2, 1),FCE("Დ", 1, 2, 1),FCE("Ⓖ", 0, 2, 1),FCE("ⓖ", 1, 2, 1), -FCE("O", 0, 2, 1),FCE("o", 1, 2, 1),FCE("ɐ", 0, 2, 1),FCE("Ɐ", 1, 2, 1), -FCE("Ⱙ", 0, 2, 1),FCE("ⱙ", 1, 2, 1),FCE("𞤠", 0, 2, 1),FCE("𞥂", 1, 2, 1), -FCE("Ҳ", 0, 2, 1),FCE("ҳ", 1, 2, 1),FCE("𐐙", 0, 2, 1),FCE("𐑁", 1, 2, 1), -FCE("Ȑ", 0, 2, 1),FCE("ȑ", 1, 2, 1),FCE("Ⱅ", 0, 2, 1),FCE("ⱅ", 1, 2, 1), -FCE("𖹇", 0, 2, 1),FCE("𖹧", 1, 2, 1),FCE("Ꝕ", 0, 2, 1),FCE("ꝕ", 1, 2, 1), -FCE("𖹅", 0, 2, 1),FCE("𖹥", 1, 2, 1),FCE("LJ", 0, 3, 1),FCE("Lj", 1, 3, 1), -FCE("lj", 2, 3, 1),FCE("Ѿ", 0, 2, 1),FCE("ѿ", 1, 2, 1),FCE("Ǽ", 0, 2, 1), -FCE("ǽ", 1, 2, 1),FCE("Ȏ", 0, 2, 1),FCE("ȏ", 1, 2, 1),FCE("Ʉ", 0, 2, 1), -FCE("ʉ", 1, 2, 1),FCE("ί", 0, 2, 1),FCE("Ί", 1, 2, 1),FCE("Ⳗ", 0, 2, 1), -FCE("ⳗ", 1, 2, 1),FCE("𐖉", 0, 2, 1),FCE("𐖰", 1, 2, 1),FCE("Т", 0, 4, 1), -FCE("т", 1, 4, 1),FCE("ᲄ", 2, 4, 1),FCE("ᲅ", 3, 4, 1),FCE("ყ", 0, 2, 1), -FCE("Ყ", 1, 2, 1),FCE("Ӻ", 0, 2, 1),FCE("ӻ", 1, 2, 1),FCE("ვ", 0, 2, 1), -FCE("Ვ", 1, 2, 1),FCE("Ậ", 0, 2, 1),FCE("ậ", 1, 2, 1),FCE("Ⴗ", 0, 2, 1), -FCE("ⴗ", 1, 2, 1),FCE("Ꭱ", 0, 2, 1),FCE("ꭱ", 1, 2, 1),FCE("Ꟃ", 0, 2, 1), -FCE("ꟃ", 1, 2, 1),FCE("𞤇", 0, 2, 1),FCE("𞤩", 1, 2, 1),FCE("Ᏽ", 0, 2, 1), -FCE("ᏽ", 1, 2, 1),FCE("Ợ", 0, 2, 1),FCE("ợ", 1, 2, 1),FCE("ὢ", 0, 2, 1), -FCE("Ὢ", 1, 2, 1),FCE("Ẓ", 0, 2, 1),FCE("ẓ", 1, 2, 1),FCE("Ǖ", 0, 2, 1), -FCE("ǖ", 1, 2, 1),FCE("Ⰶ", 0, 2, 1),FCE("ⰶ", 1, 2, 1),FCE("𐲋", 0, 2, 1), -FCE("𐳋", 1, 2, 1),FCE("ὰ", 0, 2, 1),FCE("Ὰ", 1, 2, 1),FCE("Ϭ", 0, 2, 1), -FCE("ϭ", 1, 2, 1),FCE("𞤕", 0, 2, 1),FCE("𞤷", 1, 2, 1),FCE("Ⅾ", 0, 2, 1), -FCE("ⅾ", 1, 2, 1),FCE("Ꮐ", 0, 2, 1),FCE("ꮐ", 1, 2, 1),FCE("Ỵ", 0, 2, 1), -FCE("ỵ", 1, 2, 1),FCE("ᾲ", 0, 2, 1),FCE("ὰι", 1, 2, 2),FCE("Z", 0, 2, 1), -FCE("z", 1, 2, 1),FCE("𑢼", 0, 2, 1),FCE("𑣜", 1, 2, 1),FCE("Ҫ", 0, 2, 1), -FCE("ҫ", 1, 2, 1),FCE("Ⅳ", 0, 2, 1),FCE("ⅳ", 1, 2, 1),FCE("Ḝ", 0, 2, 1), -FCE("ḝ", 1, 2, 1),FCE("Ꮘ", 0, 2, 1),FCE("ꮘ", 1, 2, 1),FCE("𑢯", 0, 2, 1), -FCE("𑣏", 1, 2, 1),FCE("ẚ", 0, 2, 1),FCE("aʾ", 1, 2, 2),FCE("𐕱", 0, 2, 1), -FCE("𐖘", 1, 2, 1),FCE("𐲧", 0, 2, 1),FCE("𐳧", 1, 2, 1),FCE("𐲘", 0, 2, 1), -FCE("𐳘", 1, 2, 1),FCE("Q", 0, 2, 1),FCE("q", 1, 2, 1),FCE("Ӳ", 0, 2, 1), -FCE("ӳ", 1, 2, 1),FCE("𐲪", 0, 2, 1),FCE("𐳪", 1, 2, 1),FCE("Ⴏ", 0, 2, 1), -FCE("ⴏ", 1, 2, 1),FCE("Ⲏ", 0, 2, 1),FCE("ⲏ", 1, 2, 1),FCE("Ⳅ", 0, 2, 1), -FCE("ⳅ", 1, 2, 1),FCE("Ḋ", 0, 2, 1),FCE("ḋ", 1, 2, 1),FCE("ﬕ", 0, 2, 1), -FCE("մի", 1, 2, 2),FCE("𖹐", 0, 2, 1),FCE("𖹰", 1, 2, 1),FCE("𐖎", 0, 2, 1), -FCE("𐖵", 1, 2, 1),FCE("𐐑", 0, 2, 1),FCE("𐐹", 1, 2, 1),FCE("𐐣", 0, 2, 1), -FCE("𐑋", 1, 2, 1),FCE("Ժ", 0, 2, 1),FCE("ժ", 1, 2, 1),FCE("Ṭ", 0, 2, 1), -FCE("ṭ", 1, 2, 1),FCE("𐒾", 0, 2, 1),FCE("𐓦", 1, 2, 1),FCE("𐐤", 0, 2, 1), -FCE("𐑌", 1, 2, 1),FCE("Ⴉ", 0, 2, 1),FCE("ⴉ", 1, 2, 1),FCE("Ⓜ", 0, 2, 1), -FCE("ⓜ", 1, 2, 1),FCE("𐲁", 0, 2, 1),FCE("𐳁", 1, 2, 1),FCE("Ꮌ", 0, 2, 1), -FCE("ꮌ", 1, 2, 1),FCE("Ѣ", 0, 3, 1),FCE("ѣ", 1, 3, 1),FCE("ᲇ", 2, 3, 1), -FCE("𑢦", 0, 2, 1),FCE("𑣆", 1, 2, 1),FCE("Ṋ", 0, 2, 1),FCE("ṋ", 1, 2, 1), -FCE("Ⅲ", 0, 2, 1),FCE("ⅲ", 1, 2, 1),FCE("Ổ", 0, 2, 1),FCE("ổ", 1, 2, 1), -FCE("Ⴊ", 0, 2, 1),FCE("ⴊ", 1, 2, 1),FCE("Ӭ", 0, 2, 1),FCE("ӭ", 1, 2, 1), -FCE("Ⰼ", 0, 2, 1),FCE("ⰼ", 1, 2, 1),FCE("Ꞛ", 0, 2, 1),FCE("ꞛ", 1, 2, 1), -FCE("Ӌ", 0, 2, 1),FCE("ӌ", 1, 2, 1),FCE("𐒽", 0, 2, 1),FCE("𐓥", 1, 2, 1), -FCE("Ͱ", 0, 2, 1),FCE("ͱ", 1, 2, 1),FCE("ῧ", 0, 2, 1),FCE("ῧ", 1, 2, 3), -FCE("𞤔", 0, 2, 1),FCE("𞤶", 1, 2, 1),FCE("Ϛ", 0, 2, 1),FCE("ϛ", 1, 2, 1), -FCE("ἵ", 0, 2, 1),FCE("Ἵ", 1, 2, 1),FCE("𖹑", 0, 2, 1),FCE("𖹱", 1, 2, 1), -FCE("Β", 0, 3, 1),FCE("β", 1, 3, 1),FCE("ϐ", 2, 3, 1),FCE("Ⲗ", 0, 2, 1), -FCE("ⲗ", 1, 2, 1),FCE("ᾥ", 0, 3, 1),FCE("ᾭ", 1, 3, 1),FCE("ὥι", 2, 3, 2), -FCE("Α", 0, 2, 1),FCE("α", 1, 2, 1),FCE("Դ", 0, 2, 1),FCE("դ", 1, 2, 1), -FCE("Л", 0, 2, 1),FCE("л", 1, 2, 1),FCE("Ꮯ", 0, 2, 1),FCE("ꮯ", 1, 2, 1), -FCE("Ⱜ", 0, 2, 1),FCE("ⱜ", 1, 2, 1),FCE("Ĥ", 0, 2, 1),FCE("ĥ", 1, 2, 1), -FCE("𐲢", 0, 2, 1),FCE("𐳢", 1, 2, 1),FCE("Ẍ", 0, 2, 1),FCE("ẍ", 1, 2, 1), -FCE("Ẵ", 0, 2, 1),FCE("ẵ", 1, 2, 1),FCE("Ŭ", 0, 2, 1),FCE("ŭ", 1, 2, 1), -FCE("Ḃ", 0, 2, 1),FCE("ḃ", 1, 2, 1),FCE("ƚ", 0, 2, 1),FCE("Ƚ", 1, 2, 1), -FCE("Ă", 0, 2, 1),FCE("ă", 1, 2, 1),FCE("ἔ", 0, 2, 1),FCE("Ἔ", 1, 2, 1), -FCE("H", 0, 2, 1),FCE("h", 1, 2, 1),FCE("𐲀", 0, 2, 1),FCE("𐳀", 1, 2, 1), -FCE("ხ", 0, 2, 1),FCE("Ხ", 1, 2, 1),FCE("ὕ", 0, 2, 1),FCE("Ὕ", 1, 2, 1), -FCE("Ꝼ", 0, 2, 1),FCE("ꝼ", 1, 2, 1),FCE("ῇ", 0, 2, 1),FCE("ῆι", 1, 2, 3), -FCE("Y", 0, 2, 1),FCE("y", 1, 2, 1),FCE("Ŋ", 0, 2, 1),FCE("ŋ", 1, 2, 1), -FCE("Ḥ", 0, 2, 1),FCE("ḥ", 1, 2, 1),FCE("Ꮍ", 0, 2, 1),FCE("ꮍ", 1, 2, 1), -FCE("Ⲽ", 0, 2, 1),FCE("ⲽ", 1, 2, 1),FCE("𐐍", 0, 2, 1),FCE("𐐵", 1, 2, 1), -FCE("𐖏", 0, 2, 1),FCE("𐖶", 1, 2, 1),FCE("𑢧", 0, 2, 1),FCE("𑣇", 1, 2, 1), -FCE("Ꙡ", 0, 2, 1),FCE("ꙡ", 1, 2, 1),FCE("Ԕ", 0, 2, 1),FCE("ԕ", 1, 2, 1), -FCE("Ԯ", 0, 2, 1),FCE("ԯ", 1, 2, 1),FCE("Ҥ", 0, 2, 1),FCE("ҥ", 1, 2, 1), -FCE("Ѐ", 0, 2, 1),FCE("ѐ", 1, 2, 1),FCE("𖹘", 0, 2, 1),FCE("𖹸", 1, 2, 1), -FCE("Ꙏ", 0, 2, 1),FCE("ꙏ", 1, 2, 1),FCE("N", 0, 2, 1),FCE("n", 1, 2, 1), -FCE("𐐌", 0, 2, 1),FCE("𐐴", 1, 2, 1),FCE("Û", 0, 2, 1),FCE("û", 1, 2, 1), -FCE("Ǎ", 0, 2, 1),FCE("ǎ", 1, 2, 1),FCE("შ", 0, 2, 1),FCE("Შ", 1, 2, 1), -FCE("Տ", 0, 2, 1),FCE("տ", 1, 2, 1),FCE("Ꜹ", 0, 2, 1),FCE("ꜹ", 1, 2, 1), -FCE("𖹟", 0, 2, 1),FCE("𖹿", 1, 2, 1),FCE("ᾦ", 0, 3, 1),FCE("ᾮ", 1, 3, 1), -FCE("ὦι", 2, 3, 2),FCE("𞤏", 0, 2, 1),FCE("𞤱", 1, 2, 1),FCE("Ⰷ", 0, 2, 1), -FCE("ⰷ", 1, 2, 1),FCE("Ⴃ", 0, 2, 1),FCE("ⴃ", 1, 2, 1),FCE("Ꞡ", 0, 2, 1), -FCE("ꞡ", 1, 2, 1),FCE("С", 0, 3, 1),FCE("с", 1, 3, 1),FCE("ᲃ", 2, 3, 1), -FCE("Ꚁ", 0, 2, 1),FCE("ꚁ", 1, 2, 1),FCE("ʂ", 0, 2, 1),FCE("Ʂ", 1, 2, 1), -FCE("ᵹ", 0, 2, 1),FCE("Ᵹ", 1, 2, 1),FCE("Ⓥ", 0, 2, 1),FCE("ⓥ", 1, 2, 1), -FCE("Ё", 0, 2, 1),FCE("ё", 1, 2, 1),FCE("Ꝙ", 0, 2, 1),FCE("ꝙ", 1, 2, 1), -FCE("X", 0, 2, 1),FCE("x", 1, 2, 1),FCE("Ɠ", 0, 2, 1),FCE("ɠ", 1, 2, 1), -FCE("𐲡", 0, 2, 1),FCE("𐳡", 1, 2, 1),FCE("Վ", 0, 2, 1),FCE("վ", 1, 2, 1), -FCE("Ɔ", 0, 2, 1),FCE("ɔ", 1, 2, 1),FCE("Ꮬ", 0, 2, 1),FCE("ꮬ", 1, 2, 1), -FCE("Ⓗ", 0, 2, 1),FCE("ⓗ", 1, 2, 1),FCE("Ƴ", 0, 2, 1),FCE("ƴ", 1, 2, 1), -FCE("Ꚗ", 0, 2, 1),FCE("ꚗ", 1, 2, 1),FCE("Ȗ", 0, 2, 1),FCE("ȗ", 1, 2, 1), -FCE("Ỏ", 0, 2, 1),FCE("ỏ", 1, 2, 1),FCE("Ⅸ", 0, 2, 1),FCE("ⅸ", 1, 2, 1), -FCE("ῆ", 0, 2, 1),FCE("ῆ", 1, 2, 2),FCE("Ⱂ", 0, 2, 1),FCE("ⱂ", 1, 2, 1), -FCE("Ⱟ", 0, 2, 1),FCE("ⱟ", 1, 2, 1),FCE("𞤎", 0, 2, 1),FCE("𞤰", 1, 2, 1), -FCE("𐲫", 0, 2, 1),FCE("𐳫", 1, 2, 1),FCE("Ẇ", 0, 2, 1),FCE("ẇ", 1, 2, 1), -FCE("В", 0, 3, 1),FCE("в", 1, 3, 1),FCE("ᲀ", 2, 3, 1),FCE("Ꮦ", 0, 2, 1), -FCE("ꮦ", 1, 2, 1),FCE("Ẻ", 0, 2, 1),FCE("ẻ", 1, 2, 1),FCE("𞤛", 0, 2, 1), -FCE("𞤽", 1, 2, 1),FCE("𐐚", 0, 2, 1),FCE("𐑂", 1, 2, 1),FCE("Ữ", 0, 2, 1), -FCE("ữ", 1, 2, 1),FCE("Q", 0, 2, 1),FCE("q", 1, 2, 1),FCE("Ꞽ", 0, 2, 1), -FCE("ꞽ", 1, 2, 1),FCE("Ǜ", 0, 2, 1),FCE("ǜ", 1, 2, 1),FCE("Ʀ", 0, 2, 1), -FCE("ʀ", 1, 2, 1),FCE("ἇ", 0, 2, 1),FCE("Ἇ", 1, 2, 1),FCE("𑢽", 0, 2, 1), -FCE("𑣝", 1, 2, 1),FCE("È", 0, 2, 1),FCE("è", 1, 2, 1),FCE("Ӓ", 0, 2, 1), -FCE("ӓ", 1, 2, 1),FCE("ს", 0, 2, 1),FCE("Ს", 1, 2, 1),FCE("Ꮇ", 0, 2, 1), -FCE("ꮇ", 1, 2, 1),FCE("𐖅", 0, 2, 1),FCE("𐖬", 1, 2, 1),FCE("𖹋", 0, 2, 1), -FCE("𖹫", 1, 2, 1),FCE("Ų", 0, 2, 1),FCE("ų", 1, 2, 1),FCE("Ҟ", 0, 2, 1), -FCE("ҟ", 1, 2, 1),FCE("Ӧ", 0, 2, 1),FCE("ӧ", 1, 2, 1),FCE("Ⴐ", 0, 2, 1), -FCE("ⴐ", 1, 2, 1),FCE("ẙ", 0, 2, 1),FCE("ẙ", 1, 2, 2),FCE("Ǯ", 0, 2, 1), -FCE("ǯ", 1, 2, 1),FCE("Ⲝ", 0, 2, 1),FCE("ⲝ", 1, 2, 1),FCE("𐒴", 0, 2, 1), -FCE("𐓜", 1, 2, 1),FCE("𐲇", 0, 2, 1),FCE("𐳇", 1, 2, 1),FCE("Ꮊ", 0, 2, 1), -FCE("ꮊ", 1, 2, 1),FCE("Ḑ", 0, 2, 1),FCE("ḑ", 1, 2, 1),FCE("Ȱ", 0, 2, 1), -FCE("ȱ", 1, 2, 1),FCE("Ш", 0, 2, 1),FCE("ш", 1, 2, 1),FCE("Ⳑ", 0, 2, 1), -FCE("ⳑ", 1, 2, 1),FCE("𑢠", 0, 2, 1),FCE("𑣀", 1, 2, 1),FCE("Ϡ", 0, 2, 1), -FCE("ϡ", 1, 2, 1),FCE("ῴ", 0, 2, 1),FCE("ώι", 1, 2, 2),FCE("Ꞁ", 0, 2, 1), -FCE("ꞁ", 1, 2, 1),FCE("ჵ", 0, 2, 1),FCE("Ჵ", 1, 2, 1),FCE("Ի", 0, 2, 1), -FCE("ի", 1, 2, 1),FCE("Õ", 0, 2, 1),FCE("õ", 1, 2, 1),FCE("𐖈", 0, 2, 1), -FCE("𐖯", 1, 2, 1),FCE("Д", 0, 3, 1),FCE("д", 1, 3, 1),FCE("ᲁ", 2, 3, 1), -FCE("ᾤ", 0, 3, 1),FCE("ᾬ", 1, 3, 1),FCE("ὤι", 2, 3, 2),FCE("Ī", 0, 2, 1), -FCE("ī", 1, 2, 1),FCE("R", 0, 2, 1),FCE("r", 1, 2, 1),FCE("Ⓑ", 0, 2, 1), -FCE("ⓑ", 1, 2, 1),FCE("𞤈", 0, 2, 1),FCE("𞤪", 1, 2, 1),FCE("Θ", 0, 4, 1), -FCE("θ", 1, 4, 1),FCE("ϑ", 2, 4, 1),FCE("ϴ", 3, 4, 1),FCE("Ȃ", 0, 2, 1), -FCE("ȃ", 1, 2, 1),FCE("ᾅ", 0, 3, 1),FCE("ᾍ", 1, 3, 1),FCE("ἅι", 2, 3, 2), -FCE("Ѱ", 0, 2, 1),FCE("ѱ", 1, 2, 1),FCE("ɱ", 0, 2, 1),FCE("Ɱ", 1, 2, 1), -FCE("Ⱋ", 0, 2, 1),FCE("ⱋ", 1, 2, 1),FCE("ffi", 0, 2, 1),FCE("ffi", 1, 2, 3), -FCE("Ҋ", 0, 2, 1),FCE("ҋ", 1, 2, 1),FCE("Ꝓ", 0, 2, 1),FCE("ꝓ", 1, 2, 1), -FCE("E", 0, 2, 1),FCE("e", 1, 2, 1),FCE("Ї", 0, 2, 1),FCE("ї", 1, 2, 1), -FCE("Á", 0, 2, 1),FCE("á", 1, 2, 1),FCE("Ṅ", 0, 2, 1),FCE("ṅ", 1, 2, 1), -FCE("ᾗ", 0, 3, 1),FCE("ᾟ", 1, 3, 1),FCE("ἧι", 2, 3, 2),FCE("Ո", 0, 2, 1), -FCE("ո", 1, 2, 1),FCE("Ȝ", 0, 2, 1),FCE("ȝ", 1, 2, 1),FCE("Ꮵ", 0, 2, 1), -FCE("ꮵ", 1, 2, 1),FCE("Ԛ", 0, 2, 1),FCE("ԛ", 1, 2, 1),FCE("Ⲷ", 0, 2, 1), -FCE("ⲷ", 1, 2, 1),FCE("Ꙕ", 0, 2, 1),FCE("ꙕ", 1, 2, 1),FCE("𐐃", 0, 2, 1), -FCE("𐐫", 1, 2, 1),FCE("Ṳ", 0, 2, 1),FCE("ṳ", 1, 2, 1),FCE("ე", 0, 2, 1), -FCE("Ე", 1, 2, 1),FCE("𐓁", 0, 2, 1),FCE("𐓩", 1, 2, 1),FCE("𐲊", 0, 2, 1), -FCE("𐳊", 1, 2, 1),FCE("Ḫ", 0, 2, 1),FCE("ḫ", 1, 2, 1),FCE("Ѣ", 0, 3, 1), -FCE("ѣ", 1, 3, 1),FCE("ᲇ", 2, 3, 1),FCE("ὶ", 0, 2, 1),FCE("Ὶ", 1, 2, 1), -FCE("S", 0, 3, 1),FCE("s", 1, 3, 1),FCE("ſ", 2, 3, 1),FCE("Ⱖ", 0, 2, 1), -FCE("ⱖ", 1, 2, 1),FCE("Ꭰ", 0, 2, 1),FCE("ꭰ", 1, 2, 1),FCE("Ϻ", 0, 2, 1), -FCE("ϻ", 1, 2, 1),FCE("Ӆ", 0, 2, 1),FCE("ӆ", 1, 2, 1),FCE("ᾒ", 0, 3, 1), -FCE("ᾚ", 1, 3, 1),FCE("ἢι", 2, 3, 2),FCE("Օ", 0, 2, 1),FCE("օ", 1, 2, 1), -FCE("Ꮸ", 0, 2, 1),FCE("ꮸ", 1, 2, 1),FCE("LJ", 0, 3, 1),FCE("Lj", 1, 3, 1), -FCE("lj", 2, 3, 1),FCE("ὂ", 0, 2, 1),FCE("Ὂ", 1, 2, 1),FCE("ὧ", 0, 2, 1), -FCE("Ὧ", 1, 2, 1),FCE("𐕼", 0, 2, 1),FCE("𐖣", 1, 2, 1),FCE("Ꞵ", 0, 2, 1), -FCE("ꞵ", 1, 2, 1),FCE("Ꚙ", 0, 2, 1),FCE("ꚙ", 1, 2, 1),FCE("𞤄", 0, 2, 1), -FCE("𞤦", 1, 2, 1),FCE("Ќ", 0, 2, 1),FCE("ќ", 1, 2, 1),FCE("ლ", 0, 2, 1), -FCE("Ლ", 1, 2, 1),FCE("ῖ", 0, 2, 1),FCE("ῖ", 1, 2, 2),FCE("Ð", 0, 2, 1), -FCE("ð", 1, 2, 1),FCE("𖹆", 0, 2, 1),FCE("𖹦", 1, 2, 1),FCE("Ể", 0, 2, 1), -FCE("ể", 1, 2, 1),FCE("Ǥ", 0, 2, 1),FCE("ǥ", 1, 2, 1),FCE("D", 0, 2, 1), -FCE("d", 1, 2, 1),FCE("Ž", 0, 2, 1),FCE("ž", 1, 2, 1),FCE("ἡ", 0, 2, 1), -FCE("Ἡ", 1, 2, 1),FCE("Y", 0, 2, 1),FCE("y", 1, 2, 1),FCE("Ꭼ", 0, 2, 1), -FCE("ꭼ", 1, 2, 1),FCE("և", 0, 2, 1),FCE("եւ", 1, 2, 2),FCE("ἀ", 0, 2, 1), -FCE("Ἀ", 1, 2, 1),FCE("Υ", 0, 2, 1),FCE("υ", 1, 2, 1),FCE("Ř", 0, 2, 1), -FCE("ř", 1, 2, 1),FCE("𐓏", 0, 2, 1),FCE("𐓷", 1, 2, 1),FCE("Ḻ", 0, 2, 1), -FCE("ḻ", 1, 2, 1),FCE("Ꜭ", 0, 2, 1),FCE("ꜭ", 1, 2, 1),FCE("𑢷", 0, 2, 1), -FCE("𑣗", 1, 2, 1),FCE("Ē", 0, 2, 1),FCE("ē", 1, 2, 1),FCE("Ḷ", 0, 2, 1), -FCE("ḷ", 1, 2, 1),FCE("𖹎", 0, 2, 1),FCE("𖹮", 1, 2, 1),FCE("ώ", 0, 2, 1), -FCE("Ώ", 1, 2, 1),FCE("Ҕ", 0, 2, 1),FCE("ҕ", 1, 2, 1),FCE("Ẁ", 0, 2, 1), -FCE("ẁ", 1, 2, 1),FCE("Ė", 0, 2, 1),FCE("ė", 1, 2, 1),FCE("Э", 0, 2, 1), -FCE("э", 1, 2, 1),FCE("Ᏺ", 0, 2, 1),FCE("ᏺ", 1, 2, 1),FCE("Ź", 0, 2, 1), -FCE("ź", 1, 2, 1),FCE("Ӛ", 0, 2, 1),FCE("ӛ", 1, 2, 1),FCE("Ⲩ", 0, 2, 1), -FCE("ⲩ", 1, 2, 1),FCE("Ì", 0, 2, 1),FCE("ì", 1, 2, 1),FCE("Ƣ", 0, 2, 1), -FCE("ƣ", 1, 2, 1),FCE("Ρ", 0, 3, 1),FCE("ρ", 1, 3, 1),FCE("ϱ", 2, 3, 1), -FCE("Ṽ", 0, 2, 1),FCE("ṽ", 1, 2, 1),FCE("Ꮟ", 0, 2, 1),FCE("ꮟ", 1, 2, 1), -FCE("𐐒", 0, 2, 1),FCE("𐐺", 1, 2, 1),FCE("Ԡ", 0, 2, 1),FCE("ԡ", 1, 2, 1), -FCE("Ⱌ", 0, 2, 1),FCE("ⱌ", 1, 2, 1),FCE("ɫ", 0, 2, 1),FCE("Ɫ", 1, 2, 1), -FCE("ﬔ", 0, 2, 1),FCE("մե", 1, 2, 2),FCE("Ŝ", 0, 2, 1),FCE("ŝ", 1, 2, 1), -FCE("Ꙓ", 0, 2, 1),FCE("ꙓ", 1, 2, 1),FCE("F", 0, 2, 1),FCE("f", 1, 2, 1), -FCE("Ǩ", 0, 2, 1),FCE("ǩ", 1, 2, 1),FCE("Ⴖ", 0, 2, 1),FCE("ⴖ", 1, 2, 1), -FCE("Ꙗ", 0, 2, 1),FCE("ꙗ", 1, 2, 1),FCE("Ԝ", 0, 2, 1),FCE("ԝ", 1, 2, 1), -FCE("Ꮓ", 0, 2, 1),FCE("ꮓ", 1, 2, 1),FCE("𐖑", 0, 2, 1),FCE("𐖸", 1, 2, 1), -FCE("𐓋", 0, 2, 1),FCE("𐓳", 1, 2, 1),FCE("Ệ", 0, 2, 1),FCE("ệ", 1, 2, 1), -FCE("Ǡ", 0, 2, 1),FCE("ǡ", 1, 2, 1),FCE("ὣ", 0, 2, 1),FCE("Ὣ", 1, 2, 1), -FCE("Ⰱ", 0, 2, 1),FCE("ⰱ", 1, 2, 1),FCE("𞤀", 0, 2, 1),FCE("𞤢", 1, 2, 1), -FCE("Ṹ", 0, 2, 1),FCE("ṹ", 1, 2, 1),FCE("Ⓨ", 0, 2, 1),FCE("ⓨ", 1, 2, 1), -FCE("Ꝫ", 0, 2, 1),FCE("ꝫ", 1, 2, 1),FCE("Ě", 0, 2, 1),FCE("ě", 1, 2, 1), -FCE("Щ", 0, 2, 1),FCE("щ", 1, 2, 1),FCE("ᾄ", 0, 3, 1),FCE("ᾌ", 1, 3, 1), -FCE("ἄι", 2, 3, 2),FCE("ზ", 0, 2, 1),FCE("Ზ", 1, 2, 1),FCE("ᾱ", 0, 2, 1), -FCE("Ᾱ", 1, 2, 1),FCE("Ꝣ", 0, 2, 1),FCE("ꝣ", 1, 2, 1),FCE("𐲲", 0, 2, 1), -FCE("𐳲", 1, 2, 1),FCE("Ⱐ", 0, 2, 1),FCE("ⱐ", 1, 2, 1),FCE("Ⴞ", 0, 2, 1), -FCE("ⴞ", 1, 2, 1),FCE("𐐞", 0, 2, 1),FCE("𐑆", 1, 2, 1),FCE("ῷ", 0, 2, 1), -FCE("ῶι", 1, 2, 3),FCE("Ӣ", 0, 2, 1),FCE("ӣ", 1, 2, 1),FCE("ᾐ", 0, 3, 1), -FCE("ᾘ", 1, 3, 1),FCE("ἠι", 2, 3, 2),FCE("Ӟ", 0, 2, 1),FCE("ӟ", 1, 2, 1), -FCE("ᾔ", 0, 3, 1),FCE("ᾜ", 1, 3, 1),FCE("ἤι", 2, 3, 2),FCE("Ձ", 0, 2, 1), -FCE("ձ", 1, 2, 1),FCE("Յ", 0, 2, 1),FCE("յ", 1, 2, 1),FCE("ἥ", 0, 2, 1), -FCE("Ἥ", 1, 2, 1),FCE("Ŕ", 0, 2, 1),FCE("ŕ", 1, 2, 1),FCE("Ⱔ", 0, 2, 1), -FCE("ⱔ", 1, 2, 1),FCE("Ꮺ", 0, 2, 1),FCE("ꮺ", 1, 2, 1),FCE("Ɓ", 0, 2, 1), -FCE("ɓ", 1, 2, 1),FCE("Σ", 0, 3, 1),FCE("ς", 1, 3, 1),FCE("σ", 2, 3, 1), -FCE("𑢳", 0, 2, 1),FCE("𑣓", 1, 2, 1),FCE("Ⴚ", 0, 2, 1),FCE("ⴚ", 1, 2, 1), -FCE("ƀ", 0, 2, 1),FCE("Ƀ", 1, 2, 1),FCE("Ḿ", 0, 2, 1),FCE("ḿ", 1, 2, 1), -FCE("ჿ", 0, 2, 1),FCE("Ჿ", 1, 2, 1),FCE("ῳ", 0, 3, 1),FCE("ῼ", 1, 3, 1), -FCE("ωι", 2, 3, 2),FCE("გ", 0, 2, 1),FCE("Გ", 1, 2, 1),FCE("Ꝯ", 0, 2, 1), -FCE("ꝯ", 1, 2, 1),FCE("𐲈", 0, 2, 1),FCE("𐳈", 1, 2, 1),FCE("ᲈ", 0, 3, 1), -FCE("Ꙋ", 1, 3, 1),FCE("ꙋ", 2, 3, 1),FCE("Ⴒ", 0, 2, 1),FCE("ⴒ", 1, 2, 1), -FCE("Ꮗ", 0, 2, 1),FCE("ꮗ", 1, 2, 1),FCE("Ԙ", 0, 2, 1),FCE("ԙ", 1, 2, 1), -FCE("Ꝧ", 0, 2, 1),FCE("ꝧ", 1, 2, 1),FCE("Ǭ", 0, 2, 1),FCE("ǭ", 1, 2, 1), -FCE("𐓃", 0, 2, 1),FCE("𐓫", 1, 2, 1),FCE("𐕴", 0, 2, 1),FCE("𐖛", 1, 2, 1), -FCE("Ꮾ", 0, 2, 1),FCE("ꮾ", 1, 2, 1),FCE("𞤜", 0, 2, 1),FCE("𞤾", 1, 2, 1), -FCE("ტ", 0, 2, 1),FCE("Ტ", 1, 2, 1),FCE("Ⰵ", 0, 2, 1),FCE("ⰵ", 1, 2, 1), -FCE("Ҡ", 0, 2, 1),FCE("ҡ", 1, 2, 1),FCE("Ṃ", 0, 2, 1),FCE("ṃ", 1, 2, 1), -FCE("Ꮄ", 0, 2, 1),FCE("ꮄ", 1, 2, 1),FCE("𑢿", 0, 2, 1),FCE("𑣟", 1, 2, 1), -FCE("Ő", 0, 2, 1),FCE("ő", 1, 2, 1),FCE("ὖ", 0, 2, 1),FCE("ὖ", 1, 2, 3), -FCE("Ⲱ", 0, 2, 1),FCE("ⲱ", 1, 2, 1),FCE("Ꭴ", 0, 2, 1),FCE("ꭴ", 1, 2, 1), -FCE("Ӂ", 0, 2, 1),FCE("ӂ", 1, 2, 1),FCE("NJ", 0, 3, 1),FCE("Nj", 1, 3, 1), -FCE("nj", 2, 3, 1),FCE("L", 0, 2, 1),FCE("l", 1, 2, 1),FCE("𐓇", 0, 2, 1), -FCE("𐓯", 1, 2, 1),FCE("𖹚", 0, 2, 1),FCE("𖹺", 1, 2, 1),FCE("Ȣ", 0, 2, 1), -FCE("ȣ", 1, 2, 1),FCE("Ґ", 0, 2, 1),FCE("ґ", 1, 2, 1),FCE("Ⳳ", 0, 2, 1), -FCE("ⳳ", 1, 2, 1),FCE("𐖕", 0, 2, 1),FCE("𐖼", 1, 2, 1),FCE("Խ", 0, 2, 1), -FCE("խ", 1, 2, 1),FCE("Έ", 0, 2, 1),FCE("έ", 1, 2, 1),FCE("Չ", 0, 2, 1), -FCE("չ", 1, 2, 1),FCE("Ꮲ", 0, 2, 1),FCE("ꮲ", 1, 2, 1),FCE("𖹊", 0, 2, 1), -FCE("𖹪", 1, 2, 1),FCE("Ỽ", 0, 2, 1),FCE("ỽ", 1, 2, 1),FCE("ᾐ", 0, 3, 1), -FCE("ᾘ", 1, 3, 1),FCE("ἠι", 2, 3, 2),FCE("Ӗ", 0, 2, 1),FCE("ӗ", 1, 2, 1), -FCE("Ꞹ", 0, 2, 1),FCE("ꞹ", 1, 2, 1),FCE("Д", 0, 3, 1),FCE("д", 1, 3, 1), -FCE("ᲁ", 2, 3, 1),FCE("𐲭", 0, 2, 1),FCE("𐳭", 1, 2, 1),FCE("ჷ", 0, 2, 1), -FCE("Ჷ", 1, 2, 1),FCE("𖹕", 0, 2, 1),FCE("𖹵", 1, 2, 1),FCE("Ꜩ", 0, 2, 1), -FCE("ꜩ", 1, 2, 1),FCE("Ḁ", 0, 2, 1),FCE("ḁ", 1, 2, 1),FCE("Ȳ", 0, 2, 1), -FCE("ȳ", 1, 2, 1),FCE("Ⴅ", 0, 2, 1),FCE("ⴅ", 1, 2, 1),FCE("ἕ", 0, 2, 1), -FCE("Ἕ", 1, 2, 1),FCE("Ω", 0, 3, 1),FCE("ω", 1, 3, 1),FCE("Ω", 2, 3, 1), -FCE("Ļ", 0, 2, 1),FCE("ļ", 1, 2, 1),FCE("Ј", 0, 2, 1),FCE("ј", 1, 2, 1), -FCE("Ü", 0, 2, 1),FCE("ü", 1, 2, 1),FCE("Ế", 0, 2, 1),FCE("ế", 1, 2, 1), -FCE("Ⱈ", 0, 2, 1),FCE("ⱈ", 1, 2, 1),FCE("Ꞩ", 0, 2, 1),FCE("ꞩ", 1, 2, 1), -FCE("Ⅻ", 0, 2, 1),FCE("ⅻ", 1, 2, 1),FCE("Ⱀ", 0, 2, 1),FCE("ⱀ", 1, 2, 1), -FCE("Ⳟ", 0, 2, 1),FCE("ⳟ", 1, 2, 1),FCE("ʞ", 0, 2, 1),FCE("Ʞ", 1, 2, 1), -FCE("Ô", 0, 2, 1),FCE("ô", 1, 2, 1),FCE("ჯ", 0, 2, 1),FCE("Ჯ", 1, 2, 1), -FCE("Ց", 0, 2, 1),FCE("ց", 1, 2, 1),FCE("Ꮪ", 0, 2, 1),FCE("ꮪ", 1, 2, 1), -FCE("Ե", 0, 2, 1),FCE("ե", 1, 2, 1),FCE("ᾠ", 0, 3, 1),FCE("ᾨ", 1, 3, 1), -FCE("ὠι", 2, 3, 2),FCE("Ⓠ", 0, 2, 1),FCE("ⓠ", 1, 2, 1),FCE("А", 0, 2, 1), -FCE("а", 1, 2, 1),FCE("Ặ", 0, 2, 1),FCE("ặ", 1, 2, 1),FCE("ᾄ", 0, 3, 1), -FCE("ᾌ", 1, 3, 1),FCE("ἄι", 2, 3, 2),FCE("𐐖", 0, 2, 1),FCE("𐐾", 1, 2, 1), -FCE("𖹂", 0, 2, 1),FCE("𖹢", 1, 2, 1),FCE("Ť", 0, 2, 1),FCE("ť", 1, 2, 1), -FCE("Ⲡ", 0, 2, 1),FCE("ⲡ", 1, 2, 1),FCE("Ḯ", 0, 2, 1),FCE("ḯ", 1, 2, 1), -FCE("𐲕", 0, 2, 1),FCE("𐳕", 1, 2, 1),FCE("Ҙ", 0, 2, 1),FCE("ҙ", 1, 2, 1), -FCE("Ċ", 0, 2, 1),FCE("ċ", 1, 2, 1),FCE("𐲝", 0, 2, 1),FCE("𐳝", 1, 2, 1), -FCE("𑢪", 0, 2, 1),FCE("𑣊", 1, 2, 1),FCE("Ẉ", 0, 2, 1),FCE("ẉ", 1, 2, 1), -FCE("Ԩ", 0, 2, 1),FCE("ԩ", 1, 2, 1),FCE("Ꮧ", 0, 2, 1),FCE("ꮧ", 1, 2, 1), -FCE("Ꙛ", 0, 2, 1),FCE("ꙛ", 1, 2, 1),FCE("Ȫ", 0, 2, 1),FCE("ȫ", 1, 2, 1), -FCE("ᾥ", 0, 3, 1),FCE("ᾭ", 1, 3, 1),FCE("ὥι", 2, 3, 2),FCE("𐒳", 0, 2, 1), -FCE("𐓛", 1, 2, 1),FCE("𞤌", 0, 2, 1),FCE("𞤮", 1, 2, 1),FCE("Ⓕ", 0, 2, 1), -FCE("ⓕ", 1, 2, 1),FCE("Ǵ", 0, 2, 1),FCE("ǵ", 1, 2, 1),FCE("Ꚑ", 0, 2, 1), -FCE("ꚑ", 1, 2, 1),FCE("I", 0, 2, 1),FCE("i", 1, 2, 1),FCE("Ⱶ", 0, 2, 1), -FCE("ⱶ", 1, 2, 1),FCE("Ⲹ", 0, 2, 1),FCE("ⲹ", 1, 2, 1),FCE("𐐁", 0, 2, 1), -FCE("𐐩", 1, 2, 1),FCE("Ⰽ", 0, 2, 1),FCE("ⰽ", 1, 2, 1),FCE("𐓐", 0, 2, 1), -FCE("𐓸", 1, 2, 1),FCE("𞤓", 0, 2, 1),FCE("𞤵", 1, 2, 1),FCE("Ư", 0, 2, 1), -FCE("ư", 1, 2, 1),FCE("Ꟈ", 0, 2, 1),FCE("ꟈ", 1, 2, 1),FCE("Ꮏ", 0, 2, 1), -FCE("ꮏ", 1, 2, 1),FCE("𐐂", 0, 2, 1),FCE("𐐪", 1, 2, 1),FCE("ც", 0, 2, 1), -FCE("Ც", 1, 2, 1),FCE("𐒿", 0, 2, 1),FCE("𐓧", 1, 2, 1),FCE("𐖍", 0, 2, 1), -FCE("𐖴", 1, 2, 1),FCE("Ⅴ", 0, 2, 1),FCE("ⅴ", 1, 2, 1),FCE("Ǝ", 0, 2, 1), -FCE("ǝ", 1, 2, 1),FCE("Ǔ", 0, 2, 1),FCE("ǔ", 1, 2, 1),FCE("ἐ", 0, 2, 1), -FCE("Ἐ", 1, 2, 1),FCE("ὗ", 0, 2, 1),FCE("Ὗ", 1, 2, 1),FCE("Ồ", 0, 2, 1), -FCE("ồ", 1, 2, 1),FCE("J", 0, 2, 1),FCE("j", 1, 2, 1),FCE("Ḅ", 0, 2, 1), -FCE("ḅ", 1, 2, 1),FCE("Ӯ", 0, 2, 1),FCE("ӯ", 1, 2, 1),FCE("Ⲕ", 0, 2, 1), -FCE("ⲕ", 1, 2, 1),FCE("À", 0, 2, 1),FCE("à", 1, 2, 1),FCE("ῦ", 0, 2, 1), -FCE("ῦ", 1, 2, 2),FCE("Ꮫ", 0, 2, 1),FCE("ꮫ", 1, 2, 1),FCE("Ʋ", 0, 2, 1), -FCE("ʋ", 1, 2, 1),FCE("𐐦", 0, 2, 1),FCE("𐑎", 1, 2, 1),FCE("Ꙣ", 0, 2, 1), -FCE("ꙣ", 1, 2, 1),FCE("T", 0, 2, 1),FCE("t", 1, 2, 1),FCE("Ֆ", 0, 2, 1), -FCE("ֆ", 1, 2, 1),FCE("Ъ", 0, 3, 1),FCE("ъ", 1, 3, 1),FCE("ᲆ", 2, 3, 1), -FCE("𐐢", 0, 2, 1),FCE("𐑊", 1, 2, 1),FCE("ἶ", 0, 2, 1),FCE("Ἶ", 1, 2, 1), -FCE("ᾡ", 0, 3, 1),FCE("ᾩ", 1, 3, 1),FCE("ὡι", 2, 3, 2),FCE("Ӎ", 0, 2, 1), -FCE("ӎ", 1, 2, 1),FCE("𐒻", 0, 2, 1),FCE("𐓣", 1, 2, 1),FCE("Ȼ", 0, 2, 1), -FCE("ȼ", 1, 2, 1),FCE("Ǐ", 0, 2, 1),FCE("ǐ", 1, 2, 1),FCE("Ԍ", 0, 2, 1), -FCE("ԍ", 1, 2, 1),FCE("Ꙇ", 0, 2, 1),FCE("ꙇ", 1, 2, 1),FCE("Ṇ", 0, 2, 1), -FCE("ṇ", 1, 2, 1),FCE("𐲦", 0, 2, 1),FCE("𐳦", 1, 2, 1),FCE("Ꝺ", 0, 2, 1), -FCE("ꝺ", 1, 2, 1),FCE("V", 0, 2, 1),FCE("v", 1, 2, 1),FCE("𑢢", 0, 2, 1), -FCE("𑣂", 1, 2, 1),FCE("Ӫ", 0, 2, 1),FCE("ӫ", 1, 2, 1),FCE("Н", 0, 2, 1), -FCE("н", 1, 2, 1),FCE("ꞔ", 0, 2, 1),FCE("Ꞔ", 1, 2, 1),FCE("Ꚉ", 0, 2, 1), -FCE("ꚉ", 1, 2, 1),FCE("Ẳ", 0, 2, 1),FCE("ẳ", 1, 2, 1),FCE("Ⅰ", 0, 2, 1), -FCE("ⅰ", 1, 2, 1),FCE("Ỗ", 0, 2, 1),FCE("ỗ", 1, 2, 1),FCE("Ⓝ", 0, 2, 1), -FCE("ⓝ", 1, 2, 1),FCE("𖹞", 0, 2, 1),FCE("𖹾", 1, 2, 1),FCE("Ҭ", 0, 2, 1), -FCE("ҭ", 1, 2, 1),FCE("𖹒", 0, 2, 1),FCE("𖹲", 1, 2, 1),FCE("Ⱦ", 0, 2, 1), -FCE("ⱦ", 1, 2, 1),FCE("Ⲵ", 0, 2, 1),FCE("ⲵ", 1, 2, 1),FCE("M", 0, 2, 1), -FCE("m", 1, 2, 1),FCE("Ō", 0, 2, 1),FCE("ō", 1, 2, 1),FCE("Ḣ", 0, 2, 1), -FCE("ḣ", 1, 2, 1),FCE("Ꮋ", 0, 2, 1),FCE("ꮋ", 1, 2, 1),FCE("Ń", 0, 2, 1), -FCE("ń", 1, 2, 1),FCE("ffl", 0, 2, 1),FCE("ffl", 1, 2, 3),FCE("𐖁", 0, 2, 1), -FCE("𐖨", 1, 2, 1),FCE("Ű", 0, 2, 1),FCE("ű", 1, 2, 1),FCE("Ẕ", 0, 2, 1), -FCE("ẕ", 1, 2, 1),FCE("ῂ", 0, 2, 1),FCE("ὴι", 1, 2, 2),FCE("Ⱘ", 0, 2, 1), -FCE("ⱘ", 1, 2, 1),FCE("𞤐", 0, 2, 1),FCE("𞤲", 1, 2, 1),FCE("𐐎", 0, 2, 1), -FCE("𐐶", 1, 2, 1),FCE("ᾃ", 0, 3, 1),FCE("ᾋ", 1, 3, 1),FCE("ἃι", 2, 3, 2), -FCE("Ꞙ", 0, 2, 1),FCE("ꞙ", 1, 2, 1),FCE("Ꮈ", 0, 2, 1),FCE("ꮈ", 1, 2, 1), -FCE("Ṱ", 0, 2, 1),FCE("ṱ", 1, 2, 1),FCE("Т", 0, 4, 1),FCE("т", 1, 4, 1), -FCE("ᲄ", 2, 4, 1),FCE("ᲅ", 3, 4, 1),FCE("𐲅", 0, 2, 1),FCE("𐳅", 1, 2, 1), -FCE("Ắ", 0, 2, 1),FCE("ắ", 1, 2, 1),FCE("Ģ", 0, 2, 1),FCE("ģ", 1, 2, 1), -FCE("𐒲", 0, 2, 1),FCE("𐓚", 1, 2, 1),FCE("𐲌", 0, 2, 1),FCE("𐳌", 1, 2, 1), -FCE("𐐅", 0, 2, 1),FCE("𐐭", 1, 2, 1),FCE("ᾇ", 0, 3, 1),FCE("ᾏ", 1, 3, 1), -FCE("ἇι", 2, 3, 2),FCE("Р", 0, 2, 1),FCE("р", 1, 2, 1),FCE("Ʈ", 0, 2, 1), -FCE("ʈ", 1, 2, 1),FCE("Ț", 0, 2, 1),FCE("ț", 1, 2, 1),FCE("Ό", 0, 2, 1), -FCE("ό", 1, 2, 1),FCE("ᾕ", 0, 3, 1),FCE("ᾝ", 1, 3, 1),FCE("ἥι", 2, 3, 2), -FCE("ͅ", 0, 4, 1),FCE("Ι", 1, 4, 1),FCE("ι", 2, 4, 1),FCE("ι", 3, 4, 1), -FCE("Ɗ", 0, 2, 1),FCE("ɗ", 1, 2, 1),FCE("ΐ", 0, 3, 1),FCE("ΐ", 1, 3, 1), -FCE("ΐ", 2, 3, 3),FCE("Ⴑ", 0, 2, 1),FCE("ⴑ", 1, 2, 1),FCE("Ğ", 0, 2, 1), -FCE("ğ", 1, 2, 1),FCE("Ḉ", 0, 2, 1),FCE("ḉ", 1, 2, 1),FCE("Ⲑ", 0, 2, 1), -FCE("ⲑ", 1, 2, 1),FCE("Ꟁ", 0, 2, 1),FCE("ꟁ", 1, 2, 1),FCE("Ꮷ", 0, 2, 1), -FCE("ꮷ", 1, 2, 1),FCE("𐖀", 0, 2, 1),FCE("𐖧", 1, 2, 1),FCE("М", 0, 2, 1), -FCE("м", 1, 2, 1),FCE("ſt", 0, 3, 1),FCE("st", 1, 3, 1),FCE("st", 2, 3, 2), -FCE("Ꞥ", 0, 2, 1),FCE("ꞥ", 1, 2, 1),FCE("Ṵ", 0, 2, 1),FCE("ṵ", 1, 2, 1), -FCE("Ⱄ", 0, 2, 1),FCE("ⱄ", 1, 2, 1),FCE("𞤍", 0, 2, 1),FCE("𞤯", 1, 2, 1), -FCE("Ꭵ", 0, 2, 1),FCE("ꭵ", 1, 2, 1),FCE("ჳ", 0, 2, 1),FCE("Ჳ", 1, 2, 1), -FCE("Ⓔ", 0, 2, 1),FCE("ⓔ", 1, 2, 1),FCE("Ŀ", 0, 2, 1),FCE("ŀ", 1, 2, 1), -FCE("Ν", 0, 2, 1),FCE("ν", 1, 2, 1),FCE("Ⳣ", 0, 2, 1),FCE("ⳣ", 1, 2, 1), -FCE("Ⴁ", 0, 2, 1),FCE("ⴁ", 1, 2, 1),FCE("Ԉ", 0, 2, 1),FCE("ԉ", 1, 2, 1), -FCE("M", 0, 2, 1),FCE("m", 1, 2, 1),FCE("Ή", 0, 2, 1),FCE("ή", 1, 2, 1), -FCE("Ҍ", 0, 2, 1),FCE("ҍ", 1, 2, 1),FCE("Ⰴ", 0, 2, 1),FCE("ⰴ", 1, 2, 1), -FCE("Ⅿ", 0, 2, 1),FCE("ⅿ", 1, 2, 1),FCE("Ұ", 0, 2, 1),FCE("ұ", 1, 2, 1), -FCE("Ⳓ", 0, 2, 1),FCE("ⳓ", 1, 2, 1),FCE("Ꜵ", 0, 2, 1),FCE("ꜵ", 1, 2, 1), -FCE("fi", 0, 2, 1),FCE("fi", 1, 2, 2),FCE("P", 0, 2, 1),FCE("p", 1, 2, 1), -FCE("Š", 0, 2, 1),FCE("š", 1, 2, 1),FCE("𐖄", 0, 2, 1),FCE("𐖫", 1, 2, 1), -FCE("Ḳ", 0, 2, 1),FCE("ḳ", 1, 2, 1),FCE("𐲩", 0, 2, 1),FCE("𐳩", 1, 2, 1), -FCE("Ȁ", 0, 2, 1),FCE("ȁ", 1, 2, 1),FCE("𑢫", 0, 2, 1),FCE("𑣋", 1, 2, 1), -FCE("Ꞇ", 0, 2, 1),FCE("ꞇ", 1, 2, 1),FCE("𑢻", 0, 2, 1),FCE("𑣛", 1, 2, 1), -FCE("𑢮", 0, 2, 1),FCE("𑣎", 1, 2, 1),FCE("Ȟ", 0, 2, 1),FCE("ȟ", 1, 2, 1), -FCE("Ϊ", 0, 2, 1),FCE("ϊ", 1, 2, 1),FCE("Ⴢ", 0, 2, 1),FCE("ⴢ", 1, 2, 1), -FCE("Ꮔ", 0, 2, 1),FCE("ꮔ", 1, 2, 1),FCE("Թ", 0, 2, 1),FCE("թ", 1, 2, 1), -FCE("Ꝋ", 0, 2, 1),FCE("ꝋ", 1, 2, 1),FCE("Ã", 0, 2, 1),FCE("ã", 1, 2, 1), -FCE("Ѯ", 0, 2, 1),FCE("ѯ", 1, 2, 1),FCE("Ս", 0, 2, 1),FCE("ս", 1, 2, 1), -FCE("ῢ", 0, 2, 1),FCE("ῢ", 1, 2, 3),FCE("უ", 0, 2, 1),FCE("Უ", 1, 2, 1), -FCE("ὒ", 0, 2, 1),FCE("ὒ", 1, 2, 3),FCE("Ϟ", 0, 2, 1),FCE("ϟ", 1, 2, 1), -FCE("Ⓤ", 0, 2, 1),FCE("ⓤ", 1, 2, 1),FCE("ͅ", 0, 4, 1),FCE("Ι", 1, 4, 1), -FCE("ι", 2, 4, 1),FCE("ι", 3, 4, 1),FCE("𐲙", 0, 2, 1),FCE("𐳙", 1, 2, 1), -FCE("Ꝛ", 0, 2, 1),FCE("ꝛ", 1, 2, 1),FCE("Й", 0, 2, 1),FCE("й", 1, 2, 1), -FCE("Ⰹ", 0, 2, 1),FCE("ⰹ", 1, 2, 1),FCE("ͽ", 0, 2, 1),FCE("Ͽ", 1, 2, 1), -FCE("ἦ", 0, 2, 1),FCE("Ἦ", 1, 2, 1),FCE("𑢲", 0, 2, 1),FCE("𑣒", 1, 2, 1), -FCE("Ↄ", 0, 2, 1),FCE("ↄ", 1, 2, 1),FCE("Ⱓ", 0, 2, 1),FCE("ⱓ", 1, 2, 1), -FCE("IJ", 0, 2, 1),FCE("ij", 1, 2, 1),FCE("Ṗ", 0, 2, 1),FCE("ṗ", 1, 2, 1), -FCE("Ⴎ", 0, 2, 1),FCE("ⴎ", 1, 2, 1),FCE("Ꝁ", 0, 2, 1),FCE("ꝁ", 1, 2, 1), -FCE("Ý", 0, 2, 1),FCE("ý", 1, 2, 1),FCE("ღ", 0, 2, 1),FCE("Ღ", 1, 2, 1), -FCE("Ṡ", 0, 3, 1),FCE("ṡ", 1, 3, 1),FCE("ẛ", 2, 3, 1),FCE("Ѹ", 0, 2, 1), -FCE("ѹ", 1, 2, 1),FCE("Ȯ", 0, 2, 1),FCE("ȯ", 1, 2, 1),FCE("ῶ", 0, 2, 1), -FCE("ῶ", 1, 2, 2),FCE("ῒ", 0, 2, 1),FCE("ῒ", 1, 2, 3),FCE("Ꚕ", 0, 2, 1), -FCE("ꚕ", 1, 2, 1),FCE("Ԭ", 0, 2, 1),FCE("ԭ", 1, 2, 1),FCE("𐕰", 0, 2, 1), -FCE("𐖗", 1, 2, 1),FCE("Ꙧ", 0, 2, 1),FCE("ꙧ", 1, 2, 1),FCE("ǰ", 0, 2, 1), -FCE("ǰ", 1, 2, 2),FCE("𐲖", 0, 2, 1),FCE("𐳖", 1, 2, 1),FCE("Ȋ", 0, 2, 1), -FCE("ȋ", 1, 2, 1),FCE("Ⓙ", 0, 2, 1),FCE("ⓙ", 1, 2, 1),FCE("Ꮛ", 0, 2, 1), -FCE("ꮛ", 1, 2, 1),FCE("𐲜", 0, 2, 1),FCE("𐳜", 1, 2, 1),FCE("О", 0, 3, 1), -FCE("о", 1, 3, 1),FCE("ᲂ", 2, 3, 1),FCE("Ẅ", 0, 2, 1),FCE("ẅ", 1, 2, 1), -FCE("Ự", 0, 2, 1),FCE("ự", 1, 2, 1),FCE("Ꭸ", 0, 2, 1),FCE("ꭸ", 1, 2, 1), -FCE("𖹙", 0, 2, 1),FCE("𖹹", 1, 2, 1),FCE("Ⲥ", 0, 2, 1),FCE("ⲥ", 1, 2, 1), -FCE("Ꜥ", 0, 2, 1),FCE("ꜥ", 1, 2, 1),FCE("Ҝ", 0, 2, 1),FCE("ҝ", 1, 2, 1), -FCE("Ď", 0, 2, 1),FCE("ď", 1, 2, 1),FCE("ᾤ", 0, 3, 1),FCE("ᾬ", 1, 3, 1), -FCE("ὤι", 2, 3, 2),FCE("𐓓", 0, 2, 1),FCE("𐓻", 1, 2, 1),FCE("𞤃", 0, 2, 1), -FCE("𞤥", 1, 2, 1),FCE("Ƒ", 0, 2, 1),FCE("ƒ", 1, 2, 1),FCE("ᾀ", 0, 3, 1), -FCE("ᾈ", 1, 3, 1),FCE("ἀι", 2, 3, 2),FCE("Ꮮ", 0, 2, 1),FCE("ꮮ", 1, 2, 1), -FCE("Π", 0, 3, 1),FCE("π", 1, 3, 1),FCE("ϖ", 2, 3, 1),FCE("Ꭽ", 0, 2, 1), -FCE("ꭽ", 1, 2, 1),FCE("Ȇ", 0, 2, 1),FCE("ȇ", 1, 2, 1),FCE("ὅ", 0, 2, 1), -FCE("Ὅ", 1, 2, 1),FCE("Ϫ", 0, 2, 1),FCE("ϫ", 1, 2, 1),FCE("Ⴛ", 0, 2, 1), -FCE("ⴛ", 1, 2, 1),FCE("Ѵ", 0, 2, 1),FCE("ѵ", 1, 2, 1),FCE("X", 0, 2, 1), -FCE("x", 1, 2, 1),FCE("Ӿ", 0, 2, 1),FCE("ӿ", 1, 2, 1),FCE("Ⲅ", 0, 2, 1), -FCE("ⲅ", 1, 2, 1),FCE("𐐓", 0, 2, 1),FCE("𐐻", 1, 2, 1),FCE("ῗ", 0, 2, 1), -FCE("ῗ", 1, 2, 3),FCE("Ṝ", 0, 2, 1),FCE("ṝ", 1, 2, 1),FCE("Ụ", 0, 2, 1), -FCE("ụ", 1, 2, 1),FCE("Ⳉ", 0, 2, 1),FCE("ⳉ", 1, 2, 1),FCE("Ⱏ", 0, 2, 1), -FCE("ⱏ", 1, 2, 1),FCE("Һ", 0, 2, 1),FCE("һ", 1, 2, 1),FCE("𐓎", 0, 2, 1), -FCE("𐓶", 1, 2, 1),FCE("𞤅", 0, 2, 1),FCE("𞤧", 1, 2, 1),FCE("Ñ", 0, 2, 1), -FCE("ñ", 1, 2, 1),FCE("Ѳ", 0, 2, 1),FCE("ѳ", 1, 2, 1),FCE("𑢶", 0, 2, 1), -FCE("𑣖", 1, 2, 1),FCE("ὸ", 0, 2, 1),FCE("Ὸ", 1, 2, 1),FCE("C", 0, 2, 1), -FCE("c", 1, 2, 1),FCE("Ả", 0, 2, 1),FCE("ả", 1, 2, 1),FCE("ἤ", 0, 2, 1), -FCE("Ἤ", 1, 2, 1),FCE("Ɲ", 0, 2, 1),FCE("ɲ", 1, 2, 1),FCE("Ҷ", 0, 2, 1), -FCE("ҷ", 1, 2, 1),FCE("ß", 0, 3, 1),FCE("ẞ", 1, 3, 1),FCE("ss", 2, 3, 2), -FCE("ᾇ", 0, 3, 1),FCE("ᾏ", 1, 3, 1),FCE("ἇι", 2, 3, 2),FCE("Ḕ", 0, 2, 1), -FCE("ḕ", 1, 2, 1),FCE("Ủ", 0, 2, 1),FCE("ủ", 1, 2, 1),FCE("Ћ", 0, 2, 1), -FCE("ћ", 1, 2, 1),FCE("Љ", 0, 2, 1),FCE("љ", 1, 2, 1),FCE("𐕽", 0, 2, 1), -FCE("𐖤", 1, 2, 1),FCE("Ψ", 0, 2, 1),FCE("ψ", 1, 2, 1),FCE("Ṛ", 0, 2, 1), -FCE("ṛ", 1, 2, 1),FCE("𐕿", 0, 2, 1),FCE("𐖦", 1, 2, 1),FCE("Մ", 0, 2, 1), -FCE("մ", 1, 2, 1),FCE("ჾ", 0, 2, 1),FCE("Ჾ", 1, 2, 1),FCE("Ḓ", 0, 2, 1), -FCE("ḓ", 1, 2, 1),FCE("Ⴙ", 0, 2, 1),FCE("ⴙ", 1, 2, 1),FCE("G", 0, 2, 1), -FCE("g", 1, 2, 1),FCE("Ӽ", 0, 2, 1),FCE("ӽ", 1, 2, 1),FCE("𐲒", 0, 2, 1), -FCE("𐳒", 1, 2, 1),FCE("Ⲇ", 0, 2, 1),FCE("ⲇ", 1, 2, 1),FCE("Ḛ", 0, 2, 1), -FCE("ḛ", 1, 2, 1),FCE("𐲐", 0, 2, 1),FCE("𐳐", 1, 2, 1),FCE("Ⴟ", 0, 2, 1), -FCE("ⴟ", 1, 2, 1),FCE("Ꮚ", 0, 2, 1),FCE("ꮚ", 1, 2, 1),FCE("𖹉", 0, 2, 1), -FCE("𖹩", 1, 2, 1),FCE("A", 0, 2, 1),FCE("a", 1, 2, 1),FCE("Ƽ", 0, 2, 1), -FCE("ƽ", 1, 2, 1),FCE("Ừ", 0, 2, 1),FCE("ừ", 1, 2, 1),FCE("Ԃ", 0, 2, 1), -FCE("ԃ", 1, 2, 1),FCE("Ɉ", 0, 2, 1),FCE("ɉ", 1, 2, 1),FCE("ᾕ", 0, 3, 1), -FCE("ᾝ", 1, 3, 1),FCE("ἥι", 2, 3, 2),FCE("ჟ", 0, 2, 1),FCE("Ჟ", 1, 2, 1), -FCE("DŽ", 0, 3, 1),FCE("Dž", 1, 3, 1),FCE("dž", 2, 3, 1),FCE("Ն", 0, 2, 1), -FCE("ն", 1, 2, 1),FCE("Ꮿ", 0, 2, 1),FCE("ꮿ", 1, 2, 1),FCE("Ⳍ", 0, 2, 1), -FCE("ⳍ", 1, 2, 1),FCE("თ", 0, 2, 1),FCE("Თ", 1, 2, 1),FCE("Ꭷ", 0, 2, 1), -FCE("ꭷ", 1, 2, 1),FCE("Ѻ", 0, 2, 1),FCE("ѻ", 1, 2, 1),FCE("Ĵ", 0, 2, 1), -FCE("ĵ", 1, 2, 1),FCE("Ъ", 0, 3, 1),FCE("ъ", 1, 3, 1),FCE("ᲆ", 2, 3, 1), -FCE("Ⱉ", 0, 2, 1),FCE("ⱉ", 1, 2, 1),FCE("Ȅ", 0, 2, 1),FCE("ȅ", 1, 2, 1), -FCE("ɜ", 0, 2, 1),FCE("Ɜ", 1, 2, 1),FCE("Ⓩ", 0, 2, 1),FCE("ⓩ", 1, 2, 1), -FCE("Ṕ", 0, 2, 1),FCE("ṕ", 1, 2, 1),FCE("𐕹", 0, 2, 1),FCE("𐖠", 1, 2, 1), -FCE("Պ", 0, 2, 1),FCE("պ", 1, 2, 1),FCE("Ꚅ", 0, 2, 1),FCE("ꚅ", 1, 2, 1), -FCE("G", 0, 2, 1),FCE("g", 1, 2, 1),FCE("ἅ", 0, 2, 1),FCE("Ἅ", 1, 2, 1), -FCE("ﬓ", 0, 2, 1),FCE("մն", 1, 2, 2),FCE("Ⅎ", 0, 2, 1),FCE("ⅎ", 1, 2, 1), -FCE("Ɍ", 0, 2, 1),FCE("ɍ", 1, 2, 1),FCE("Ꮅ", 0, 2, 1),FCE("ꮅ", 1, 2, 1), -FCE("Ⳇ", 0, 2, 1),FCE("ⳇ", 1, 2, 1),FCE("𐐈", 0, 2, 1),FCE("𐐰", 1, 2, 1), -FCE("Ⱍ", 0, 2, 1),FCE("ⱍ", 1, 2, 1),FCE("ȿ", 0, 2, 1),FCE("Ȿ", 1, 2, 1), -FCE("Ꝃ", 0, 2, 1),FCE("ꝃ", 1, 2, 1),FCE("Ṣ", 0, 2, 1),FCE("ṣ", 1, 2, 1), -FCE("𐲨", 0, 2, 1),FCE("𐳨", 1, 2, 1),FCE("µ", 0, 3, 1),FCE("Μ", 1, 3, 1), -FCE("μ", 2, 3, 1),FCE("ᾁ", 0, 3, 1),FCE("ᾉ", 1, 3, 1),FCE("ἁι", 2, 3, 2), -FCE("𐲚", 0, 2, 1),FCE("𐳚", 1, 2, 1),FCE("Į", 0, 2, 1),FCE("į", 1, 2, 1), -FCE("Ѓ", 0, 2, 1),FCE("ѓ", 1, 2, 1),FCE("Ǿ", 0, 2, 1),FCE("ǿ", 1, 2, 1), -FCE("ͅ", 0, 4, 1),FCE("Ι", 1, 4, 1),FCE("ι", 2, 4, 1),FCE("ι", 3, 4, 1), -FCE("Ŵ", 0, 2, 1),FCE("ŵ", 1, 2, 1),FCE("Ϗ", 0, 2, 1),FCE("ϗ", 1, 2, 1), -FCE("Ⓧ", 0, 2, 1),FCE("ⓧ", 1, 2, 1),FCE("ᾳ", 0, 3, 1),FCE("ᾼ", 1, 3, 1), -FCE("αι", 2, 3, 2),FCE("𑢭", 0, 2, 1),FCE("𑣍", 1, 2, 1),FCE("Ꝅ", 0, 2, 1), -FCE("ꝅ", 1, 2, 1),FCE("Ù", 0, 2, 1),FCE("ù", 1, 2, 1),FCE("Ḍ", 0, 2, 1), -FCE("ḍ", 1, 2, 1),FCE("Ⱇ", 0, 2, 1),FCE("ⱇ", 1, 2, 1),FCE("Ϣ", 0, 2, 1), -FCE("ϣ", 1, 2, 1),FCE("ɬ", 0, 2, 1),FCE("Ɬ", 1, 2, 1),FCE("Ꝗ", 0, 2, 1), -FCE("ꝗ", 1, 2, 1),FCE("Ѕ", 0, 2, 1),FCE("ѕ", 1, 2, 1),FCE("Ɨ", 0, 2, 1), -FCE("ɨ", 1, 2, 1),FCE("ὠ", 0, 2, 1),FCE("Ὠ", 1, 2, 1),FCE("Ử", 0, 2, 1), -FCE("ử", 1, 2, 1),FCE("Ⲍ", 0, 2, 1),FCE("ⲍ", 1, 2, 1),FCE("ჲ", 0, 2, 1), -FCE("Ჲ", 1, 2, 1),FCE("𐒶", 0, 2, 1),FCE("𐓞", 1, 2, 1),FCE("𞤝", 0, 2, 1), -FCE("𞤿", 1, 2, 1),FCE("𐐊", 0, 2, 1),FCE("𐐲", 1, 2, 1),FCE("Ꮖ", 0, 2, 1), -FCE("ꮖ", 1, 2, 1),FCE("𖹁", 0, 2, 1),FCE("𖹡", 1, 2, 1),FCE("Ф", 0, 2, 1), -FCE("ф", 1, 2, 1),FCE("Ʃ", 0, 2, 1),FCE("ʃ", 1, 2, 1),FCE("Κ", 0, 3, 1), -FCE("κ", 1, 3, 1),FCE("ϰ", 2, 3, 1),FCE("ქ", 0, 2, 1),FCE("Ქ", 1, 2, 1), -FCE("𐓈", 0, 2, 1),FCE("𐓰", 1, 2, 1),FCE("𐐇", 0, 2, 1),FCE("𐐯", 1, 2, 1), -FCE("Ꮠ", 0, 2, 1),FCE("ꮠ", 1, 2, 1),FCE("ᾢ", 0, 3, 1),FCE("ᾪ", 1, 3, 1), -FCE("ὢι", 2, 3, 2),FCE("Ѭ", 0, 2, 1),FCE("ѭ", 1, 2, 1),FCE("Ⴀ", 0, 2, 1), -FCE("ⴀ", 1, 2, 1),FCE("Ꞃ", 0, 2, 1),FCE("ꞃ", 1, 2, 1),FCE("Å", 0, 3, 1), -FCE("å", 1, 3, 1),FCE("Å", 2, 3, 1),FCE("Ҵ", 0, 2, 1),FCE("ҵ", 1, 2, 1), -FCE("Ⳏ", 0, 2, 1),FCE("ⳏ", 1, 2, 1),FCE("ῲ", 0, 2, 1),FCE("ὼι", 1, 2, 2), -FCE("A", 0, 2, 1),FCE("a", 1, 2, 1),FCE("Ꜻ", 0, 2, 1),FCE("ꜻ", 1, 2, 1), -FCE("𐒹", 0, 2, 1),FCE("𐓡", 1, 2, 1),FCE("Ấ", 0, 2, 1),FCE("ấ", 1, 2, 1), -FCE("Ώ", 0, 2, 1),FCE("ώ", 1, 2, 1),FCE("Ⓘ", 0, 2, 1),FCE("ⓘ", 1, 2, 1), -FCE("ΰ", 0, 3, 1),FCE("ΰ", 1, 3, 1),FCE("ΰ", 2, 3, 3),FCE("I", 0, 2, 1), -FCE("i", 1, 2, 1),FCE("𞤟", 0, 2, 1),FCE("𞥁", 1, 2, 1),FCE("Ɇ", 0, 2, 1), -FCE("ɇ", 1, 2, 1),FCE("έ", 0, 2, 1),FCE("Έ", 1, 2, 1),FCE("Ⱨ", 0, 2, 1), -FCE("ⱨ", 1, 2, 1),FCE("Ⅶ", 0, 2, 1),FCE("ⅶ", 1, 2, 1),FCE("Ā", 0, 2, 1), -FCE("ā", 1, 2, 1),FCE("Ϥ", 0, 2, 1),FCE("ϥ", 1, 2, 1),FCE("Ꮢ", 0, 2, 1), -FCE("ꮢ", 1, 2, 1),FCE("Ꞟ", 0, 2, 1),FCE("ꞟ", 1, 2, 1),FCE("ᾠ", 0, 3, 1), -FCE("ᾨ", 1, 3, 1),FCE("ὠι", 2, 3, 2),FCE("𐲱", 0, 2, 1),FCE("𐳱", 1, 2, 1), -FCE("𖹝", 0, 2, 1),FCE("𖹽", 1, 2, 1),FCE("Ⴡ", 0, 2, 1),FCE("ⴡ", 1, 2, 1), -FCE("Ꟶ", 0, 2, 1),FCE("ꟶ", 1, 2, 1),FCE("Ꮎ", 0, 2, 1),FCE("ꮎ", 1, 2, 1), -FCE("Ь", 0, 2, 1),FCE("ь", 1, 2, 1),FCE("ῄ", 0, 2, 1),FCE("ήι", 1, 2, 2), -FCE("ო", 0, 2, 1),FCE("Ო", 1, 2, 1),FCE("ᾓ", 0, 3, 1),FCE("ᾛ", 1, 3, 1), -FCE("ἣι", 2, 3, 2),FCE("Ɏ", 0, 2, 1),FCE("ɏ", 1, 2, 1),FCE("Ҽ", 0, 2, 1), -FCE("ҽ", 1, 2, 1),FCE("Ŷ", 0, 2, 1),FCE("ŷ", 1, 2, 1),FCE("Ꭻ", 0, 2, 1), -FCE("ꭻ", 1, 2, 1),FCE("Ꮱ", 0, 2, 1),FCE("ꮱ", 1, 2, 1),FCE("Ԅ", 0, 2, 1), -FCE("ԅ", 1, 2, 1),FCE("ἃ", 0, 2, 1),FCE("Ἃ", 1, 2, 1),FCE("Ꚇ", 0, 2, 1), -FCE("ꚇ", 1, 2, 1),FCE("Ռ", 0, 2, 1),FCE("ռ", 1, 2, 1),FCE("𖹏", 0, 2, 1), -FCE("𖹯", 1, 2, 1),FCE("ძ", 0, 2, 1),FCE("Ძ", 1, 2, 1),FCE("Ꮩ", 0, 2, 1), -FCE("ꮩ", 1, 2, 1),FCE("Ⱥ", 0, 2, 1),FCE("ⱥ", 1, 2, 1),FCE("Ҩ", 0, 2, 1), -FCE("ҩ", 1, 2, 1),FCE("Ⳛ", 0, 2, 1),FCE("ⳛ", 1, 2, 1),FCE("О", 0, 3, 1), -FCE("о", 1, 3, 1),FCE("ᲂ", 2, 3, 1),FCE("ᾁ", 0, 3, 1),FCE("ᾉ", 1, 3, 1), -FCE("ἁι", 2, 3, 2),FCE("Δ", 0, 2, 1),FCE("δ", 1, 2, 1),FCE("Ⱳ", 0, 2, 1), -FCE("ⱳ", 1, 2, 1),FCE("Ԑ", 0, 2, 1),FCE("ԑ", 1, 2, 1),FCE("Ḧ", 0, 2, 1), -FCE("ḧ", 1, 2, 1),FCE("Ꙃ", 0, 2, 1),FCE("ꙃ", 1, 2, 1),FCE("Ӊ", 0, 2, 1), -FCE("ӊ", 1, 2, 1),FCE("Ň", 0, 2, 1),FCE("ň", 1, 2, 1),FCE("Ằ", 0, 2, 1), -FCE("ằ", 1, 2, 1),FCE("Ꝟ", 0, 2, 1),FCE("ꝟ", 1, 2, 1),FCE("𐖌", 0, 2, 1), -FCE("𐖳", 1, 2, 1),FCE("Ꜽ", 0, 2, 1),FCE("ꜽ", 1, 2, 1),FCE("𐓑", 0, 2, 1), -FCE("𐓹", 1, 2, 1),FCE("𐓒", 0, 2, 1),FCE("𐓺", 1, 2, 1),FCE("𐖐", 0, 2, 1), -FCE("𐖷", 1, 2, 1),FCE("U", 0, 2, 1),FCE("u", 1, 2, 1),FCE("ἑ", 0, 2, 1), -FCE("Ἑ", 1, 2, 1),FCE("ͻ", 0, 2, 1),FCE("Ͻ", 1, 2, 1),FCE("ἱ", 0, 2, 1), -FCE("Ἱ", 1, 2, 1),FCE("Ⲻ", 0, 2, 1),FCE("ⲻ", 1, 2, 1),FCE("Ւ", 0, 2, 1), -FCE("ւ", 1, 2, 1),FCE("ῃ", 0, 3, 1),FCE("ῌ", 1, 3, 1),FCE("ηι", 2, 3, 2), -FCE("Ṯ", 0, 2, 1),FCE("ṯ", 1, 2, 1),FCE("Ⅷ", 0, 2, 1),FCE("ⅷ", 1, 2, 1), -FCE("Þ", 0, 2, 1),FCE("þ", 1, 2, 1),FCE("Ɛ", 0, 2, 1),FCE("ɛ", 1, 2, 1), -FCE("Ꚍ", 0, 2, 1),FCE("ꚍ", 1, 2, 1),FCE("Ỹ", 0, 2, 1),FCE("ỹ", 1, 2, 1), -FCE("𐒰", 0, 2, 1),FCE("𐓘", 1, 2, 1),FCE("𐲎", 0, 2, 1),FCE("𐳎", 1, 2, 1), -FCE("Ⰸ", 0, 2, 1),FCE("ⰸ", 1, 2, 1),FCE("Ů", 0, 2, 1),FCE("ů", 1, 2, 1), -FCE("𖹜", 0, 2, 1),FCE("𖹼", 1, 2, 1),FCE("Ⴭ", 0, 2, 1),FCE("ⴭ", 1, 2, 1), -FCE("ύ", 0, 2, 1),FCE("Ύ", 1, 2, 1),FCE("Ẑ", 0, 2, 1),FCE("ẑ", 1, 2, 1), -FCE("Ꮃ", 0, 2, 1),FCE("ꮃ", 1, 2, 1),FCE("Ǒ", 0, 2, 1),FCE("ǒ", 1, 2, 1), -FCE("ὓ", 0, 2, 1),FCE("Ὓ", 1, 2, 1),FCE("Ħ", 0, 2, 1),FCE("ħ", 1, 2, 1), -FCE("Ṉ", 0, 2, 1),FCE("ṉ", 1, 2, 1),FCE("Ⲙ", 0, 2, 1),FCE("ⲙ", 1, 2, 1), -FCE("𐐀", 0, 2, 1),FCE("𐐨", 1, 2, 1),FCE("ᾣ", 0, 3, 1),FCE("ᾫ", 1, 3, 1), -FCE("ὣι", 2, 3, 2),FCE("𑢹", 0, 2, 1),FCE("𑣙", 1, 2, 1),FCE("Ꮀ", 0, 2, 1), -FCE("ꮀ", 1, 2, 1),FCE("Ộ", 0, 2, 1),FCE("ộ", 1, 2, 1),FCE("𐲤", 0, 2, 1), -FCE("𐳤", 1, 2, 1),FCE("ὴ", 0, 2, 1),FCE("Ὴ", 1, 2, 1),FCE("Т", 0, 4, 1), -FCE("т", 1, 4, 1),FCE("ᲄ", 2, 4, 1),FCE("ᲅ", 3, 4, 1),FCE("Ỳ", 0, 2, 1), -FCE("ỳ", 1, 2, 1),FCE("Ⅱ", 0, 2, 1),FCE("ⅱ", 1, 2, 1),FCE("𐐠", 0, 2, 1), -FCE("𐑈", 1, 2, 1),FCE("DZ", 0, 3, 1),FCE("Dz", 1, 3, 1),FCE("dz", 2, 3, 1), -FCE("Ǘ", 0, 2, 1),FCE("ǘ", 1, 2, 1),FCE("Ꚋ", 0, 2, 1),FCE("ꚋ", 1, 2, 1), -FCE("Ϸ", 0, 2, 1),FCE("ϸ", 1, 2, 1),FCE("U", 0, 2, 1),FCE("u", 1, 2, 1), -FCE("Ϝ", 0, 2, 1),FCE("ϝ", 1, 2, 1),FCE("𐲍", 0, 2, 1),FCE("𐳍", 1, 2, 1), -FCE("И", 0, 2, 1),FCE("и", 1, 2, 1),FCE("Ȓ", 0, 2, 1),FCE("ȓ", 1, 2, 1), -FCE("Ӱ", 0, 2, 1),FCE("ӱ", 1, 2, 1),FCE("Ⓛ", 0, 2, 1),FCE("ⓛ", 1, 2, 1), -FCE("Ԋ", 0, 2, 1),FCE("ԋ", 1, 2, 1),FCE("𞤗", 0, 2, 1),FCE("𞤹", 1, 2, 1), -FCE("Ꙅ", 0, 2, 1),FCE("ꙅ", 1, 2, 1),FCE("Է", 0, 2, 1),FCE("է", 1, 2, 1), -FCE("Ⴌ", 0, 2, 1),FCE("ⴌ", 1, 2, 1),FCE("Ⴍ", 0, 2, 1),FCE("ⴍ", 1, 2, 1), -FCE("Ⓡ", 0, 2, 1),FCE("ⓡ", 1, 2, 1),FCE("Ѡ", 0, 2, 1),FCE("ѡ", 1, 2, 1), -FCE("Ⱛ", 0, 2, 1),FCE("ⱛ", 1, 2, 1),FCE("𖹖", 0, 2, 1),FCE("𖹶", 1, 2, 1), -FCE("Ⴧ", 0, 2, 1),FCE("ⴧ", 1, 2, 1),FCE("ſt", 0, 3, 1),FCE("st", 1, 3, 1), -FCE("st", 2, 3, 2),FCE("Ⳕ", 0, 2, 1),FCE("ⳕ", 1, 2, 1),FCE("ჱ", 0, 2, 1), -FCE("Ჱ", 1, 2, 1),FCE("ὺ", 0, 2, 1),FCE("Ὺ", 1, 2, 1),FCE("Ⰻ", 0, 2, 1), -FCE("ⰻ", 1, 2, 1),FCE("T", 0, 2, 1),FCE("t", 1, 2, 1),FCE("𐐆", 0, 2, 1), -FCE("𐐮", 1, 2, 1),FCE("З", 0, 2, 1),FCE("з", 1, 2, 1),FCE("𑢺", 0, 2, 1), -FCE("𑣚", 1, 2, 1),FCE("ᾂ", 0, 3, 1),FCE("ᾊ", 1, 3, 1),FCE("ἂι", 2, 3, 2), -FCE("DZ", 0, 3, 1),FCE("Dz", 1, 3, 1),FCE("dz", 2, 3, 1),FCE("Ε", 0, 3, 1), -FCE("ε", 1, 3, 1),FCE("ϵ", 2, 3, 1),FCE("Ʒ", 0, 2, 1),FCE("ʒ", 1, 2, 1), -FCE("Ə", 0, 2, 1),FCE("ə", 1, 2, 1),FCE("Ը", 0, 2, 1),FCE("ը", 1, 2, 1), -FCE("Ꙫ", 0, 2, 1),FCE("ꙫ", 1, 2, 1),FCE("ἲ", 0, 2, 1),FCE("Ἲ", 1, 2, 1), -FCE("𐐡", 0, 2, 1),FCE("𐑉", 1, 2, 1),FCE("Ԫ", 0, 2, 1),FCE("ԫ", 1, 2, 1), -FCE("Х", 0, 2, 1),FCE("х", 1, 2, 1),FCE("Ꞅ", 0, 2, 1),FCE("ꞅ", 1, 2, 1), -FCE("O", 0, 2, 1),FCE("o", 1, 2, 1),FCE("Ꙥ", 0, 2, 1),FCE("ꙥ", 1, 2, 1), -FCE("ᾢ", 0, 3, 1),FCE("ᾪ", 1, 3, 1),FCE("ὢι", 2, 3, 2),FCE("𐒱", 0, 2, 1), -FCE("𐓙", 1, 2, 1),FCE("Ä", 0, 2, 1),FCE("ä", 1, 2, 1),FCE("𐲥", 0, 2, 1), -FCE("𐳥", 1, 2, 1),FCE("Ẫ", 0, 2, 1),FCE("ẫ", 1, 2, 1),FCE("Ꮨ", 0, 2, 1), -FCE("ꮨ", 1, 2, 1),FCE("ß", 0, 3, 1),FCE("ẞ", 1, 3, 1),FCE("ss", 2, 3, 2), -FCE("ფ", 0, 2, 1),FCE("Ფ", 1, 2, 1),FCE("Ø", 0, 2, 1),FCE("ø", 1, 2, 1), -FCE("NJ", 0, 3, 1),FCE("Nj", 1, 3, 1),FCE("nj", 2, 3, 1),FCE("ბ", 0, 2, 1), -FCE("Ბ", 1, 2, 1),FCE("𐕵", 0, 2, 1),FCE("𐖜", 1, 2, 1),FCE("Ⅼ", 0, 2, 1), -FCE("ⅼ", 1, 2, 1),FCE("Ⰲ", 0, 2, 1),FCE("ⰲ", 1, 2, 1),FCE("𖹛", 0, 2, 1), -FCE("𖹻", 1, 2, 1),FCE("Ꟙ", 0, 2, 1),FCE("ꟙ", 1, 2, 1),FCE("B", 0, 2, 1), -FCE("b", 1, 2, 1),FCE("Є", 0, 2, 1),FCE("є", 1, 2, 1),FCE("Ⴓ", 0, 2, 1), -FCE("ⴓ", 1, 2, 1),FCE("Ị", 0, 2, 1),FCE("ị", 1, 2, 1),FCE("𐐉", 0, 2, 1), -FCE("𐐱", 1, 2, 1),FCE("𞤘", 0, 2, 1),FCE("𞤺", 1, 2, 1),FCE("Ӷ", 0, 2, 1), -FCE("ӷ", 1, 2, 1),FCE("Ⳁ", 0, 2, 1),FCE("ⳁ", 1, 2, 1),FCE("Ḡ", 0, 2, 1), -FCE("ḡ", 1, 2, 1),FCE("ff", 0, 2, 1),FCE("ff", 1, 2, 2),FCE("𐒷", 0, 2, 1), -FCE("𐓟", 1, 2, 1),FCE("Λ", 0, 2, 1),FCE("λ", 1, 2, 1),FCE("Ɩ", 0, 2, 1), -FCE("ɩ", 1, 2, 1),FCE("Ⱕ", 0, 2, 1),FCE("ⱕ", 1, 2, 1),FCE("Ꞑ", 0, 2, 1), -FCE("ꞑ", 1, 2, 1),FCE("Ꝥ", 0, 2, 1),FCE("ꝥ", 1, 2, 1),FCE("Ȍ", 0, 2, 1), -FCE("ȍ", 1, 2, 1),FCE("ᾔ", 0, 3, 1),FCE("ᾜ", 1, 3, 1),FCE("ἤι", 2, 3, 2), -FCE("𑢰", 0, 2, 1),FCE("𑣐", 1, 2, 1),FCE("Ƃ", 0, 2, 1),FCE("ƃ", 1, 2, 1), -FCE("Ⲭ", 0, 2, 1),FCE("ⲭ", 1, 2, 1),FCE("ᾀ", 0, 3, 1),FCE("ᾈ", 1, 3, 1), -FCE("ἀι", 2, 3, 2),FCE("Ⓦ", 0, 2, 1),FCE("ⓦ", 1, 2, 1),FCE("ɑ", 0, 2, 1), -FCE("Ɑ", 1, 2, 1),FCE("Ҁ", 0, 2, 1),FCE("ҁ", 1, 2, 1),FCE("ὔ", 0, 2, 1), -FCE("ὔ", 1, 2, 3),FCE("Ⓒ", 0, 2, 1),FCE("ⓒ", 1, 2, 1),FCE("Ջ", 0, 2, 1), -FCE("ջ", 1, 2, 1),FCE("Ꭺ", 0, 2, 1),FCE("ꭺ", 1, 2, 1),FCE("K", 0, 3, 1), -FCE("k", 1, 3, 1),FCE("K", 2, 3, 1),FCE("ɡ", 0, 2, 1),FCE("Ɡ", 1, 2, 1), -FCE("Ł", 0, 2, 1),FCE("ł", 1, 2, 1),FCE("Κ", 0, 3, 1),FCE("κ", 1, 3, 1), -FCE("ϰ", 2, 3, 1),FCE("ჸ", 0, 2, 1),FCE("Ჸ", 1, 2, 1),FCE("𐓄", 0, 2, 1), -FCE("𐓬", 1, 2, 1),FCE("Ɖ", 0, 2, 1),FCE("ɖ", 1, 2, 1),FCE("პ", 0, 2, 1), -FCE("Პ", 1, 2, 1),FCE("Ṩ", 0, 2, 1),FCE("ṩ", 1, 2, 1),FCE("Ꮶ", 0, 2, 1), -FCE("ꮶ", 1, 2, 1),FCE("ἄ", 0, 2, 1),FCE("Ἄ", 1, 2, 1),FCE("𐕸", 0, 2, 1), -FCE("𐖟", 1, 2, 1),FCE("Б", 0, 2, 1),FCE("б", 1, 2, 1),FCE("𐒺", 0, 2, 1), -FCE("𐓢", 1, 2, 1),FCE("Ѧ", 0, 2, 1),FCE("ѧ", 1, 2, 1),FCE("Ꜷ", 0, 2, 1), -FCE("ꜷ", 1, 2, 1),FCE("ῤ", 0, 2, 1),FCE("ῤ", 1, 2, 2),FCE("Ë", 0, 2, 1), -FCE("ë", 1, 2, 1),FCE("Ⴠ", 0, 2, 1),FCE("ⴠ", 1, 2, 1),FCE("𐐧", 0, 2, 1), -FCE("𐑏", 1, 2, 1),FCE("Ǟ", 0, 2, 1),FCE("ǟ", 1, 2, 1),FCE("Ⲓ", 0, 2, 1), -FCE("ⲓ", 1, 2, 1),FCE("Ć", 0, 2, 1),FCE("ć", 1, 2, 1),FCE("Ṏ", 0, 2, 1), -FCE("ṏ", 1, 2, 1),FCE("Ы", 0, 2, 1),FCE("ы", 1, 2, 1),FCE("Ꝉ", 0, 2, 1), -FCE("ꝉ", 1, 2, 1),FCE("Ⱁ", 0, 2, 1),FCE("ⱁ", 1, 2, 1),FCE("Ꭓ", 0, 2, 1), -FCE("ꭓ", 1, 2, 1),FCE("Ծ", 0, 2, 1),FCE("ծ", 1, 2, 1),FCE("Ŏ", 0, 2, 1), -FCE("ŏ", 1, 2, 1),FCE("Ꮣ", 0, 2, 1),FCE("ꮣ", 1, 2, 1),FCE("Ԥ", 0, 2, 1), -FCE("ԥ", 1, 2, 1),FCE("Ꙟ", 0, 2, 1),FCE("ꙟ", 1, 2, 1),FCE("Ǹ", 0, 2, 1), -FCE("ǹ", 1, 2, 1),FCE("Ү", 0, 2, 1),FCE("ү", 1, 2, 1),FCE("Ꝿ", 0, 2, 1), -FCE("ꝿ", 1, 2, 1),FCE("Π", 0, 3, 1),FCE("π", 1, 3, 1),FCE("ϖ", 2, 3, 1), -FCE("ɥ", 0, 2, 1),FCE("Ɥ", 1, 2, 1),FCE("ᾶ", 0, 2, 1),FCE("ᾶ", 1, 2, 2), -FCE("ᾡ", 0, 3, 1),FCE("ᾩ", 1, 3, 1),FCE("ὡι", 2, 3, 2),FCE("Ở", 0, 2, 1), -FCE("ở", 1, 2, 1),FCE("Ꮉ", 0, 2, 1),FCE("ꮉ", 1, 2, 1),FCE("Ũ", 0, 2, 1), -FCE("ũ", 1, 2, 1),FCE("Ȧ", 0, 2, 1),FCE("ȧ", 1, 2, 1),FCE("Ᏹ", 0, 2, 1), -FCE("ᏹ", 1, 2, 1),FCE("Ḇ", 0, 2, 1),FCE("ḇ", 1, 2, 1),FCE("Ġ", 0, 2, 1), -FCE("ġ", 1, 2, 1),FCE("𐐝", 0, 2, 1),FCE("𐑅", 1, 2, 1),FCE("𐖂", 0, 2, 1), -FCE("𐖩", 1, 2, 1),FCE("ὦ", 0, 2, 1),FCE("Ὦ", 1, 2, 1),FCE("ẖ", 0, 2, 1), -FCE("ẖ", 1, 2, 2),FCE("Ⴆ", 0, 2, 1),FCE("ⴆ", 1, 2, 1),FCE("𐲑", 0, 2, 1), -FCE("𐳑", 1, 2, 1),FCE("ᶎ", 0, 2, 1),FCE("Ᶎ", 1, 2, 1),FCE("𐲄", 0, 2, 1), -FCE("𐳄", 1, 2, 1),FCE("K", 0, 2, 1),FCE("k", 1, 2, 1),FCE("𑢣", 0, 2, 1), -FCE("𑣃", 1, 2, 1),FCE("H", 0, 2, 1),FCE("h", 1, 2, 1),FCE("Ꮜ", 0, 2, 1), -FCE("ꮜ", 1, 2, 1),FCE("𞤞", 0, 2, 1),FCE("𞥀", 1, 2, 1),FCE("Ύ", 0, 2, 1), -FCE("ύ", 1, 2, 1),FCE("Ա", 0, 2, 1),FCE("ա", 1, 2, 1),]; -return t; +static immutable ulong[] t = x" +001E90B000000021001E92D0000001210010CAE0000000210010CEE00000012100004960000000210000497000000121 +001E911000000021001E933000000121000A722000000021000A7230000001210001F790000000210001FF9000000121 +0001F440000000210001F4C000000121000015A000000021000015B00000012100010FD0000000210001CBD000000121 +0010D610000000210010D810000001210001E380000000210001E39000000121000FB16000000021000057E576000122 +0016E4C0000000210016E6C0000001210001F230000000210001F2B000000121001E921000000021001E943000000121 +00001A000000002100001A100000012100003A300000003100003C200000013100003C300000023100004DC000000021 +00004DD0000001210002CA60000000210002CA7000000121000017B000000021000017C000000121001E906000000021 +001E92800000012100010DC0000000210001C9C00000012100104CD00000002100104F50000001210001F65000000021 +0001F6D000000121000051E000000021000051F00000012100010D80000000210001C980000001210002C1A000000021 +0002C4A000000121000027D0000000210002C64000000121000A69A000000021000A69B0000001210001F02000000021 +0001F0A000000121000052200000002100005230000001210002C600000000210002C610000001210001FB7000000021 +00003B13423B9123000A650000000021000A651000000121000A65C000000021000A65D0000001210002C1E000000021 +0002C4E0000001210001FB30000000310001FBC00000013100003B13B900023200013C9000000021000AB99000000121 +00013CD000000021000AB9D00000012100000CE00000002100000EE0000001210001E7E0000000210001E7F000000121 +0010414000000021001043C00000012100013F000000002100013F80000001210001EC40000000210001EC5000000121 +000A78B000000021000A78C00000012100001140000000210000115000000121000042F000000021000044F000000121 +001E902000000021001E92400000012100004D800000002100004D90000001210002CAA0000000210002CAB000000121 +00001100000000210000111000000121000049200000002100004930000001210001E340000000210001E35000000121 +00013F400000002100013FC000000121000022400000002100002250000001210002CA20000000210002CA3000000121 +000A72E000000021000A72F0000001210016E480000000210016E68000000121000004A000000021000006A000000121 +00013A6000000021000AB76000000121000015E000000021000015F00000012100001C400000003100001C5000000131 +00001C60000002310001F400000000210001F48000000121000A658000000021000A659000000121000022C000000021 +000022D0000001210010C9F0000000210010CDF0000001210001F5000000002100003C53130001220001FA7000000031 +0001FAF0000001310001F673B90002320000042000000021000006200000012100013AE000000021000AB7E000000121 +0016E400000000210016E6000000012100000D200000002100000F20000001210001E820000000210001E83000000121 +00013D5000000021000ABA500000012100010E00000000210001CA0000000121000013D000000021000013E000000121 +00004060000000210000456000000121000029D000000021000A7B20000001210000139000000021000013A000000121 +000019800000002100001990000001210001EBC0000000210001EBD00000012100003AB00000002100003CB000000121 +000040E000000021000045E000000121000A7B6000000021000A7B7000000121000040A000000021000045A000000121 +0001EC00000000210001EC10000001210010572000000021001059900000012100024B900000002100024D3000000121 +0002C160000000210002C46000000121000019C000000021000026F00000012100003A700000002100003C7000000121 +000A692000000021000A69300000012100000C500000003100000E5000000131000212B0000002310000526000000021 +00005270000001210000266000000021000A7AA000000121001057A00000002100105A1000000121001057E000000021 +00105A50000001210001FD00000000210001FD800000012100000460000000210000066000000121001E90A000000021 +001E92C0000001210000228000000021000022900000012100013A2000000021000AB72000000121000A726000000021 +000A7270000001210010C930000000210010CD3000000121000049A000000021000049B00000012100000D6000000021 +00000F6000000121000010C000000021000010D0000001210010C970000000210010CD70000001210000162000000021 +0000163000000121000019E00000002100002200000001210001E9700000002100000743080001220000392000000031 +00003B200000013100003D00000002310001E300000000210001E310000001210001FA30000000310001FAB000000131 +0001F633B900023200118A800000002100118C8000000121000216D000000021000217D0000001210002C9E000000021 +0002C9F000000121000004E000000021000006E00000012100000B5000000031000039C00000013100003BC000000231 +000048E000000021000048F000000121000A72A000000021000A72B00000012100104100000000210010438000000121 +000038A00000002100003AF0000001210001EFE0000000210001EFF00000012100118AC00000002100118CC000000121 +00001EA00000002100001EB0000001210001F060000000210001F0E0000001210001FC30000000310001FCC000000131 +00003B73B900023200010B40000000210002D14000000121000026A000000021000A7AE0000001210000412000000031 +00004320000001310001C800000002310001F860000000310001F8E0000001310001F063B90002320010C9B000000021 +0010CDB000000121000A760000000021000A76100000012100024C800000002100024E200000012100001A4000000021 +00001A5000000121000039F00000002100003BF00000012100010C40000000210002D2400000012100004A2000000021 +00004A30000001210002C030000000210002C330000001210002CE00000000210002CE10000001210010576000000021 +001059D0000001210001F960000000310001F9E0000001310001F263B900023200004E000000002100004E1000000121 +0002C2A0000000210002C5A0000001210001ED00000000210001ED100000012100000C200000002100000E2000000121 +00004E800000002100004E9000000121000A7A6000000021000A7A700000012100010F90000000210001CB9000000121 +00001450000000210000146000000121000037C00000002100003FE0000001210001EC80000000210001EC9000000121 +000041A000000021000043A00000012100000CA00000002100000EA0000001210001F860000000310001F8E000000131 +0001F063B9000232000042100000003100004410000001310001C830000002310010404000000021001042C000000121 +000FB02000000021000006606C000122000053F000000021000056F00000012100005470000000210000577000000121 +00013B6000000021000AB8600000012100013EC000000021000ABBC000000121000FF2C000000021000FF4C000000121 +000A7BA000000021000A7BB000000121000A648000000021000A64900000012100013C5000000021000AB95000000121 +000FF24000000021000FF44000000121001040F0000000210010437000000121001041C0000000210010444000000121 +001058300000002100105AA0000001210010C830000000210010CC300000012100002410000000210000242000000121 +0001E760000000210001E7700000012100010BC0000000210002D1C0000001210002C220000000210002C52000000121 +00010D00000000210001C90000000121000A768000000021000A769000000121000A732000000021000A733000000121 +000011C000000021000011D000000121000042700000002100004470000001210001E400000000210001E41000000121 +00118B100000002100118D10000001210000152000000021000015300000012100003A100000003100003C1000000131 +00003F1000000231000039700000002100003B700000012100001AC00000002100001AD00000012100001E2000000021 +00001E300000012100002180000000210000219000000121001E91A000000021001E93C0000001210000516000000021 +00005170000001210001F270000000210001F2F000000121000A7C9000000021000A7CA0000001210001FE0000000021 +0001FE800000012100021650000000210002175000000121000A66C000000021000A66D0000001210000393000000021 +00003B300000012100005320000000210000562000000121000005600000002100000760000001210001F33000000021 +0001F3B000000121000055400000002100005840000001210001C88000000031000A64A000000131000A64B000000231 +000A68E000000021000A68F00000012100003D800000002100003D900000012100024C500000002100024DF000000121 +0002CB20000000210002CB30000001210010C820000000210010CC200000012100000570000000210000077000000121 +0010D500000000210010D70000000121000FF37000000021000FF570000001210001EF60000000210001EF7000000121 +001E912000000021001E9340000001210001F120000000210001F1A0000001210016E530000000210016E73000000121 +00004A600000002100004A7000000121000016A000000021000016B0000001210001F340000000210001F3C000000121 +0002CDC0000000210002CDD00000012100001B1000000021000028A00000012100118A400000002100118C4000000121 +0001E280000000210001E2900000012100001BF00000002100001F7000000121000018B000000021000018C000000121 +00010A70000000210002D070000001210010D650000000210010D8500000012100001280000000210000129000000121 +0001E6A0000000210001E6B00000012100010AB0000000210002D0B000000121000041F000000021000043F000000121 +0002C2E0000000210002C5E0000001210010CAF0000000210010CEF00000012100104C500000002100104ED000000121 +0010D510000000210010D710000001210001FE10000000210001FE900000012100003A600000003100003C6000000131 +00003D50000002310002C0A0000000210002C3A000000121000050E000000021000050F0000001210010D5D000000021 +0010D7D00000012100001040000000210000105000000121000037200000002100003730000001210001E8E000000021 +0001E8F000000121000039600000002100003B60000001210001EFA0000000210001EFB00000012100003F2000000021 +00003F9000000121000A640000000021000A64100000012100118A500000002100118C500000012100010EC000000021 +0001CAC00000012100118A100000002100118C10000001210001FA70000000310001FAF0000001310001F673B9000232 +000016600000002100001670000001210001F370000000210001F3F0000001210010C860000000210010CC6000000121 +00013DD000000021000ABAD0000001210001F510000000210001F590000001210002C9A0000000210002C9B000000121 +00001FA00000002100001FB000000121000216900000002100021790000001210010D540000000210010D74000000121 +00010A40000000210002D0400000012100000530000000310000073000000131000017F0000002310000376000000021 +000037700000012100013B1000000021000AB810000001210000468000000021000046900000012100013E4000000021 +000ABB40000001210001F960000000310001F9E0000001310001F263B900023200001080000000210000109000000121 +0010CA00000000210010CE00000001210001E660000000210001E670000001210001E8A0000000210001E8B000000121 +0001E4C0000000210001E4D0000001210001F750000000210001FCB0000001210002C0E0000000210002C3E000000121 +0001E500000000210001E5100000012100024C000000002100024DA000000121000A750000000021000A751000000121 +00000DA00000002100000FA00000012100010E90000000210001CA90000001210002CD80000000210002CD9000000121 +0001EB80000000210001EB9000000121000012C000000021000012D00000012100002520000000210002C70000000121 +00004C300000002100004C400000012100003B00000000310001FE300000013100003C530830123300024C4000000021 +00024DE0000001210002C0F0000000210002C3F000000121000053300000002100005630000001210000195000000021 +00001F60000001210001F130000000210001F1B00000012100104B800000002100104E00000001210000553000000021 +00005830000001210010425000000021001044D00000012100013D1000000021000ABA100000012100004F4000000021 +00004F500000012100004C700000002100004C800000012100104B500000002100104DD00000012100004D0000000021 +00004D1000000121000A75C000000021000A75D0000001210010CAC0000000210010CEC0000001210001E2C000000021 +0001E2D00000012100010A80000000210002D08000000121000046400000002100004650000001210000426000000021 +000044600000012100004E400000002100004E500000012100010ED0000000210001CAD000000121000A792000000021 +000A7930000001210001EDC0000000210001EDD00000012100104BC00000002100104E40000001210010577000000021 +001059E0000001210001EA80000000210001EA900000012100001B800000002100001B900000012100000C6000000021 +00000E6000000121000FF30000000021000FF500000001210016E440000000210016E64000000121001041B000000021 +00104430000001210001E0E0000000210001E0F00000012100004D400000002100004D50000001210002CAE000000021 +0002CAF0000001210002C6B0000000210002C6C000000121000FF23000000021000FF430000001210000184000000021 +00001850000001210010573000000021001059A000000121000039800000004100003B800000014100003D1000000241 +00003F400000034100013D4000000021000ABA4000000121001E919000000021001E93B0000001210000187000000021 +00001880000001210002C130000000210002C43000000121000A7A2000000021000A7A30000001210000194000000021 +0000263000000121000041600000002100004360000001210002CBE0000000210002CBF0000001210001FA6000000031 +0001FAE0000001310001F663B900023200104C600000002100104EE0000001210001F820000000310001F8A000000131 +0001F023B900023200104C900000002100104F100000012100013E0000000021000ABB00000001210000240000000021 +0002C7F000000121000A7BE000000021000A7BF0000001210001F920000000310001F9A0000001310001F223B9000232 +000040200000002100004520000001210000536000000021000056600000012100005500000000210000580000000121 +000A682000000021000A683000000121000038600000002100003AC0000001210001FE50000000210001FEC000000121 +00024C900000002100024E300000012100000D300000002100000F300000012100010F00000000210001CB0000000121 +0001E3C0000000210001E3D0000001210002C800000000210002C810000001210001F970000000310001F9F000000131 +0001F273B9000232001058A00000002100105B1000000121000015600000002100001570000001210001E7A000000021 +0001E7B00000012100013ED000000021000ABBD000000121000A73E000000021000A73F0000001210000118000000021 +0000119000000121000021400000002100002150000001210001E600000000310001E610000001310001E9B000000231 +0002C8A0000000210002C8B000000121000A64C000000021000A64D000000121000039500000003100003B5000000131 +00003F500000023100001E600000002100001E70000001210001F850000000310001F8D0000001310001F053B9000232 +000051200000002100005130000001210001F610000000210001F69000000121000A668000000021000A669000000121 +001059400000002100105BB0000001210001E180000000210001E1900000012100013B2000000021000AB82000000121 +0010415000000021001043D000000121001041800000002100104400000001210000245000000021000028C000000121 +0001F720000000210001FC800000012100118B500000002100118D500000012100010B80000000210002D18000000121 +00004C000000002100004CF000000121001040B000000021001043300000012100004230000000210000443000000121 +00010C50000000210002D250000001210002C2D0000000210002C5D0000001210001F300000000210001F38000000121 +00013C1000000021000AB91000000121000A76C000000021000A76D00000012100104CC00000002100104F4000000121 +0001F710000000210001FBB000000121000FF33000000021000FF53000000121000216A000000021000217A000000121 +000014900000002100002BC06E00012200003E800000002100003E9000000121000A7D0000000021000A7D1000000121 +000005A000000021000007A0000001210010CB00000000210010CF000000012100001D900000002100001DA000000121 +0001ECC0000000210001ECD00000012100001B500000002100001B600000012100005430000000210000573000000121 +0001F220000000210001F2A000000121001058700000002100105AE0000001210001EA00000000210001EA1000000121 +0010C8F0000000210010CCF0000001210016E540000000210016E740000001210001FB400000002100003AC3B9000122 +0016E570000000210016E770000001210001D7D0000000210002C63000000121000A7D6000000021000A7D7000000121 +000A74C000000021000A74D00000012100013CE000000021000AB9E00000012100000CF00000002100000EF000000121 +00010D90000000210001C990000001210000045000000021000006500000012100001360000000210000137000000121 +000040D000000021000045D0000001210016E430000000210016E630000001210001F7C0000000210001FFA000000121 +000024A000000021000024B00000012100004B800000002100004B90000001210002CCA0000000210002CCB000000121 +0002CED0000000210002CEE000000121000019F000000021000027500000012100003A400000002100003C4000000121 +000FB17000000021000057456D000122000A74E000000021000A74F00000012100104C000000002100104E8000000121 +0001E160000000210001E1700000012100013AF000000021000AB7F00000012100005000000000210000501000000121 +0002C820000000210002C8300000012100010BD0000000210002D1D000000121001E916000000021001E938000000121 +0010CA30000000210010CE30000001210010C940000000210010CD400000012100104C200000002100104EA000000121 +00003A600000003100003C600000013100003D50000002310001F930000000310001F9B0000001310001F233B9000232 +00118B400000002100118D400000012100013E9000000021000ABB90000001210016E4D0000000210016E6D000000121 +0001F410000000210001F490000001210000287000000021000A7B100000012100005420000000210000572000000121 +0001E580000000210001E590000001210001F430000000210001F4B0000001210001F910000000310001F99000000131 +0001F213B90002320002CEB0000000210002CEC0000001210001FD10000000210001FD90000001210001EE8000000021 +0001EE900000012100013A3000000021000AB7300000012100003EE00000002100003EF00000012100118B8000000021 +00118D80000001210010C9E0000000210010CDE00000012100013EB000000021000ABBB00000012100000FF000000021 +00001780000001210010417000000021001043F00000012100118A900000002100118C90000001210001FB0000000021 +0001FB80000001210002C880000000210002C8900000012100013A9000000021000AB79000000121001E909000000021 +001E92B00000012100013C2000000021000AB9200000012100024B600000002100024D00000001210001E5E000000021 +0001E5F0000001210002C690000000210002C6A000000121001041F0000000210010447000000121000037F000000021 +00003F30000001210000540000000021000057000000012100003900000000310001FD300000013100003B9308301233 +000004B000000031000006B000000131000212A00000023100004F800000002100004F900000012100013F3000000021 +00013FB00000012100000C900000002100000E9000000121000040F000000021000045F00000012100010B5000000021 +0002D15000000121000A746000000021000A74700000012100000CD00000002100000ED0000001210000476000000021 +0000477000000121000039E00000002100003BE0000001210001F200000000210001F2800000012100010FA000000021 +0001CBA0000001210002C210000000210002C510000001210001EA60000000210001EA70000001210001F83000000031 +0001F8B0000001310001F033B9000232000053C000000021000056C0000001210001F010000000210001F09000000121 +0002CC20000000210002CC30000001210000208000000021000020900000012100013E3000000021000ABB3000000121 +000A796000000021000A7970000001210001F640000000210001F6C000000121001059200000002100105B9000000121 +00004BE00000002100004BF0000001210001F910000000310001F990000001310001F213B900023200003E6000000021 +00003E70000001210001EE00000000210001EE10000001210001FF30000000310001FFC00000013100003C93B9000232 +00001300000000210000069307000122000041300000002100004330000001210001E98000000021000007730A000122 +000042E000000021000044E00000012100010DB0000000210001C9B00000012100010F60000000210001CB6000000121 +0002C000000000210002C3000000012100118BE00000002100118DE00000012100001A700000002100001A8000000121 +00010C30000000210002D23000000121000041500000002100004350000001210001E1E0000000210001E1F000000121 +000050600000002100005070000001210001E640000000210001E6500000012100000C700000002100000E7000000121 +000047C000000021000047D0000001210001E520000000210001E5300000012100010F40000000210001CB4000000121 +001058600000002100105AD000000121000046A000000021000046B0000001210002C270000000210002C57000000121 +00104CA00000002100104F200000012100010A20000000210002D020000001210010C890000000210010CC9000000121 +000FF32000000021000FF52000000121000039800000004100003B800000014100003D100000024100003F4000000341 +00003A900000003100003C900000013100021260000002310001EDA0000000210001EDB000000121001E901000000021 +001E923000000121000A79C000000021000A79D00000012100010D30000000210001C9300000012100024BC000000021 +00024D6000000121000FF2F000000021000FF4F00000012100002500000000210002C6F0000001210002C29000000021 +0002C59000000121001E920000000021001E94200000012100004B200000002100004B30000001210010419000000021 +0010441000000121000021000000002100002110000001210002C150000000210002C450000001210016E47000000021 +0016E67000000121000A754000000021000A7550000001210016E450000000210016E6500000012100001C7000000031 +00001C800000013100001C9000000231000047E000000021000047F00000012100001FC00000002100001FD000000121 +000020E000000021000020F000000121000024400000002100002890000001210001F770000000210001FDB000000121 +0002CD60000000210002CD7000000121001058900000002100105B000000012100004220000000410000442000000141 +0001C840000002410001C8500000034100010E70000000210001CA700000012100004FA00000002100004FB000000121 +00010D50000000210001C950000001210001EAC0000000210001EAD00000012100010B70000000210002D17000000121 +00013A1000000021000AB71000000121000A7C2000000021000A7C3000000121001E907000000021001E929000000121 +00013F500000002100013FD000000121000019B000000021000A7DC0000001210001EE20000000210001EE3000000121 +0001F620000000210001F6A0000001210001E920000000210001E9300000012100001D500000002100001D6000000121 +0002C060000000210002C360000001210010C8B0000000210010CCB0000001210001F700000000210001FBA000000121 +00003EC00000002100003ED000000121001E915000000021001E937000000121000216E000000021000217E000000121 +00013C0000000021000AB900000001210001EF40000000210001EF50000001210001FB20000000210001F703B9000122 +000FF3A000000021000FF5A00000012100118BC00000002100118DC00000012100004AA00000002100004AB000000121 +000216300000002100021730000001210001E1C0000000210001E1D00000012100013C8000000021000AB98000000121 +00118AF00000002100118CF0000001210001E9A00000002100000612BE00012200105710000000210010598000000121 +0010CA70000000210010CE70000001210010C980000000210010CD800000012100000510000000210000071000000121 +00004F200000002100004F30000001210010CAA0000000210010CEA00000012100010AF0000000210002D0F000000121 +0002C8E0000000210002C8F0000001210002CC40000000210002CC50000001210001E0A0000000210001E0B000000121 +000FB15000000021000057456B0001220010D600000000210010D80000000121001058E00000002100105B5000000121 +001041100000002100104390000001210010423000000021001044B000000121000053A000000021000056A000000121 +0001E6C0000000210001E6D00000012100104BE00000002100104E60000001210010424000000021001044C000000121 +00010A90000000210002D0900000012100024C200000002100024DC0000001210010C810000000210010CC1000000121 +00013BC000000021000AB8C000000121000046200000003100004630000001310001C8700000023100118A6000000021 +00118C60000001210001E4A0000000210001E4B000000121000216200000002100021720000001210001ED4000000021 +0001ED500000012100010AA0000000210002D0A00000012100004EC00000002100004ED0000001210002C0C000000021 +0002C3C000000121000A79A000000021000A79B00000012100004CB00000002100004CC00000012100104BD000000021 +00104E5000000121000037000000002100003710000001210001FE700000002100003C53083421230016E50000000021 +0016E70000000121001E914000000021001E93600000012100003DA00000002100003DB0000001210001F35000000021 +0001F3D0000001210010D520000000210010D72000000121000039200000003100003B200000013100003D0000000231 +0002C960000000210002C970000001210016E510000000210016E710000001210001FA50000000310001FAD000000131 +0001F653B9000232000039100000002100003B100000012100005340000000210000564000000121000041B000000021 +000043B00000012100013DF000000021000ABAF0000001210002C2C0000000210002C5C0000001210000124000000021 +00001250000001210010CA20000000210010CE20000001210001E8C0000000210001E8D0000001210001EB4000000021 +0001EB5000000121000016C000000021000016D0000001210001E020000000210001E03000000121000019A000000021 +000023D000000121000010200000002100001030000001210001F140000000210001F1C000000121000FF28000000021 +000FF480000001210010C800000000210010CC000000012100010EE0000000210001CAE0000001210001F55000000021 +0001F5D000000121000A77B000000021000A77C0000001210001FC700000002100003B73423B91230000059000000021 +0000079000000121000014A000000021000014B0000001210001E240000000210001E2500000012100013BD000000021 +000AB8D0000001210002CBC0000000210002CBD000000121001040D00000002100104350000001210010D5C000000021 +0010D7C000000121001058F00000002100105B600000012100118A700000002100118C7000000121000A660000000021 +000A66100000012100005140000000210000515000000121000052E000000021000052F00000012100004A4000000021 +00004A5000000121000040000000002100004500000001210016E580000000210016E78000000121000A64E000000021 +000A64F000000121000FF2E000000021000FF4E0000001210010D5B0000000210010D7B000000121001040C000000021 +001043400000012100000DB00000002100000FB00000012100001CD00000002100001CE00000012100010E8000000021 +0001CA8000000121000054F000000021000057F000000121000A738000000021000A7390000001210016E5F000000021 +0016E7F0000001210001FA60000000310001FAE0000001310001F663B9000232001E90F000000021001E931000000121 +0002C070000000210002C3700000012100010A30000000210002D03000000121000A7A0000000021000A7A1000000121 +000042100000003100004410000001310001C83000000231000A680000000021000A6810000001210000282000000021 +000A7C50000001210001D79000000021000A77D00000012100024CB00000002100024E50000001210000401000000021 +0000451000000121000A758000000021000A759000000121000005800000002100000780000001210000193000000021 +00002600000001210010CA10000000210010CE1000000121000054E000000021000057E0000001210000186000000021 +000025400000012100013DC000000021000ABAC00000012100024BD00000002100024D700000012100001B3000000021 +00001B4000000121000A696000000021000A697000000121000021600000002100002170000001210001ECE000000021 +0001ECF000000121000216800000002100021780000001210001FC600000002100003B73420001220002C12000000021 +0002C420000001210002C2F0000000210002C5F000000121001E90E000000021001E9300000001210010CAB000000021 +0010CEB0000001210001E860000000210001E87000000121000041200000003100004320000001310001C80000000231 +00013D6000000021000ABA60000001210001EBA0000000210001EBB000000121001E91B000000021001E93D000000121 +001041A00000002100104420000001210001EEE0000000210001EEF000000121000FF31000000021000FF51000000121 +000A7BC000000021000A7BD00000012100001DB00000002100001DC00000012100001A60000000210000280000000121 +0001F070000000210001F0F00000012100118BD00000002100118DD00000012100000C800000002100000E8000000121 +00004D200000002100004D300000012100010E10000000210001CA100000012100013B7000000021000AB87000000121 +001058500000002100105AC0000001210016E4B0000000210016E6B00000012100001720000000210000173000000121 +000049E000000021000049F00000012100004E600000002100004E700000012100010B00000000210002D10000000121 +0001E99000000021000007930A00012200001EE00000002100001EF0000001210002C9C0000000210002C9D000000121 +00104B400000002100104DC0000001210010C870000000210010CC700000012100013BA000000021000AB8A000000121 +0001E100000000210001E110000001210000230000000021000023100000012100004280000000210000448000000121 +0002CD00000000210002CD100000012100118A000000002100118C000000012100003E000000002100003E1000000121 +0001FF400000002100003CE3B9000122000A780000000021000A78100000012100010F50000000210001CB5000000121 +000053B000000021000056B00000012100000D500000002100000F5000000121001058800000002100105AF000000121 +000041400000003100004340000001310001C810000002310001FA40000000310001FAC0000001310001F643B9000232 +000012A000000021000012B0000001210000052000000021000007200000012100024B700000002100024D1000000121 +001E908000000021001E92A000000121000039800000004100003B800000014100003D100000024100003F4000000341 +000020200000002100002030000001210001F850000000310001F8D0000001310001F053B90002320000470000000021 +000047100000012100002710000000210002C6E0000001210002C1B0000000210002C4B000000121000FB03000000021 +0000066066069123000048A000000021000048B000000121000A752000000021000A753000000121000FF25000000021 +000FF450000001210000407000000021000045700000012100000C100000002100000E10000001210001E44000000021 +0001E450000001210001F970000000310001F9F0000001310001F273B900023200005480000000210000578000000121 +000021C000000021000021D00000012100013E5000000021000ABB5000000121000051A000000021000051B000000121 +0002CB60000000210002CB7000000121000A654000000021000A6550000001210010403000000021001042B000000121 +0001E720000000210001E7300000012100010D40000000210001C9400000012100104C100000002100104E9000000121 +0010C8A0000000210010CCA0000001210001E2A0000000210001E2B00000012100004620000000310000463000000131 +0001C870000002310001F760000000210001FDA00000012100000530000000310000073000000131000017F000000231 +0002C260000000210002C5600000012100013A0000000021000AB7000000012100003FA00000002100003FB000000121 +00004C500000002100004C60000001210001F920000000310001F9A0000001310001F223B90002320000555000000021 +000058500000012100013E8000000021000ABB800000012100001C700000003100001C800000013100001C9000000231 +0001F420000000210001F4A0000001210001F670000000210001F6F000000121001057C00000002100105A3000000121 +000A7B4000000021000A7B5000000121000A698000000021000A699000000121001E904000000021001E926000000121 +000040C000000021000045C00000012100010DA0000000210001C9A0000001210001FD600000002100003B9342000122 +00000D000000002100000F00000001210016E460000000210016E660000001210001EC20000000210001EC3000000121 +00001E400000002100001E500000012100000440000000210000064000000121000017D000000021000017E000000121 +0001F210000000210001F29000000121000FF39000000021000FF5900000012100013AC000000021000AB7C000000121 +000058700000002100005655820001220001F000000000210001F0800000012100003A500000002100003C5000000121 +0000158000000021000015900000012100104CF00000002100104F70000001210001E3A0000000210001E3B000000121 +000A72C000000021000A72D0000001210010D630000000210010D8300000012100001120000000210000113000000121 +0001E360000000210001E370000001210016E4E0000000210016E6E0000001210001F7D0000000210001FFB000000121 +000049400000002100004950000001210001E800000000210001E8100000012100001160000000210000117000000121 +000042D000000021000044D00000012100013F200000002100013FA0000001210000179000000021000017A000000121 +00004DA00000002100004DB0000001210002CA80000000210002CA900000012100000CC00000002100000EC000000121 +00001A200000002100001A300000012100003A100000003100003C100000013100003F10000002310001E7C000000021 +0001E7D00000012100118B700000002100118D700000012100013CF000000021000AB9F0000001210010412000000021 +001043A000000121000052000000002100005210000001210002C1C0000000210002C4C000000121000026B000000021 +0002C62000000121000FB140000000210000574565000122000015C000000021000015D000000121000A652000000021 +000A653000000121000FF26000000021000FF4600000012100001E800000002100001E900000012100010B6000000021 +0002D16000000121000A656000000021000A657000000121000051C000000021000051D00000012100013C3000000021 +000AB93000000121001059100000002100105B800000012100104CB00000002100104F30000001210001EC6000000021 +0001EC700000012100001E000000002100001E10000001210001F630000000210001F6B0000001210002C01000000021 +0002C31000000121001E900000000021001E9220000001210001E780000000210001E7900000012100024CE000000021 +00024E8000000121000A76A000000021000A76B000000121000011A000000021000011B0000001210000429000000021 +00004490000001210001F840000000310001F8C0000001310001F043B900023200010D60000000210001C96000000121 +0001FB10000000210001FB9000000121000A762000000021000A7630000001210010CB20000000210010CF2000000121 +0002C200000000210002C5000000012100010BE0000000210002D1E000000121001041E0000000210010446000000121 +0001FF700000002100003C93423B912300004E200000002100004E30000001210001F900000000310001F98000000131 +0001F203B900023200004DE00000002100004DF0000001210001F940000000310001F9C0000001310001F243B9000232 +00005410000000210000571000000121000054500000002100005750000001210001F250000000210001F2D000000121 +000015400000002100001550000001210002C240000000210002C540000001210000264000000021000A7CB000000121 +0000181000000021000025300000012100003A300000003100003C200000013100003C300000023100118B3000000021 +00118D300000012100010BA0000000210002D1A000000121000018000000002100002430000001210001E3E000000021 +0001E3F00000012100010FF0000000210001CBF0000001210001FF30000000310001FFC00000013100003C93B9000232 +00010D20000000210001C92000000121000A76E000000021000A76F0000001210010C880000000210010CC8000000121 +0001C88000000031000A64A000000131000A64B00000023100010B20000000210002D1200000012100013C7000000021 +000AB9700000012100005180000000210000519000000121000A766000000021000A76700000012100001EC000000021 +00001ED00000012100104C300000002100104EB00000012100013EA000000021000ABBA0000001210010574000000021 +001059B00000012100013EE000000021000ABBE000000121001E91C000000021001E93E00000012100010E2000000021 +0001CA20000001210002C050000000210002C3500000012100004A000000002100004A10000001210001E42000000021 +0001E4300000012100013B4000000021000AB8400000012100118BF00000002100118DF0000001210000150000000021 +00001510000001210001F5600000002100003C53133421230002CB00000000210002CB100000012100013A4000000021 +000AB7400000012100004C100000002100004C200000012100001CA00000003100001CB00000013100001CC000000231 +000004C000000021000006C00000012100104C700000002100104EF0000001210016E5A0000000210016E7A000000121 +00002220000000210000223000000121000049000000002100004910000001210002CF20000000210002CF3000000121 +001059500000002100105BC000000121000053D000000021000056D000000121000038800000002100003AD000000121 +0000549000000021000057900000012100013E2000000021000ABB20000001210016E4A0000000210016E6A000000121 +0001EFC0000000210001EFD0000001210001F900000000310001F980000001310001F203B900023200004D6000000021 +00004D7000000121000A7B8000000021000A7B9000000121000041400000003100004340000001310001C81000000231 +0010CAD0000000210010CED00000012100010F70000000210001CB70000001210016E550000000210016E75000000121 +000A728000000021000A7290000001210001E000000000210001E0100000012100002320000000210000233000000121 +00010A50000000210002D050000001210001F150000000210001F1D00000012100003A900000003100003C9000000131 +0002126000000231000013B000000021000013C0000001210000408000000021000045800000012100000DC000000021 +00000FC0000001210001EBE0000000210001EBF0000001210002C180000000210002C48000000121000A7A8000000021 +000A7A9000000121000216B000000021000217B0000001210002C100000000210002C400000001210002CDE000000021 +0002CDF000000121000029E000000021000A7B000000012100000D400000002100000F400000012100010EF000000021 +0001CAF0000001210000551000000021000058100000012100013DA000000021000ABAA0000001210000535000000021 +00005650000001210001FA00000000310001FA80000001310001F603B900023200024C600000002100024E0000000121 +000041000000002100004300000001210001EB60000000210001EB70000001210001F840000000310001F8C000000131 +0001F043B90002320010416000000021001043E0000001210016E420000000210016E620000001210010D5E000000021 +0010D7E000000121000016400000002100001650000001210002CA00000000210002CA10000001210001E2E000000021 +0001E2F0000001210010C950000000210010CD500000012100004980000000210000499000000121000010A000000021 +000010B0000001210010C9D0000000210010CDD0000001210010D530000000210010D730000001210001E88000000021 +0001E890000001210000528000000021000052900000012100118AA00000002100118CA00000012100013D7000000021 +000ABA7000000121000A65A000000021000A65B000000121000022A000000021000022B0000001210001FA5000000031 +0001FAD0000001310001F653B900023200104B300000002100104DB000000121001E90C000000021001E92E000000121 +00024BB00000002100024D500000012100001F400000002100001F5000000121000A690000000021000A691000000121 +000FF29000000021000FF490000001210002C750000000210002C760000001210002CB80000000210002CB9000000121 +001040100000002100104290000001210002C0D0000000210002C3D00000012100104D000000002100104F8000000121 +001E913000000021001E93500000012100001AF00000002100001B0000000121000A7C7000000021000A7C8000000121 +00013BF000000021000AB8F0000001210010402000000021001042A00000012100010EA0000000210001CAA000000121 +00104BF00000002100104E7000000121001058D00000002100105B400000012100021640000000210002174000000121 +000018E00000002100001DD00000012100001D300000002100001D40000001210001F100000000210001F18000000121 +0001F570000000210001F5F0000001210001ED20000000210001ED3000000121000FF2A000000021000FF4A000000121 +0001E040000000210001E0500000012100004EE00000002100004EF0000001210002C940000000210002C95000000121 +00000C000000002100000E00000001210001FE600000002100003C534200012200013DB000000021000ABAB000000121 +00001B2000000021000028B0000001210010426000000021001044E000000121000A662000000021000A663000000121 +0000054000000021000007400000012100005560000000210000586000000121000042A000000031000044A000000131 +0001C860000002310010422000000021001044A0000001210001F360000000210001F3E0000001210001FA1000000031 +0001FA90000001310001F613B900023200004CD00000002100004CE00000012100104BB00000002100104E3000000121 +000023B000000021000023C00000012100001CF00000002100001D0000000121000050C000000021000050D000000121 +000A646000000021000A6470000001210001E460000000210001E470000001210010CA60000000210010CE6000000121 +000A779000000021000A77A000000121000FF36000000021000FF5600000012100118A200000002100118C2000000121 +00004EA00000002100004EB000000121000041D000000021000043D000000121000A794000000021000A7C4000000121 +000A688000000021000A6890000001210001EB20000000210001EB300000012100021600000000210002170000000121 +0001ED60000000210001ED700000012100024C300000002100024DD0000001210016E5E0000000210016E7E000000121 +00004AC00000002100004AD0000001210016E520000000210016E72000000121000023E0000000210002C66000000121 +0002CB40000000210002CB5000000121000FF2D000000021000FF4D000000121000014C000000021000014D000000121 +0001E220000000210001E2300000012100013BB000000021000AB8B00000012100001430000000210000144000000121 +000FB04000000021000006606606C123001058100000002100105A800000012100001700000000210000171000000121 +0001E940000000210001E950000001210001FC20000000210001F743B90001220002C280000000210002C58000000121 +001E910000000021001E932000000121001040E00000002100104360000001210001F830000000310001F8B000000131 +0001F033B9000232000A798000000021000A79900000012100013B8000000021000AB880000001210001E70000000021 +0001E71000000121000042200000004100004420000001410001C840000002410001C850000003410010C85000000021 +0010CC50000001210001EAE0000000210001EAF0000001210000122000000021000012300000012100104B2000000021 +00104DA0000001210010C8C0000000210010CCC0000001210010405000000021001042D0000001210001F87000000031 +0001F8F0000001310001F073B90002320000420000000021000044000000012100001AE0000000210000288000000121 +000021A000000021000021B000000121000038C00000002100003CC0000001210001F950000000310001F9D000000131 +0001F253B90002320000345000000041000039900000014100003B90000002410001FBE000000341000018A000000021 +000025700000012100003900000000310001FD300000013100003B930830123300010B10000000210002D11000000121 +000011E000000021000011F0000001210001E080000000210001E090000001210002C900000000210002C91000000121 +000A7C0000000021000A7C10000001210001C890000000210001C8A000000121001058000000002100105A7000000121 +000041C000000021000043C000000121000FB05000000031000FB060000001310000073074000232000A7A4000000021 +000A7A50000001210001E740000000210001E750000001210002C140000000210002C4400000012100013E7000000021 +000ABB7000000121001E90D000000021001E92F00000012100013A5000000021000AB7500000012100010F3000000021 +0001CB300000012100024BA00000002100024D4000000121000013F0000000210000140000000121000039D000000021 +00003BD0000001210002CE20000000210002CE300000012100010A10000000210002D010000001210000508000000021 +0000509000000121000004D000000021000006D000000121000038900000002100003AE000000121000048C000000021 +000048D0000001210002C040000000210002C34000000121000216F000000021000217F00000012100004B0000000021 +00004B10000001210002CD20000000210002CD3000000121000A734000000021000A735000000121000FB01000000021 +000006606900012200000500000000210000070000000121000016000000002100001610000001210010584000000021 +00105AB0000001210001E320000000210001E330000001210010CA90000000210010CE90000001210000200000000021 +000020100000012100118AB00000002100118CB000000121000A786000000021000A78700000012100118BB000000021 +00118DB00000012100118AE00000002100118CE000000121000021E000000021000021F00000012100003AA000000021 +00003CA00000012100010C20000000210002D2200000012100013C4000000021000AB940000001210000539000000021 +0000569000000121000A74A000000021000A74B00000012100000C300000002100000E3000000121000046E000000021 +000046F000000121000054D000000021000057D0000001210001FE200000002100003C530830012300010E3000000021 +0001CA30000001210001F5200000002100003C531330012300003DE00000002100003DF00000012100024CA000000021 +00024E40000001210000345000000041000039900000014100003B90000002410001FBE000000341000A7DA000000021 +000A7DB000000121000A75A000000021000A75B000000121000041900000002100004390000001210002C09000000021 +0002C39000000121000037D00000002100003FF0000001210001F260000000210001F2E0000001210010C99000000021 +0010CD9000000121000218300000002100021840000001210002C230000000210002C530000001210000132000000021 +00001330000001210001E560000000210001E5700000012100010AE0000000210002D0E000000121000A740000000021 +000A74100000012100000DD00000002100000FD00000012100010E60000000210001CA60000001210001E60000000031 +0001E610000001310001E9B00000023100004780000000210000479000000121000022E000000021000022F000000121 +0001FF600000002100003C93420001220001FD200000002100003B9308300123000A694000000021000A695000000121 +000052C000000021000052D00000012100105700000000210010597000000121000A666000000021000A667000000121 +00001F0000000021000006A30C0001220010C960000000210010CD600000012100118B200000002100118D2000000121 +0010D640000000210010D84000000121000020A000000021000020B00000012100024BF00000002100024D9000000121 +00013CB000000021000AB9B0000001210010C9C0000000210010CDC000000121000041E000000031000043E000000131 +0001C820000002310001E840000000210001E850000001210001EF00000000210001EF100000012100013A8000000021 +000AB780000001210010D5A0000000210010D7A0000001210010D570000000210010D770000001210002CA4000000021 +0002CA5000000121000A724000000021000A725000000121000049C000000021000049D000000121000010E000000021 +000010F0000001210016E590000000210016E790000001210001FA40000000310001FAC0000001310001F643B9000232 +00104D300000002100104FB000000121001E903000000021001E92500000012100001910000000210000192000000121 +0001F800000000310001F880000001310001F003B900023200013DE000000021000ABAE00000012100003A0000000031 +00003C000000013100003D600000023100013AD000000021000AB7D00000012100002060000000210000207000000121 +0001F450000000210001F4D00000012100003EA00000002100003EB00000012100010BB0000000210002D1B000000121 +00004740000000210000475000000121000FF38000000021000FF5800000012100004FE00000002100004FF000000121 +0002C840000000210002C850000001210010413000000021001043B0000001210001FD700000002100003B9308342123 +0001E5C0000000210001E5D0000001210001EE40000000210001EE50000001210002CC80000000210002CC9000000121 +0002C1F0000000210002C4F00000012100004BA00000002100004BB00000012100104CE00000002100104F6000000121 +0010D620000000210010D8200000012100000D100000002100000F100000012100004720000000210000473000000121 +00118B600000002100118D60000001210001F780000000210001FF800000012100000430000000210000063000000121 +0001EA20000000210001EA3000000121001E905000000021001E9270000001210001F240000000210001F2C000000121 +000019D000000021000027200000012100004B600000002100004B700000012100000DF0000000310001E9E000000131 +00000730730002320001F870000000310001F8F0000001310001F073B90002320001E140000000210001E15000000121 +0001EE60000000210001EE7000000121000040B000000021000045B00000012100004090000000210000459000000121 +001057D00000002100105A400000012100003A800000002100003C80000001210001E5A0000000210001E5B000000121 +001057F00000002100105A60000001210000544000000021000057400000012100010FE0000000210001CBE000000121 +0001E120000000210001E1300000012100010B90000000210002D1900000012100000470000000210000067000000121 +00004FC00000002100004FD0000001210010C920000000210010CD20000001210002C860000000210002C87000000121 +0001E1A0000000210001E1B0000001210010C900000000210010CD000000012100010BF0000000210002D1F000000121 +00013CA000000021000AB9A0000001210016E490000000210016E6900000012100000410000000210000061000000121 +00001BC00000002100001BD0000001210001EEA0000000210001EEB00000012100005020000000210000503000000121 +000024800000002100002490000001210001F950000000310001F9D0000001310001F253B900023200010DF000000021 +0001C9F00000012100001C400000003100001C500000013100001C600000023100005460000000210000576000000121 +00013EF000000021000ABBF0000001210002CCC0000000210002CCD00000012100010D70000000210001C97000000121 +00013A7000000021000AB77000000121000047A000000021000047B00000012100001340000000210000135000000121 +000042A000000031000044A0000001310001C860000002310002C190000000210002C490000001210000204000000021 +0000205000000121000025C000000021000A7AB00000012100024CF00000002100024E90000001210001E54000000021 +0001E55000000121001057900000002100105A0000000121000054A000000021000057A000000121000A684000000021 +000A685000000121000FF27000000021000FF470000001210001F050000000210001F0D000000121000FB13000000021 +00005745760001220002132000000021000214E000000121000024C000000021000024D00000012100013B5000000021 +000AB850000001210002CC60000000210002CC7000000121001040800000002100104300000001210002C1D000000021 +0002C4D000000121000023F0000000210002C7E000000121000A742000000021000A7430000001210001E62000000021 +0001E630000001210010CA80000000210010CE800000012100000B5000000031000039C00000013100003BC000000231 +0001F810000000310001F890000001310001F013B90002320010C9A0000000210010CDA000000121000012E000000021 +000012F0000001210000403000000021000045300000012100001FE00000002100001FF0000001210000345000000041 +000039900000014100003B90000002410001FBE0000003410000174000000021000017500000012100003CF000000021 +00003D700000012100024CD00000002100024E70000001210001FB30000000310001FBC00000013100003B13B9000232 +00118AD00000002100118CD000000121000A744000000021000A74500000012100000D900000002100000F9000000121 +0001E0C0000000210001E0D0000001210002C170000000210002C4700000012100003E200000002100003E3000000121 +000026C000000021000A7AD000000121000A756000000021000A75700000012100004050000000210000455000000121 +000019700000002100002680000001210001F600000000210001F680000001210001EEC0000000210001EED000000121 +0002C8C0000000210002C8D00000012100010F20000000210001CB2000000121000A7CC000000021000A7CD000000121 +0010D590000000210010D79000000121001040A000000021001043200000012100013C6000000021000AB96000000121 +001E91D000000021001E93F00000012100104B600000002100104DE00000012100004240000000210000444000000121 +00001A90000000210000283000000121000039A00000003100003BA00000013100003F000000023100010E5000000021 +0001CA500000012100104C800000002100104F00000001210010407000000021001042F00000012100013D0000000021 +000ABA00000001210001FA20000000310001FAA0000001310001F623B9000232000046C000000021000046D000000121 +00010A00000000210002D00000000121000A782000000021000A78300000012100000C500000003100000E5000000131 +000212B00000023100004B400000002100004B50000001210002CCE0000000210002CCF0000001210001FF2000000021 +0001F7C3B9000122000FF21000000021000FF41000000121000A73A000000021000A73B00000012100104B9000000021 +00104E10000001210010D560000000210010D760000001210001EA40000000210001EA5000000121000038F000000021 +00003CE00000012100024BE00000002100024D800000012100003B00000000310001FE300000013100003C5308301233 +000004900000002100000690000001210016E410000000210016E6100000012100002460000000210000247000000121 +001E91F000000021001E9410000001210001F730000000210001FC90000001210002C670000000210002C68000000121 +000216600000002100021760000001210000100000000021000010100000012100003E400000002100003E5000000121 +00013D2000000021000ABA2000000121000A79E000000021000A79F0000001210001FA00000000310001FA8000000131 +0001F603B90002320010CB10000000210010CF10000001210016E5D0000000210016E7D00000012100010C1000000021 +0002D21000000121000A7F5000000021000A7F600000012100013BE000000021000AB8E000000121000042C000000021 +000044C0000001210001FC400000002100003AE3B900012200010DD0000000210001C9D0000001210001F93000000031 +0001F9B0000001310001F233B9000232000024E000000021000024F00000012100004BC00000002100004BD000000121 +0000176000000021000017700000012100013AB000000021000AB7B00000012100013E1000000021000ABB1000000121 +000050400000002100005050000001210001F030000000210001F0B000000121000A686000000021000A687000000121 +000054C000000021000057C0000001210016E4F0000000210016E6F00000012100010EB0000000210001CAB000000121 +00013D9000000021000ABA9000000121000023A0000000210002C6500000012100004A800000002100004A9000000121 +0002CDA0000000210002CDB000000121000041E000000031000043E0000001310001C820000002310001F81000000031 +0001F890000001310001F013B9000232000039400000002100003B40000001210002C720000000210002C73000000121 +000051000000002100005110000001210001E260000000210001E27000000121000A642000000021000A643000000121 +00004C900000002100004CA000000121000014700000002100001480000001210001EB00000000210001EB1000000121 +000A75E000000021000A75F000000121001058C00000002100105B3000000121000A73C000000021000A73D000000121 +00104D100000002100104F900000012100104D200000002100104FA000000121001059000000002100105B7000000121 +000005500000002100000750000001210001F110000000210001F19000000121000037B00000002100003FD000000121 +0001F310000000210001F390000001210002CBA0000000210002CBB00000012100005520000000210000582000000121 +0001FC30000000310001FCC00000013100003B73B90002320001E6E0000000210001E6F0000001210002167000000021 +000217700000012100000DE00000002100000FE0000001210000190000000021000025B000000121000A68C000000021 +000A68D0000001210001EF80000000210001EF90000001210010D5F0000000210010D7F00000012100104B0000000021 +00104D80000001210010C8E0000000210010CCE0000001210002C080000000210002C38000000121000016E000000021 +000016F0000001210016E5C0000000210016E7C00000012100010CD0000000210002D2D0000001210001F7B000000021 +0001FEB0000001210001E900000000210001E9100000012100013B3000000021000AB8300000012100001D1000000021 +00001D20000001210001F530000000210001F5B000000121000012600000002100001270000001210001E48000000021 +0001E490000001210002C980000000210002C99000000121001040000000002100104280000001210001FA3000000031 +0001FAB0000001310001F633B900023200118B900000002100118D900000012100013B0000000021000AB80000000121 +0001ED80000000210001ED90000001210010CA40000000210010CE40000001210001F740000000210001FCA000000121 +000042200000004100004420000001410001C840000002410001C850000003410001EF20000000210001EF3000000121 +000216100000002100021710000001210010420000000021001044800000012100001F100000003100001F2000000131 +00001F300000023100001D700000002100001D8000000121000A68A000000021000A68B00000012100003F7000000021 +00003F8000000121000FF35000000021000FF5500000012100003DC00000002100003DD0000001210010C8D000000021 +0010CCD000000121000041800000002100004380000001210000212000000021000021300000012100004F0000000021 +00004F100000012100024C100000002100024DB000000121000050A000000021000050B000000121001E917000000021 +001E939000000121000A644000000021000A6450000001210000537000000021000056700000012100010AC000000021 +0002D0C00000012100010AD0000000210002D0D00000012100024C700000002100024E10000001210000460000000021 +00004610000001210002C2B0000000210002C5B0000001210016E560000000210016E7600000012100010C7000000021 +0002D27000000121000FB05000000031000FB0600000013100000730740002320002CD40000000210002CD5000000121 +00010F10000000210001CB10000001210001F7A0000000210001FEA0000001210002C0B0000000210002C3B000000121 +000FF34000000021000FF540000001210010406000000021001042E00000012100004170000000210000437000000121 +00118BA00000002100118DA0000001210001F820000000310001F8A0000001310001F023B900023200001F1000000031 +00001F200000013100001F3000000231000039500000003100003B500000013100003F500000023100001B7000000021 +0000292000000121000018F000000021000025900000012100005380000000210000568000000121000A66A000000021 +000A66B0000001210001F320000000210001F3A00000012100104210000000210010449000000121000052A000000021 +000052B00000012100004250000000210000445000000121000A784000000021000A785000000121000004F000000021 +000006F000000121000A664000000021000A6650000001210001FA20000000310001FAA0000001310001F623B9000232 +00104B100000002100104D900000012100000C400000002100000E40000001210010CA50000000210010CE5000000121 +0001EAA0000000210001EAB00000012100013D8000000021000ABA80000001210010D550000000210010D75000000121 +00000DF0000000310001E9E000000131000007307300023200010E40000000210001CA400000012100000D8000000021 +00000F800000012100001CA00000003100001CB00000013100001CC00000023100010D10000000210001C91000000121 +0010575000000021001059C000000121000216C000000021000217C0000001210002C020000000210002C32000000121 +0010D580000000210010D78000000121000A7D8000000021000A7D9000000121000FF22000000021000FF42000000121 +0016E5B0000000210016E7B0000001210000404000000021000045400000012100010B30000000210002D13000000121 +0001ECA0000000210001ECB00000012100104090000000210010431000000121001E918000000021001E93A000000121 +00004F600000002100004F70000001210002CC00000000210002CC10000001210001E200000000210001E21000000121 +000FB00000000021000006606600012200104B700000002100104DF000000121000039B00000002100003BB000000121 +000019600000002100002690000001210002C250000000210002C55000000121000A790000000021000A791000000121 +000A764000000021000A765000000121000020C000000021000020D0000001210001F940000000310001F9C000000131 +0001F243B900023200118B000000002100118D0000000121000018200000002100001830000001210002CAC000000021 +0002CAD0000001210001F800000000310001F880000001310001F003B900023200024CC00000002100024E6000000121 +00002510000000210002C6D000000121000048000000002100004810000001210001F5400000002100003C5313301123 +00024B800000002100024D2000000121000054B000000021000057B00000012100013AA000000021000AB7A000000121 +000004B000000031000006B000000131000212A0000002310000261000000021000A7AC0000001210000141000000021 +0000142000000121000039A00000003100003BA00000013100003F000000023100010F80000000210001CB8000000121 +00104C400000002100104EC0000001210000189000000021000025600000012100010DE0000000210001C9E000000121 +0001E680000000210001E6900000012100013E6000000021000ABB60000001210001F040000000210001F0C000000121 +0010578000000021001059F0000001210000411000000021000043100000012100104BA00000002100104E2000000121 +00004660000000210000467000000121000A736000000021000A7370000001210001FE400000002100003C1313000122 +00000CB00000002100000EB00000012100010C00000000210002D200000001210010427000000021001044F000000121 +00001DE00000002100001DF0000001210002C920000000210002C9300000012100001060000000210000107000000121 +0001E4E0000000210001E4F000000121000042B000000021000044B000000121000A748000000021000A749000000121 +0002C110000000210002C41000000121000A7B3000000021000AB53000000121000053E000000021000056E000000121 +000014E000000021000014F00000012100013D3000000021000ABA300000012100005240000000210000525000000121 +000A65E000000021000A65F00000012100001F800000002100001F900000012100004AE00000002100004AF000000121 +000A77E000000021000A77F00000012100003A000000003100003C000000013100003D60000002310000265000000021 +000A78D0000001210001FB600000002100003B13420001220001FA10000000310001FA90000001310001F613B9000232 +0001EDE0000000210001EDF00000012100013B9000000021000AB8900000012100001680000000210000169000000121 +0000226000000021000022700000012100013F100000002100013F90000001210001E060000000210001E07000000121 +00001200000000210000121000000121001041D0000000210010445000000121001058200000002100105A9000000121 +0001F660000000210001F6E0000001210001E96000000021000006833100012200010A60000000210002D06000000121 +0010C910000000210010CD10000001210001D8E000000021000A7C60000001210010C840000000210010CC4000000121 +000FF2B000000021000FF4B00000012100118A300000002100118C300000012100000480000000210000068000000121 +00013CC000000021000AB9C000000121001E91E000000021001E940000000121000038E00000002100003CD000000121 +00005310000000210000561000000121"; +return FCE(t[index]); } struct uniProps @@ -1628,84 +884,88 @@ private alias _U = immutable(UnicodeProperty); @property static _U[] tab() pure { return _tab; } static immutable: private alias _T = ubyte[]; -_T ID_Start = [0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x4, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xca, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x80, 0x81, 0x5, 0x1, 0x2, 0x2, 0x4, 0x1, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x8, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x1, 0x6, 0x29, 0x47, 0x1b, 0x4, 0x4, 0x2d, 0x2b, 0x23, 0x2, 0x1, 0x63, 0x1, 0x1, 0xf, 0x2, 0x7, 0x2, 0xa, 0x3, 0x2, 0x1, 0x10, 0x1, 0x1, 0x1e, 0x1d, 0x59, 0xb, 0x1, 0x18, 0x21, 0x9, 0x2, 0x4, 0x1, 0x5, 0x16, 0x4, 0x1, 0x9, 0x1, 0x3, 0x1, 0x17, 0x19, 0x7, 0xb, 0x5, 0x18, 0x1, 0x6, 0x11, 0x2a, 0x3a, 0x36, 0x3, 0x1, 0x12, 0x1, 0x7, 0xa, 0xf, 0x10, 0x4, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x3, 0x1, 0x10, 0x1, 0xd, 0x2, 0x1, 0x3, 0xe, 0x2, 0xa, 0x1, 0x8, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1f, 0x4, 0x1, 0x1, 0x13, 0x3, 0x10, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xf, 0x2, 0x17, 0x1, 0xb, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x1e, 0x2, 0x1, 0x3, 0xf, 0x1, 0x11, 0x1, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x16, 0x1, 0x34, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x3, 0x1, 0x1a, 0x3, 0x2, 0x1, 0x2, 0x2, 0x1e, 0x1, 0x4, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x3, 0x1, 0x1f, 0x2, 0x1, 0x2, 0xf, 0x2, 0x11, 0x9, 0x1, 0x3, 0x1, 0x29, 0x2, 0x1, 0x10, 0x1, 0x5, 0x3, 0x8, 0x3, 0x18, 0x6, 0x5, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3a, 0x30, 0x1, 0x2, 0xc, 0x7, 0x3a, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0xa, 0x1, 0x2, 0x9, 0x1, 0x2, 0x5, 0x1, 0x1, 0x15, 0x4, 0x20, 0x1, 0x3f, 0x8, 0x1, 0x24, 0x1b, 0x5, 0x73, 0x2b, 0x14, 0x1, 0x10, 0x6, 0x4, 0x4, 0x3, 0x1, 0x3, 0x2, 0x7, 0x3, 0x4, 0xd, 0xc, 0x1, 0x11, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x81, 0x4d, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x25, 0x10, 0x10, 0x56, 0x2, 0x6, 0x3, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x3, 0xb, 0x7, 0x12, 0xd, 0x13, 0xe, 0x12, 0xe, 0xd, 0x1, 0x3, 0xf, 0x34, 0x23, 0x1, 0x4, 0x1, 0x43, 0x59, 0x7, 0x29, 0x1, 0x1, 0x5, 0x46, 0xa, 0x1f, 0x31, 0x1e, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x36, 0x17, 0x9, 0x35, 0x52, 0x1, 0x5d, 0x2f, 0x11, 0x8, 0x36, 0x1e, 0xd, 0x2, 0xa, 0x2c, 0x1a, 0x24, 0x29, 0x3, 0xa, 0x24, 0x2, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x29, 0x4, 0x1, 0x6, 0x1, 0x2, 0x3, 0x1, 0x5, 0x80, 0xc0, 0x40, 0x81, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x74, 0x1, 0xd, 0x1, 0x10, 0xd, 0x65, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x10, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x29, 0x8a, 0x77, 0x80, 0xe5, 0x6, 0x4, 0x3, 0x2, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x1, 0x10, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x82, 0x26, 0x3, 0x19, 0x9, 0x7, 0x5, 0x2, 0x5, 0x4, 0x56, 0x4, 0x5, 0x1, 0x5a, 0x1, 0x4, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x8d, 0x43, 0x2e, 0x2, 0x81, 0xd, 0x3, 0x10, 0xa, 0x2, 0x14, 0x2f, 0x10, 0x1f, 0x2, 0x50, 0x27, 0x9, 0x2, 0x67, 0x2, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x10, 0x1, 0x3, 0x1, 0x4, 0x1, 0x17, 0x1d, 0x34, 0xe, 0x32, 0x3e, 0x6, 0x3, 0x1, 0x1, 0x2, 0xb, 0x1c, 0xa, 0x17, 0x19, 0x1d, 0x7, 0x2f, 0x1c, 0x1, 0x10, 0x5, 0x1, 0xa, 0xa, 0x5, 0x1, 0x29, 0x17, 0x3, 0x1, 0x8, 0x14, 0x17, 0x3, 0x1, 0x3, 0x32, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x1, 0x18, 0x3, 0x2, 0xb, 0x7, 0x3, 0xc, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x2b, 0x1, 0xe, 0x6, 0x73, 0x1d, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0x1, 0x1, 0xa, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x81, 0x6b, 0x12, 0x40, 0x2, 0x36, 0x28, 0xc, 0x74, 0x5, 0x1, 0x80, 0x87, 0x24, 0x1a, 0x6, 0x1a, 0xb, 0x59, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x45, 0x35, 0x81, 0xb, 0x1d, 0x3, 0x31, 0x2f, 0x20, 0xd, 0x1e, 0x5, 0x26, 0xa, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x1, 0x5, 0x2a, 0x80, 0x9e, 0x12, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xc, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x1, 0xf, 0x4, 0x1, 0x3, 0x1, 0x1d, 0x2a, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1c, 0x1b, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x37, 0x33, 0xd, 0x33, 0xd, 0x24, 0x81, 0x5c, 0x2a, 0x6, 0x2, 0x4e, 0x1d, 0xa, 0x1, 0x8, 0x16, 0x2a, 0x12, 0x2e, 0x15, 0x1b, 0x17, 0xc, 0x35, 0x39, 0x2, 0x2, 0x1, 0xd, 0x2d, 0x20, 0x19, 0x1a, 0x24, 0x1d, 0x1, 0x2, 0x1, 0x8, 0x23, 0x3, 0x1, 0xc, 0x30, 0xe, 0x4, 0x15, 0x1, 0x1, 0x1, 0x23, 0x12, 0x1, 0x19, 0x13, 0x2, 0x3f, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x2f, 0x26, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xc, 0x5, 0x80, 0x9e, 0x35, 0x12, 0x4, 0x14, 0x3, 0x1e, 0x30, 0x14, 0x2, 0x1, 0x1, 0x80, 0xb8, 0x2f, 0x29, 0x4, 0x24, 0x30, 0x14, 0x1, 0x3b, 0x2b, 0xd, 0x1, 0x47, 0x1b, 0x25, 0x7, 0x80, 0xb9, 0x2c, 0x74, 0x40, 0x1f, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x18, 0xf, 0x1, 0x1, 0x1, 0x5e, 0x8, 0x2, 0x27, 0x10, 0x1, 0x1, 0x1, 0x1c, 0x1, 0xa, 0x28, 0x7, 0x1, 0x15, 0x1, 0xb, 0x2e, 0x13, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x25, 0x11, 0x1, 0x31, 0x1e, 0x70, 0x7, 0x1, 0x2, 0x1, 0x26, 0x15, 0x1, 0x19, 0x6, 0x1, 0x2, 0x1, 0x20, 0xe, 0x1, 0x81, 0x47, 0x13, 0xf, 0x1, 0x1, 0xd, 0x1, 0x22, 0x7c, 0x1, 0x4f, 0x83, 0x9a, 0x66, 0x6f, 0x11, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x11, 0x6, 0x8f, 0xb9, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x11, 0x4f, 0x11, 0x1e, 0x12, 0x30, 0x10, 0x4, 0x1f, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x40, 0x80, 0x80, 0x4b, 0x5, 0x1, 0x42, 0xd, 0x40, 0x2, 0x1, 0x1, 0x1c, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x97, 0x66, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x87, 0x34, 0x1f, 0x6, 0x6, 0x81, 0x5, 0x3e, 0x80, 0x92, 0x2d, 0xa, 0x7, 0x10, 0x1, 0x81, 0x41, 0x1e, 0x12, 0x2c, 0x81, 0xe4, 0x1c, 0x82, 0xf4, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x3b, 0x44, 0x7, 0x1, 0x84, 0xb4, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x91, 0x44, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Cs = [0xa0, 0xd8, 0x0, 0x88, 0x0]; -_T Default_Ignorable_Code_Point = [0x80, 0xad, 0x1, 0x82, 0xa1, 0x1, 0x82, 0xcc, 0x1, 0x8b, 0x42, 0x2, 0x86, 0x53, 0x2, 0x55, 0x5, 0x87, 0xfb, 0x5, 0x1a, 0x5, 0x31, 0x10, 0x90, 0xf4, 0x1, 0xa0, 0xcc, 0x9b, 0x10, 0x80, 0xef, 0x1, 0x80, 0xa0, 0x1, 0x4f, 0x9, 0xa0, 0xbc, 0xa7, 0x4, 0x94, 0xcf, 0x8, 0xac, 0x2e, 0x85, 0x90, 0x0]; -_T Pd = [0x2d, 0x1, 0x85, 0x5c, 0x1, 0x33, 0x1, 0x8e, 0x41, 0x1, 0x84, 0x5, 0x1, 0x88, 0x9, 0x6, 0x8e, 0x1, 0x1, 0x2, 0x1, 0x1f, 0x2, 0x4, 0x1, 0x1c, 0x1, 0x81, 0xbe, 0x1, 0x13, 0x1, 0x6f, 0x1, 0xa0, 0xcd, 0x90, 0x2, 0x25, 0x1, 0xa, 0x1, 0x80, 0xa9, 0x1, 0x8f, 0x9f, 0x1]; -_T Unified_Ideograph = [0xa0, 0x34, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x52, 0x0, 0xa0, 0x5a, 0xe, 0x2, 0x1, 0x1, 0x1, 0x2, 0xa, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x3, 0xa1, 0x5, 0xd6, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x94, 0x1f, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T IDS_Binary_Operator = [0xa0, 0x2f, 0xf0, 0x2, 0x2, 0x8]; -_T Sm = [0x2b, 0x1, 0x10, 0x3, 0x3d, 0x1, 0x1, 0x1, 0x2d, 0x1, 0x4, 0x1, 0x25, 0x1, 0x1f, 0x1, 0x82, 0xfe, 0x1, 0x82, 0xf, 0x3, 0x9a, 0x3b, 0x1, 0xd, 0x1, 0x27, 0x3, 0xd, 0x3, 0x80, 0x8b, 0x1, 0x27, 0x5, 0x6, 0x1, 0x44, 0x5, 0x5, 0x2, 0x4, 0x1, 0x2, 0x1, 0x2, 0x1, 0x7, 0x1, 0x1f, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1f, 0x81, 0xc, 0x20, 0x2, 0x5a, 0x1, 0x1e, 0x19, 0x28, 0x6, 0x81, 0xd5, 0x1, 0x9, 0x1, 0x36, 0x8, 0x6f, 0x1, 0x81, 0x50, 0x5, 0x2, 0x1f, 0xa, 0x10, 0x81, 0x0, 0x80, 0x83, 0x16, 0x3f, 0x4, 0x20, 0x2, 0x81, 0x2, 0x30, 0x15, 0x2, 0x6, 0xa0, 0xcf, 0xdc, 0x1, 0x83, 0x38, 0x1, 0x1, 0x3, 0x80, 0xa4, 0x1, 0x10, 0x3, 0x3d, 0x1, 0x1, 0x1, 0x80, 0x83, 0x1, 0x6, 0x4, 0xa0, 0xd6, 0xd4, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x97, 0x2c, 0x2]; -_T Pi = [0x80, 0xab, 0x1, 0x9f, 0x6c, 0x1, 0x2, 0x2, 0x2, 0x1, 0x19, 0x1, 0x8d, 0xc8, 0x1, 0x1, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x3, 0x1]; -_T Other_Grapheme_Extend = [0x89, 0xbe, 0x1, 0x18, 0x1, 0x81, 0x66, 0x1, 0x18, 0x1, 0x66, 0x1, 0x18, 0x1, 0x80, 0xea, 0x1, 0x12, 0x2, 0x67, 0x1, 0x18, 0x1, 0x77, 0x1, 0xf, 0x1, 0x8d, 0x55, 0x1, 0x84, 0xd6, 0x1, 0x90, 0x21, 0x2, 0xa0, 0xcf, 0x6e, 0x2, 0x93, 0x9e, 0x1, 0x18, 0x1, 0x81, 0x58, 0x1, 0xc, 0x1, 0x80, 0xf1, 0x1, 0x83, 0x80, 0x1, 0xa0, 0xb8, 0x34, 0x1, 0x8, 0x5, 0xac, 0x2e, 0xad, 0x60]; -_T Grapheme_Extend = [0x83, 0x0, 0x70, 0x81, 0x13, 0x7, 0x81, 0x7, 0x2d, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x48, 0xb, 0x30, 0x15, 0x10, 0x1, 0x65, 0x7, 0x2, 0x6, 0x2, 0x2, 0x1, 0x4, 0x23, 0x1, 0x1e, 0x1b, 0x5b, 0xb, 0x3a, 0x9, 0x9, 0x1, 0x18, 0x4, 0x1, 0x9, 0x1, 0x3, 0x1, 0x5, 0x2b, 0x3, 0x3c, 0x8, 0x2a, 0x18, 0x1, 0x20, 0x37, 0x1, 0x1, 0x1, 0x4, 0x8, 0x4, 0x1, 0x3, 0x7, 0xa, 0x2, 0x1d, 0x1, 0x3a, 0x1, 0x1, 0x1, 0x2, 0x4, 0x8, 0x1, 0x9, 0x1, 0xa, 0x2, 0x1a, 0x1, 0x2, 0x2, 0x39, 0x1, 0x4, 0x2, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x1e, 0x2, 0x3, 0x1, 0xb, 0x2, 0x39, 0x1, 0x4, 0x5, 0x1, 0x2, 0x4, 0x1, 0x14, 0x2, 0x16, 0x6, 0x1, 0x1, 0x3a, 0x1, 0x1, 0x2, 0x1, 0x4, 0x8, 0x1, 0x7, 0x3, 0xa, 0x2, 0x1e, 0x1, 0x3b, 0x1, 0x1, 0x1, 0xc, 0x1, 0x9, 0x1, 0x28, 0x1, 0x3, 0x1, 0x37, 0x1, 0x1, 0x3, 0x5, 0x3, 0x1, 0x4, 0x7, 0x2, 0xb, 0x2, 0x1d, 0x1, 0x3a, 0x1, 0x2, 0x1, 0x2, 0x1, 0x3, 0x1, 0x5, 0x2, 0x7, 0x2, 0xb, 0x2, 0x1c, 0x2, 0x39, 0x2, 0x1, 0x1, 0x2, 0x4, 0x8, 0x1, 0x9, 0x1, 0xa, 0x2, 0x1d, 0x1, 0x48, 0x1, 0x4, 0x1, 0x2, 0x3, 0x1, 0x1, 0x8, 0x1, 0x51, 0x1, 0x2, 0x7, 0xc, 0x8, 0x62, 0x1, 0x2, 0x9, 0xb, 0x7, 0x49, 0x2, 0x1b, 0x1, 0x1, 0x1, 0x1, 0x1, 0x37, 0xe, 0x1, 0x5, 0x1, 0x2, 0x5, 0xb, 0x1, 0x24, 0x9, 0x1, 0x66, 0x4, 0x1, 0x6, 0x1, 0x2, 0x2, 0x2, 0x19, 0x2, 0x4, 0x3, 0x10, 0x4, 0xd, 0x1, 0x2, 0x2, 0x6, 0x1, 0xf, 0x1, 0x82, 0xbf, 0x3, 0x83, 0xb2, 0x3, 0x1d, 0x2, 0x1e, 0x2, 0x1e, 0x2, 0x40, 0x2, 0x1, 0x7, 0x8, 0x1, 0x2, 0xb, 0x9, 0x1, 0x2d, 0x3, 0x1, 0x1, 0x75, 0x2, 0x22, 0x1, 0x76, 0x3, 0x4, 0x2, 0x9, 0x1, 0x6, 0x3, 0x80, 0xdb, 0x2, 0x2, 0x1, 0x3a, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1, 0x1, 0x2, 0x8, 0x6, 0xa, 0x2, 0x1, 0x30, 0x1f, 0x31, 0x4, 0x30, 0x7, 0x1, 0x1, 0x5, 0x1, 0x28, 0x9, 0xc, 0x2, 0x20, 0x4, 0x2, 0x2, 0x1, 0x3, 0x38, 0x1, 0x1, 0x2, 0x3, 0x1, 0x1, 0x3, 0x3a, 0x8, 0x2, 0x2, 0x80, 0x98, 0x3, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x80, 0xc6, 0x40, 0x82, 0xc, 0x1, 0x80, 0xc3, 0x21, 0x8b, 0xfe, 0x3, 0x80, 0x8d, 0x1, 0x60, 0x20, 0x82, 0x2a, 0x6, 0x69, 0x2, 0xa0, 0x75, 0xd4, 0x4, 0x1, 0xa, 0x20, 0x2, 0x50, 0x2, 0x81, 0x10, 0x1, 0x3, 0x1, 0x4, 0x1, 0x19, 0x2, 0x5, 0x1, 0x80, 0x97, 0x2, 0x1a, 0x12, 0xd, 0x1, 0x26, 0x8, 0x19, 0xb, 0x2e, 0x3, 0x30, 0x1, 0x2, 0x4, 0x2, 0x2, 0x27, 0x1, 0x43, 0x6, 0x2, 0x2, 0x2, 0x2, 0xc, 0x1, 0x8, 0x1, 0x2f, 0x1, 0x33, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x2a, 0x2, 0x8, 0x1, 0x80, 0xee, 0x1, 0x2, 0x1, 0x4, 0x1, 0xa0, 0x4f, 0x30, 0x1, 0x82, 0xe1, 0x10, 0x10, 0x10, 0x81, 0x6e, 0x2, 0x82, 0x5d, 0x1, 0x80, 0xe2, 0x1, 0x80, 0x95, 0x5, 0x86, 0x86, 0x3, 0x1, 0x2, 0x5, 0x4, 0x28, 0x3, 0x4, 0x1, 0x80, 0xa5, 0x2, 0x82, 0x3d, 0x4, 0x81, 0x83, 0x2, 0x50, 0x3, 0x46, 0xb, 0x31, 0x4, 0x7b, 0x1, 0x36, 0xf, 0x29, 0x1, 0x2, 0x2, 0xa, 0x3, 0x31, 0x4, 0x2, 0x2, 0x7, 0x1, 0x3d, 0x3, 0x24, 0x5, 0x1, 0x8, 0x3e, 0x1, 0xc, 0x2, 0x34, 0x9, 0xa, 0x4, 0x2, 0x1, 0x5f, 0x3, 0x2, 0x1, 0x1, 0x2, 0x6, 0x1, 0x2, 0x1, 0x80, 0x9d, 0x1, 0x3, 0x8, 0x15, 0x2, 0x39, 0x2, 0x1, 0x1, 0x1, 0x1, 0x16, 0x1, 0xe, 0x7, 0x3, 0x5, 0x80, 0xc3, 0x8, 0x2, 0x3, 0x1, 0x1, 0x17, 0x1, 0x51, 0x1, 0x2, 0x6, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x80, 0xeb, 0x1, 0x2, 0x4, 0x6, 0x2, 0x1, 0x2, 0x1b, 0x2, 0x55, 0x8, 0x2, 0x1, 0x1, 0x2, 0x6a, 0x1, 0x1, 0x1, 0x2, 0x6, 0x1, 0x1, 0x65, 0x3, 0x2, 0x4, 0x1, 0x5, 0x81, 0x3, 0x9, 0x1, 0x2, 0x80, 0xf5, 0x1, 0xa, 0x2, 0x1, 0x1, 0x4, 0x1, 0x80, 0x90, 0x4, 0x2, 0x2, 0x4, 0x1, 0x20, 0xa, 0x28, 0x6, 0x2, 0x4, 0x8, 0x1, 0x9, 0x6, 0x2, 0x3, 0x2e, 0xd, 0x1, 0x2, 0x81, 0x96, 0x7, 0x1, 0x6, 0x1, 0x1, 0x52, 0x16, 0x2, 0x7, 0x1, 0x2, 0x1, 0x2, 0x7a, 0x6, 0x3, 0x1, 0x1, 0x2, 0x1, 0x7, 0x1, 0x1, 0x48, 0x2, 0x3, 0x1, 0x1, 0x1, 0x81, 0x5b, 0x2, 0xb, 0x2, 0x34, 0x5, 0x5, 0x1, 0x1, 0x1, 0x94, 0xfd, 0x1, 0x6, 0xf, 0xa0, 0x36, 0x9a, 0x5, 0x3b, 0x7, 0x84, 0x18, 0x1, 0x3f, 0x4, 0x51, 0x1, 0xa0, 0x4c, 0xb8, 0x2, 0x92, 0x61, 0x2e, 0x2, 0x17, 0x82, 0x1e, 0x1, 0x1, 0x3, 0x4, 0x5, 0x8, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x80, 0x94, 0x3, 0x87, 0xbb, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x16, 0x5, 0x1, 0xf, 0x85, 0x50, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x64, 0x1, 0x80, 0xa0, 0x7, 0x81, 0x77, 0x1, 0x3d, 0x4, 0x81, 0xfc, 0x4, 0x83, 0xe0, 0x7, 0x6d, 0x7, 0xac, 0x16, 0xd5, 0x60, 0x80, 0x80, 0x80, 0xf0]; -_T Other_ID_Start = [0x98, 0x85, 0x2, 0x88, 0x91, 0x1, 0x15, 0x1, 0x8f, 0x6c, 0x2]; -_T Pattern_Syntax = [0x21, 0xf, 0xa, 0x7, 0x1a, 0x4, 0x1, 0x1, 0x1a, 0x4, 0x22, 0x7, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x4, 0x1, 0x4, 0x1, 0x3, 0x1, 0x17, 0x1, 0x1f, 0x1, 0x9f, 0x18, 0x18, 0x8, 0xf, 0x2, 0x13, 0x1, 0xa, 0x81, 0x31, 0x82, 0xd0, 0x80, 0xa0, 0x82, 0x76, 0x1e, 0x84, 0x6c, 0x82, 0x0, 0x80, 0x80, 0x81, 0x81, 0x3, 0x4, 0x19, 0xf, 0x1, 0xa0, 0xcd, 0xd, 0x2, 0x81, 0x5, 0x2]; -_T Lu = [0x41, 0x1a, 0x65, 0x17, 0x1, 0x7, 0x21, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x2, 0x4, 0x1, 0x2, 0x1, 0x3, 0x3, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x3, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0x21, 0x1, 0x1, 0x1, 0x3, 0x1, 0x8, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x1, 0x11, 0x1, 0x9, 0x23, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x2, 0x1, 0x1, 0x2, 0x2, 0x33, 0x30, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x26, 0x8b, 0x49, 0x26, 0x1, 0x1, 0x5, 0x1, 0x82, 0xd2, 0x56, 0x88, 0x9a, 0x2b, 0x2, 0x3, 0x81, 0x40, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x8, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0x6, 0xb, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x8, 0x48, 0x4, 0xc, 0x4, 0xc, 0x4, 0xc, 0x5, 0xb, 0x4, 0x81, 0x6, 0x1, 0x4, 0x1, 0x3, 0x3, 0x2, 0x3, 0x2, 0x1, 0x3, 0x5, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x2, 0x4, 0xa, 0x2, 0x5, 0x1, 0x3d, 0x1, 0x8a, 0x7c, 0x30, 0x30, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x8, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x1, 0x1, 0x1, 0x4, 0x1, 0xa0, 0x79, 0x4d, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0x87, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xa, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x6, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1c, 0x1, 0xa0, 0x57, 0x2b, 0x1a, 0x84, 0xc5, 0x28, 0x80, 0x88, 0x24, 0x80, 0x9c, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x86, 0xea, 0x33, 0x8b, 0xed, 0x20, 0xa0, 0x55, 0x80, 0x20, 0xa0, 0x65, 0xa0, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0x8, 0x1a, 0x1a, 0x1a, 0x2, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1b, 0x2, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1b, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1e, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x1, 0x91, 0x35, 0x22]; -_T Case_Ignorable = [0x27, 0x1, 0x6, 0x1, 0xb, 0x1, 0x23, 0x1, 0x1, 0x1, 0x47, 0x1, 0x4, 0x1, 0x1, 0x1, 0x4, 0x1, 0x2, 0x2, 0x81, 0xf7, 0x80, 0xc0, 0x4, 0x2, 0x4, 0x1, 0x9, 0x2, 0x1, 0x1, 0x80, 0xfb, 0x7, 0x80, 0xcf, 0x1, 0x5, 0x1, 0x31, 0x2d, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2c, 0x1, 0xb, 0x6, 0xa, 0xb, 0x1, 0x1, 0x23, 0x1, 0xa, 0x15, 0x10, 0x1, 0x65, 0x8, 0x1, 0xa, 0x1, 0x4, 0x21, 0x1, 0x1, 0x1, 0x1e, 0x1b, 0x5b, 0xb, 0x3a, 0xb, 0x4, 0x1, 0x2, 0x1, 0x18, 0x18, 0x2b, 0x3, 0x2c, 0x1, 0x7, 0x2, 0x6, 0x8, 0x29, 0x3a, 0x37, 0x1, 0x1, 0x1, 0x4, 0x8, 0x4, 0x1, 0x3, 0x7, 0xa, 0x2, 0xd, 0x1, 0xf, 0x1, 0x3a, 0x1, 0x4, 0x4, 0x8, 0x1, 0x14, 0x2, 0x1a, 0x1, 0x2, 0x2, 0x39, 0x1, 0x4, 0x2, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x1e, 0x2, 0x3, 0x1, 0xb, 0x2, 0x39, 0x1, 0x4, 0x5, 0x1, 0x2, 0x4, 0x1, 0x14, 0x2, 0x16, 0x6, 0x1, 0x1, 0x3a, 0x1, 0x2, 0x1, 0x1, 0x4, 0x8, 0x1, 0x7, 0x2, 0xb, 0x2, 0x1e, 0x1, 0x3d, 0x1, 0xc, 0x1, 0x32, 0x1, 0x3, 0x1, 0x37, 0x1, 0x1, 0x3, 0x5, 0x3, 0x1, 0x4, 0x7, 0x2, 0xb, 0x2, 0x1d, 0x1, 0x3a, 0x1, 0x2, 0x1, 0x6, 0x1, 0x5, 0x2, 0x14, 0x2, 0x1c, 0x2, 0x39, 0x2, 0x4, 0x4, 0x8, 0x1, 0x14, 0x2, 0x1d, 0x1, 0x48, 0x1, 0x7, 0x3, 0x1, 0x1, 0x5a, 0x1, 0x2, 0x7, 0xb, 0x9, 0x62, 0x1, 0x2, 0x9, 0x9, 0x1, 0x1, 0x7, 0x49, 0x2, 0x1b, 0x1, 0x1, 0x1, 0x1, 0x1, 0x37, 0xe, 0x1, 0x5, 0x1, 0x2, 0x5, 0xb, 0x1, 0x24, 0x9, 0x1, 0x66, 0x4, 0x1, 0x6, 0x1, 0x2, 0x2, 0x2, 0x19, 0x2, 0x4, 0x3, 0x10, 0x4, 0xd, 0x1, 0x2, 0x2, 0x6, 0x1, 0xf, 0x1, 0x5e, 0x1, 0x82, 0x60, 0x3, 0x83, 0xb2, 0x3, 0x1d, 0x2, 0x1e, 0x2, 0x1e, 0x2, 0x40, 0x2, 0x1, 0x7, 0x8, 0x1, 0x2, 0xb, 0x3, 0x1, 0x5, 0x1, 0x2d, 0x5, 0x33, 0x1, 0x41, 0x2, 0x22, 0x1, 0x76, 0x3, 0x4, 0x2, 0x9, 0x1, 0x6, 0x3, 0x80, 0xdb, 0x2, 0x2, 0x1, 0x3a, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1, 0x1, 0x2, 0x8, 0x6, 0xa, 0x2, 0x1, 0x27, 0x1, 0x8, 0x1f, 0x31, 0x4, 0x30, 0x1, 0x1, 0x5, 0x1, 0x1, 0x5, 0x1, 0x28, 0x9, 0xc, 0x2, 0x20, 0x4, 0x2, 0x2, 0x1, 0x3, 0x38, 0x1, 0x1, 0x2, 0x3, 0x1, 0x1, 0x3, 0x3a, 0x8, 0x2, 0x2, 0x40, 0x6, 0x52, 0x3, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x32, 0x3f, 0xd, 0x1, 0x22, 0x65, 0x81, 0xbd, 0x1, 0x1, 0x3, 0xb, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x2, 0xc, 0x5, 0x8, 0x2, 0xa, 0x1, 0x2, 0x1, 0x2, 0x5, 0x31, 0x5, 0x1, 0xa, 0x1, 0x1, 0xd, 0x1, 0x10, 0xd, 0x33, 0x21, 0x8b, 0x8b, 0x2, 0x71, 0x3, 0x7d, 0x1, 0xf, 0x1, 0x60, 0x20, 0x2f, 0x1, 0x81, 0xd5, 0x1, 0x24, 0x4, 0x3, 0x5, 0x5, 0x1, 0x5d, 0x6, 0x5d, 0x3, 0xa0, 0x6f, 0x16, 0x1, 0x84, 0xe2, 0x6, 0x81, 0xe, 0x1, 0x62, 0x4, 0x1, 0xa, 0x1, 0x1, 0x1c, 0x4, 0x50, 0x2, 0xe, 0x22, 0x4e, 0x1, 0x17, 0x3, 0x67, 0x3, 0x3, 0x2, 0x8, 0x1, 0x3, 0x1, 0x4, 0x1, 0x19, 0x2, 0x5, 0x1, 0x80, 0x97, 0x2, 0x1a, 0x12, 0xd, 0x1, 0x26, 0x8, 0x19, 0xb, 0x2e, 0x3, 0x30, 0x1, 0x2, 0x4, 0x2, 0x2, 0x11, 0x1, 0x15, 0x2, 0x42, 0x6, 0x2, 0x2, 0x2, 0x2, 0xc, 0x1, 0x8, 0x1, 0x23, 0x1, 0xb, 0x1, 0x33, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x1b, 0x1, 0xe, 0x2, 0x5, 0x2, 0x1, 0x1, 0x64, 0x5, 0x9, 0x3, 0x79, 0x1, 0x2, 0x1, 0x4, 0x1, 0xa0, 0x4f, 0x30, 0x1, 0x80, 0x93, 0x11, 0x82, 0x3d, 0x10, 0x3, 0x1, 0xc, 0x10, 0x22, 0x1, 0x2, 0x1, 0x80, 0xa9, 0x1, 0x7, 0x1, 0x6, 0x1, 0xb, 0x1, 0x23, 0x1, 0x1, 0x1, 0x2f, 0x1, 0x2d, 0x2, 0x43, 0x1, 0x15, 0x3, 0x82, 0x1, 0x1, 0x80, 0xe2, 0x1, 0x80, 0x95, 0x5, 0x84, 0x5, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x82, 0x46, 0x3, 0x1, 0x2, 0x5, 0x4, 0x28, 0x3, 0x4, 0x1, 0x80, 0xa5, 0x2, 0x82, 0x3d, 0x4, 0x81, 0x83, 0x2, 0x50, 0x3, 0x46, 0xb, 0x31, 0x4, 0x7b, 0x1, 0x36, 0xf, 0x29, 0x1, 0x2, 0x2, 0xa, 0x3, 0x31, 0x4, 0x2, 0x2, 0x2, 0x1, 0x4, 0x1, 0xa, 0x1, 0x32, 0x3, 0x24, 0x5, 0x1, 0x8, 0x3e, 0x1, 0xc, 0x2, 0x34, 0x9, 0xa, 0x4, 0x2, 0x1, 0x5f, 0x3, 0x2, 0x1, 0x1, 0x2, 0x6, 0x1, 0x2, 0x1, 0x80, 0x9d, 0x1, 0x3, 0x8, 0x15, 0x2, 0x39, 0x2, 0x3, 0x1, 0x25, 0x7, 0x3, 0x5, 0x80, 0xc3, 0x8, 0x2, 0x3, 0x1, 0x1, 0x17, 0x1, 0x54, 0x6, 0x1, 0x1, 0x4, 0x2, 0x1, 0x2, 0x80, 0xee, 0x4, 0x6, 0x2, 0x1, 0x2, 0x1b, 0x2, 0x55, 0x8, 0x2, 0x1, 0x1, 0x2, 0x6a, 0x1, 0x1, 0x1, 0x2, 0x6, 0x1, 0x1, 0x65, 0x3, 0x2, 0x4, 0x1, 0x5, 0x81, 0x3, 0x9, 0x1, 0x2, 0x81, 0x0, 0x2, 0x1, 0x1, 0x4, 0x1, 0x80, 0x90, 0x4, 0x2, 0x2, 0x4, 0x1, 0x20, 0xa, 0x28, 0x6, 0x2, 0x4, 0x8, 0x1, 0x9, 0x6, 0x2, 0x3, 0x2e, 0xd, 0x1, 0x2, 0x81, 0x96, 0x7, 0x1, 0x6, 0x1, 0x1, 0x52, 0x16, 0x2, 0x7, 0x1, 0x2, 0x1, 0x2, 0x7a, 0x6, 0x3, 0x1, 0x1, 0x2, 0x1, 0x7, 0x1, 0x1, 0x48, 0x2, 0x3, 0x1, 0x1, 0x1, 0x81, 0x5b, 0x2, 0xb, 0x2, 0x34, 0x5, 0x5, 0x1, 0x1, 0x1, 0x94, 0xed, 0x11, 0x6, 0xf, 0xa0, 0x36, 0x9a, 0x5, 0x3b, 0x7, 0x9, 0x4, 0x84, 0xb, 0x1, 0x3f, 0x11, 0x40, 0x2, 0x1, 0x2, 0xa0, 0x40, 0xb, 0x4, 0x1, 0x7, 0x1, 0x2, 0x8c, 0x9e, 0x2, 0x1, 0x4, 0x92, 0x5c, 0x2e, 0x2, 0x17, 0x82, 0x20, 0x3, 0x9, 0x10, 0x2, 0x7, 0x1e, 0x4, 0x80, 0x94, 0x3, 0x87, 0xbb, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x16, 0x5, 0x1, 0xf, 0x85, 0x50, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x5, 0x3e, 0x21, 0x1, 0x80, 0xa0, 0xe, 0x81, 0x70, 0x1, 0x3d, 0x4, 0x81, 0xfb, 0x5, 0x83, 0xe0, 0x7, 0x6d, 0x8, 0x8a, 0xaf, 0x5, 0xac, 0xc, 0x1, 0x1, 0x1e, 0x60, 0x80, 0x80, 0x80, 0xf0]; -_T Lo = [0x80, 0xaa, 0x1, 0xf, 0x1, 0x81, 0x0, 0x1, 0x4, 0x4, 0x80, 0xd0, 0x1, 0x83, 0x3b, 0x1b, 0x4, 0x4, 0x2d, 0x20, 0x1, 0xa, 0x23, 0x2, 0x1, 0x63, 0x1, 0x1, 0x18, 0x2, 0xa, 0x3, 0x2, 0x1, 0x10, 0x1, 0x1, 0x1e, 0x1d, 0x59, 0xb, 0x1, 0x18, 0x21, 0x15, 0x16, 0x2a, 0x19, 0x7, 0xb, 0x5, 0x18, 0x1, 0x6, 0x11, 0x29, 0x3b, 0x36, 0x3, 0x1, 0x12, 0x1, 0x7, 0xa, 0x10, 0xf, 0x4, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x3, 0x1, 0x10, 0x1, 0xd, 0x2, 0x1, 0x3, 0xe, 0x2, 0xa, 0x1, 0x8, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1f, 0x4, 0x1, 0x1, 0x13, 0x3, 0x10, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xf, 0x2, 0x17, 0x1, 0xb, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x1e, 0x2, 0x1, 0x3, 0xf, 0x1, 0x11, 0x1, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x16, 0x1, 0x34, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x3, 0x1, 0x1a, 0x3, 0x2, 0x1, 0x2, 0x2, 0x1e, 0x1, 0x4, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x3, 0x1, 0x1f, 0x2, 0x1, 0x2, 0xf, 0x2, 0x11, 0x9, 0x1, 0x3, 0x1, 0x29, 0x2, 0x1, 0x10, 0x1, 0x5, 0x3, 0x8, 0x3, 0x18, 0x6, 0x5, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3a, 0x30, 0x1, 0x2, 0xc, 0x6, 0x3b, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0xa, 0x1, 0x2, 0x9, 0x1, 0x2, 0x5, 0x17, 0x4, 0x20, 0x1, 0x3f, 0x8, 0x1, 0x24, 0x1b, 0x5, 0x73, 0x2b, 0x14, 0x1, 0x10, 0x6, 0x4, 0x4, 0x3, 0x1, 0x3, 0x2, 0x7, 0x3, 0x4, 0xd, 0xc, 0x1, 0x71, 0x81, 0x49, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x25, 0x10, 0x71, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x6, 0x8, 0x7, 0x12, 0xd, 0x13, 0xe, 0x12, 0xe, 0xd, 0x1, 0x3, 0xf, 0x34, 0x28, 0x1, 0x43, 0x23, 0x1, 0x35, 0x7, 0x5, 0x2, 0x22, 0x1, 0x1, 0x5, 0x46, 0xa, 0x1f, 0x31, 0x1e, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x36, 0x17, 0x9, 0x35, 0x80, 0xb0, 0x2f, 0x11, 0x8, 0x36, 0x1e, 0xd, 0x2, 0xa, 0x2c, 0x1a, 0x24, 0x29, 0x3, 0xa, 0x1e, 0x71, 0x4, 0x1, 0x6, 0x1, 0x2, 0x3, 0x1, 0x84, 0x3a, 0x4, 0x8b, 0xf7, 0x38, 0x18, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x82, 0x27, 0x1, 0x35, 0x1, 0x4, 0x56, 0x8, 0x1, 0x1, 0x5a, 0x4, 0x1, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x52, 0x15, 0x1, 0x84, 0x77, 0x43, 0x28, 0x8, 0x81, 0xc, 0x4, 0x10, 0xa, 0x2, 0x42, 0x1, 0x31, 0x46, 0x80, 0xa9, 0x1, 0x67, 0x1, 0x3, 0x7, 0x1, 0x3, 0x1, 0x4, 0x1, 0x17, 0x1d, 0x34, 0xe, 0x32, 0x3e, 0x6, 0x3, 0x1, 0x1, 0x2, 0xb, 0x1c, 0xa, 0x17, 0x19, 0x1d, 0x7, 0x2f, 0x2d, 0x5, 0x2, 0x9, 0xa, 0x5, 0x1, 0x29, 0x17, 0x3, 0x1, 0x8, 0x14, 0x10, 0x1, 0x6, 0x3, 0x1, 0x3, 0x32, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x1, 0x18, 0x2, 0x3, 0xb, 0x7, 0x1, 0xe, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x80, 0x91, 0x23, 0x1d, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x43, 0x1, 0x1, 0xa, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x81, 0x6b, 0x12, 0x40, 0x2, 0x36, 0x28, 0xc, 0x74, 0x5, 0x1, 0x80, 0x87, 0x69, 0xa, 0x1, 0x2d, 0x2, 0x1f, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x81, 0x85, 0x1d, 0x3, 0x31, 0x2f, 0x20, 0xd, 0x14, 0x1, 0x8, 0x6, 0x26, 0xa, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x80, 0x80, 0x4e, 0x62, 0x28, 0x8, 0x34, 0x80, 0x9c, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x80, 0x98, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x1, 0xf, 0x4, 0x1, 0x3, 0x1, 0x1d, 0x2a, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1c, 0x1b, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x80, 0xb7, 0x24, 0x81, 0x5c, 0x2a, 0x6, 0x2, 0x4e, 0x1d, 0xa, 0x1, 0x8, 0x16, 0x2a, 0x12, 0x2e, 0x15, 0x1b, 0x17, 0xc, 0x35, 0x39, 0x2, 0x2, 0x1, 0xd, 0x2d, 0x20, 0x19, 0x1a, 0x24, 0x1d, 0x1, 0x2, 0x1, 0x8, 0x23, 0x3, 0x1, 0xc, 0x30, 0xe, 0x4, 0x15, 0x1, 0x1, 0x1, 0x23, 0x12, 0x1, 0x19, 0x13, 0x2, 0x3f, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x2f, 0x26, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xc, 0x5, 0x80, 0x9e, 0x35, 0x12, 0x4, 0x14, 0x3, 0x1e, 0x30, 0x14, 0x2, 0x1, 0x1, 0x80, 0xb8, 0x2f, 0x29, 0x4, 0x24, 0x30, 0x14, 0x1, 0x3b, 0x2b, 0xd, 0x1, 0x47, 0x1b, 0x25, 0x7, 0x80, 0xb9, 0x2c, 0x80, 0xd3, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x18, 0xf, 0x1, 0x1, 0x1, 0x5e, 0x8, 0x2, 0x27, 0x10, 0x1, 0x1, 0x1, 0x1c, 0x1, 0xa, 0x28, 0x7, 0x1, 0x15, 0x1, 0xb, 0x2e, 0x13, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x25, 0x11, 0x1, 0x31, 0x1e, 0x70, 0x7, 0x1, 0x2, 0x1, 0x26, 0x15, 0x1, 0x19, 0x6, 0x1, 0x2, 0x1, 0x20, 0xe, 0x1, 0x81, 0x47, 0x13, 0xf, 0x1, 0x1, 0xd, 0x1, 0x22, 0x7c, 0x1, 0x4f, 0x83, 0x9a, 0x80, 0xe6, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x11, 0x6, 0x8f, 0xb9, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x11, 0x4f, 0x11, 0x1e, 0x12, 0x30, 0x33, 0x15, 0x5, 0x13, 0x83, 0x70, 0x4b, 0x5, 0x1, 0x80, 0xaf, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xf7, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0xa0, 0x22, 0x70, 0x1, 0x81, 0xf5, 0x2d, 0x21, 0x1, 0x81, 0x41, 0x1e, 0x12, 0x2c, 0x81, 0xe4, 0x1b, 0x82, 0xf5, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x85, 0x3b, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x91, 0x44, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Pc = [0x5f, 0x1, 0x9f, 0xdf, 0x2, 0x13, 0x1, 0xa0, 0xdd, 0xde, 0x2, 0x18, 0x3, 0x80, 0xef, 0x1]; -_T Bidi_Control = [0x86, 0x1c, 0x1, 0x99, 0xf1, 0x2, 0x1a, 0x5, 0x37, 0x4]; -_T Co = [0xa0, 0xe0, 0x0, 0x99, 0x0, 0xae, 0x7, 0x0, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe]; -_T Variation_Selector = [0x98, 0xb, 0x3, 0x1, 0x1, 0xa0, 0xe5, 0xf0, 0x10, 0xad, 0x2, 0xf0, 0x80, 0xf0]; -_T Soft_Dotted = [0x69, 0x2, 0x80, 0xc4, 0x1, 0x81, 0x19, 0x1, 0x1e, 0x1, 0x34, 0x1, 0x14, 0x1, 0x81, 0x40, 0x1, 0x62, 0x1, 0x1, 0x1, 0x99, 0x9, 0x1, 0x33, 0x1, 0xd, 0x1, 0x3, 0x1, 0x80, 0x84, 0x1, 0x80, 0x9d, 0x1, 0x81, 0xa5, 0x1, 0x80, 0xd6, 0x2, 0x8b, 0x32, 0x1, 0xa1, 0xa7, 0xa5, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x32, 0x2, 0x88, 0x86, 0x1, 0x81, 0x31, 0x2, 0x1a, 0x1]; -_T Noncharacter_Code_Point = [0xa0, 0xfd, 0xd0, 0x20, 0x82, 0xe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe]; -_T Logical_Order_Exception = [0x8e, 0x40, 0x5, 0x7b, 0x5, 0x8a, 0xf0, 0x3, 0x2, 0x1, 0xa0, 0x90, 0xfa, 0x2, 0x2, 0x1, 0x1, 0x2]; -_T Cased = [0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x4, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x80, 0xc3, 0x1, 0x4, 0x4, 0x80, 0xd0, 0x1, 0x24, 0x7, 0x2, 0x1e, 0x5, 0x60, 0x1, 0x2a, 0x4, 0x2, 0x2, 0x2, 0x4, 0x1, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x8, 0x80, 0xa6, 0x1, 0x26, 0x9, 0x29, 0x8b, 0x17, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x4, 0x82, 0xa0, 0x56, 0x2, 0x6, 0x88, 0x82, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x40, 0x80, 0xc0, 0x40, 0x81, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x74, 0x1, 0xd, 0x1, 0x10, 0xd, 0x65, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x3, 0x5, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x6, 0x4, 0x1, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x20, 0x3, 0x2, 0x83, 0x31, 0x34, 0x87, 0x16, 0x80, 0xe5, 0x6, 0x4, 0x3, 0x2, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0xa0, 0x79, 0x12, 0x2e, 0x12, 0x1e, 0x80, 0x84, 0x66, 0x3, 0x4, 0x1, 0x3b, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x5, 0x1, 0x3, 0x83, 0x35, 0x2b, 0x1, 0xe, 0x6, 0x50, 0xa0, 0x4f, 0x40, 0x7, 0xc, 0x5, 0x84, 0x9, 0x1a, 0x6, 0x1a, 0x84, 0xa5, 0x50, 0x60, 0x24, 0x4, 0x24, 0x74, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x81, 0xc3, 0x1, 0x2, 0x3, 0x1, 0x2a, 0x1, 0x9, 0x84, 0xc5, 0x33, 0xd, 0x33, 0x8b, 0xad, 0x40, 0xa0, 0x55, 0x60, 0x40, 0xa0, 0x65, 0x80, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x87, 0x34, 0xa, 0x1, 0x14, 0x6, 0x6, 0x81, 0x5, 0x3e, 0x88, 0x92, 0x44, 0x87, 0xec, 0x1a, 0x6, 0x1a, 0x6, 0x1a]; -_T Math = [0x2b, 0x1, 0x10, 0x3, 0x1f, 0x1, 0x1d, 0x1, 0x1, 0x1, 0x2d, 0x1, 0x4, 0x1, 0x25, 0x1, 0x1f, 0x1, 0x82, 0xd8, 0x3, 0x2, 0x1, 0x1a, 0x2, 0x2, 0x3, 0x82, 0xf, 0x3, 0x9a, 0xd, 0x1, 0x1b, 0x3, 0xb, 0x1, 0x3, 0x1, 0xd, 0x1, 0xe, 0x4, 0x15, 0x5, 0xb, 0x5, 0x41, 0xd, 0x4, 0x1, 0x3, 0x2, 0x4, 0x5, 0x12, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x3, 0x2, 0x2, 0x2, 0x1, 0x3, 0x1, 0x6, 0x3, 0xe, 0x1, 0x1, 0x44, 0x18, 0x1, 0x6, 0x1, 0x2, 0x4, 0x2, 0x4, 0x20, 0x1, 0x1, 0x6, 0x2, 0xe, 0x81, 0xc, 0x8, 0x4, 0x14, 0x2, 0x5a, 0x1, 0x1e, 0x1b, 0x1, 0x1, 0x18, 0x1, 0xb, 0x7, 0x81, 0xbd, 0x2, 0xc, 0xa, 0x4, 0x6, 0x4, 0x2, 0x2, 0x2, 0x3, 0x5, 0xe, 0x1, 0x1, 0x1, 0x2, 0x6, 0xb, 0x8, 0x5, 0x2, 0x39, 0x1, 0x1, 0x1, 0x1d, 0x4, 0x9, 0x3, 0x81, 0x50, 0x40, 0x81, 0x0, 0x82, 0x0, 0x30, 0x15, 0x2, 0x6, 0xa0, 0xcf, 0xdc, 0x1, 0x83, 0x37, 0x6, 0x1, 0x1, 0x80, 0xa2, 0x1, 0x10, 0x3, 0x1d, 0x1, 0x1, 0x1, 0x1d, 0x1, 0x1, 0x1, 0x80, 0x83, 0x1, 0x6, 0x4, 0xa0, 0xd4, 0x13, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x81, 0x24, 0x2, 0x32, 0x96, 0x0, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x34, 0x2]; -_T Me = [0x84, 0x88, 0x2, 0x96, 0x34, 0x1, 0x86, 0x1e, 0x4, 0x1, 0x3, 0xa0, 0x85, 0x8b, 0x3]; -_T No = [0x80, 0xb2, 0x2, 0x5, 0x1, 0x2, 0x3, 0x89, 0x35, 0x6, 0x81, 0x78, 0x6, 0x78, 0x3, 0x80, 0x85, 0x7, 0x80, 0xd9, 0x7, 0x11, 0x9, 0x81, 0xb1, 0xa, 0x84, 0x35, 0x14, 0x84, 0x73, 0xa, 0x81, 0xe0, 0x1, 0x86, 0x95, 0x1, 0x3, 0x6, 0x6, 0xa, 0x80, 0xc6, 0x10, 0x29, 0x1, 0x82, 0xd6, 0x3c, 0x4e, 0x16, 0x82, 0x76, 0x1e, 0x85, 0x69, 0x1, 0x84, 0x94, 0x4, 0x80, 0x8a, 0xa, 0x1e, 0x8, 0x1, 0xf, 0x20, 0xa, 0x27, 0xf, 0xa0, 0x75, 0x70, 0x6, 0xa0, 0x58, 0xd1, 0x2d, 0x41, 0x4, 0x11, 0x2, 0x81, 0x55, 0x1b, 0x24, 0x4, 0x85, 0x34, 0x8, 0x19, 0x7, 0x27, 0x9, 0x4b, 0x5, 0x16, 0x6, 0x80, 0xa0, 0x2, 0x2, 0x10, 0x2, 0x2e, 0x40, 0x9, 0x34, 0x2, 0x1e, 0x3, 0x4b, 0x5, 0x68, 0x8, 0x18, 0x8, 0x29, 0x7, 0x81, 0x4a, 0x6, 0x81, 0x60, 0x1f, 0x80, 0x9e, 0xa, 0x2a, 0x4, 0x70, 0x7, 0x80, 0x86, 0x14, 0x81, 0x7b, 0x14, 0x85, 0x45, 0x2, 0x81, 0xae, 0x9, 0x83, 0x67, 0x13, 0x83, 0x53, 0x15, 0xa0, 0x4b, 0x86, 0x7, 0x83, 0x1e, 0x17, 0xa0, 0x64, 0x29, 0x14, 0xc, 0x14, 0x6c, 0x19, 0x95, 0x4e, 0x9, 0x83, 0xa1, 0x3b, 0x1, 0x3, 0x1, 0x4, 0x4c, 0x2d, 0x1, 0xf, 0x83, 0xc2, 0xd]; -_T ID_Continue = [0x30, 0xa, 0x7, 0x1a, 0x4, 0x1, 0x1, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x1, 0x1, 0x2, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xca, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x11, 0x75, 0x1, 0x2, 0x2, 0x4, 0x1, 0x1, 0x6, 0x5, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x1, 0x5, 0x2, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x1, 0x6, 0x29, 0x8, 0x2d, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x8, 0x1b, 0x4, 0x4, 0x1d, 0xb, 0x5, 0x4a, 0x4, 0x66, 0x1, 0x8, 0x2, 0xa, 0x1, 0x13, 0x2, 0x1, 0x10, 0x3b, 0x2, 0x65, 0xe, 0x36, 0x4, 0x1, 0x2, 0x1, 0x2, 0x2e, 0x12, 0x1c, 0x4, 0xb, 0x5, 0x18, 0x1, 0x6, 0x9, 0x4a, 0x1, 0x80, 0x81, 0x2, 0xa, 0x1, 0x13, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x2, 0x9, 0x2, 0x2, 0x2, 0x4, 0x8, 0x1, 0x4, 0x2, 0x1, 0x5, 0x2, 0xc, 0xa, 0x1, 0x1, 0x1, 0x2, 0x3, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x5, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x7, 0x4, 0x1, 0x1, 0x7, 0x10, 0xb, 0x3, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x3, 0x1, 0x3, 0x2, 0x1, 0xf, 0x4, 0x2, 0xa, 0x9, 0x7, 0x1, 0x3, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0x9, 0x2, 0x2, 0x2, 0x3, 0x7, 0x3, 0x4, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x1, 0x10, 0x2, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x4, 0x5, 0x3, 0x3, 0x1, 0x4, 0x2, 0x1, 0x6, 0x1, 0xe, 0xa, 0x10, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x1, 0x3, 0x2, 0x1, 0x2, 0x4, 0x2, 0xa, 0x10, 0x4, 0x1, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x6, 0x2, 0x1, 0x4, 0x2, 0xa, 0x1, 0x3, 0xc, 0xd, 0x1, 0x3, 0x1, 0x33, 0x1, 0x3, 0x1, 0x5, 0x5, 0x4, 0x7, 0x5, 0x2, 0xa, 0xa, 0x6, 0x1, 0x3, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x8, 0x6, 0xa, 0x2, 0x2, 0xd, 0x3a, 0x5, 0xf, 0x1, 0xa, 0x27, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0x17, 0x2, 0x5, 0x1, 0x1, 0x1, 0x7, 0x1, 0xa, 0x2, 0x4, 0x20, 0x1, 0x17, 0x2, 0x6, 0xa, 0xb, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0xa, 0x1, 0x24, 0x4, 0x14, 0x1, 0x12, 0x1, 0x24, 0x9, 0x1, 0x39, 0x4a, 0x6, 0x4e, 0x2, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x81, 0x4d, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x2, 0x3, 0x9, 0x9, 0xe, 0x10, 0x10, 0x56, 0x2, 0x6, 0x3, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x3, 0xb, 0x7, 0x16, 0x9, 0x16, 0xb, 0x14, 0xc, 0xd, 0x1, 0x3, 0x1, 0x2, 0xc, 0x54, 0x3, 0x1, 0x4, 0x2, 0x2, 0xa, 0x21, 0x3, 0x1, 0xb, 0x6, 0x59, 0x7, 0x2b, 0x5, 0x46, 0xa, 0x1f, 0x1, 0xc, 0x4, 0xc, 0xa, 0x28, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x6, 0xb, 0x25, 0x1c, 0x4, 0x3f, 0x1, 0x1d, 0x2, 0xb, 0x6, 0xa, 0xd, 0x1, 0x8, 0xe, 0x1, 0x10, 0x31, 0x4d, 0x3, 0xa, 0x11, 0x9, 0xc, 0x74, 0xc, 0x38, 0x8, 0xa, 0x3, 0x31, 0x2, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x10, 0x3, 0x1, 0x27, 0x5, 0x82, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x42, 0x2, 0x13, 0x1, 0x1c, 0x1, 0xd, 0x1, 0x10, 0xd, 0x33, 0xd, 0x4, 0x1, 0x3, 0xc, 0x11, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x10, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x29, 0x8a, 0x77, 0x80, 0xe5, 0x6, 0x9, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x1, 0xf, 0x18, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x20, 0x82, 0x5, 0x3, 0x19, 0xf, 0x1, 0x5, 0x2, 0x5, 0x4, 0x56, 0x2, 0x7, 0x1, 0x5a, 0x1, 0x4, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x8d, 0x43, 0x2e, 0x2, 0x81, 0xd, 0x3, 0x1c, 0x14, 0x30, 0x4, 0xa, 0x1, 0x73, 0x25, 0x9, 0x2, 0x67, 0x2, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x36, 0x4, 0x1, 0x13, 0x34, 0xc, 0x46, 0xa, 0xa, 0x6, 0x18, 0x3, 0x1, 0x1, 0x31, 0x2, 0x24, 0xc, 0x1d, 0x3, 0x41, 0xe, 0xb, 0x6, 0x1f, 0x1, 0x37, 0x9, 0xe, 0x2, 0xa, 0x6, 0x17, 0x3, 0x49, 0x18, 0x3, 0x2, 0x10, 0x2, 0x5, 0xa, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x2b, 0x1, 0xe, 0x6, 0x7b, 0x1, 0x2, 0x2, 0xa, 0x6, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0xc, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x81, 0x6b, 0x12, 0x40, 0x2, 0x36, 0x28, 0xc, 0x4, 0x10, 0x10, 0x10, 0x3, 0x2, 0x18, 0x3, 0x20, 0x5, 0x1, 0x80, 0x87, 0x13, 0xa, 0x7, 0x1a, 0x4, 0x1, 0x1, 0x1a, 0xb, 0x59, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x45, 0x35, 0x80, 0x88, 0x1, 0x80, 0x82, 0x1d, 0x3, 0x31, 0xf, 0x1, 0x1f, 0x20, 0xd, 0x1e, 0x5, 0x2b, 0x5, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x1, 0x5, 0x2a, 0x80, 0x9e, 0x2, 0xa, 0x6, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xc, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x4, 0x1, 0x2, 0x5, 0x8, 0x1, 0x3, 0x1, 0x1d, 0x2, 0x3, 0x4, 0x1, 0x20, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1e, 0x19, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x37, 0x33, 0xd, 0x33, 0xd, 0x28, 0x8, 0xa, 0x81, 0x46, 0x2a, 0x1, 0x2, 0x3, 0x2, 0x4b, 0x20, 0xa, 0x1, 0x8, 0x21, 0x1f, 0x16, 0x2a, 0x15, 0x1b, 0x17, 0x9, 0x47, 0x1f, 0x10, 0x9, 0x3c, 0x7, 0x1, 0xd, 0x19, 0x7, 0xa, 0x6, 0x35, 0x1, 0xa, 0x4, 0x4, 0x8, 0x24, 0x2, 0x1, 0x9, 0x45, 0x4, 0x4, 0x1, 0xd, 0x1, 0x1, 0x23, 0x12, 0x1, 0x25, 0x6, 0x4, 0x3e, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x3b, 0x5, 0xa, 0x6, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x1, 0xa, 0x2, 0x2, 0x2, 0x3, 0x2, 0x1, 0x6, 0x1, 0x5, 0x7, 0x2, 0x7, 0x3, 0x5, 0x80, 0x8b, 0x4b, 0x5, 0xa, 0x4, 0x4, 0x1e, 0x46, 0x1, 0x1, 0x8, 0xa, 0x80, 0xa6, 0x36, 0x2, 0x9, 0x17, 0x6, 0x22, 0x41, 0x3, 0x1, 0xb, 0xa, 0x26, 0x39, 0x7, 0xa, 0x36, 0x1b, 0x2, 0xf, 0x4, 0xa, 0x6, 0x7, 0x80, 0xb9, 0x3b, 0x65, 0x4a, 0x15, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1e, 0x1, 0x2, 0x2, 0x9, 0xc, 0xa, 0x46, 0x8, 0x2, 0x2e, 0x2, 0x8, 0x1, 0x2, 0x1b, 0x3f, 0x8, 0x1, 0x8, 0x4a, 0x3, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x2d, 0x1, 0x9, 0xf, 0xa, 0x18, 0x1e, 0x2, 0x16, 0x1, 0xe, 0x49, 0x7, 0x1, 0x2, 0x1, 0x2c, 0x3, 0x1, 0x1, 0x2, 0x1, 0x9, 0x8, 0xa, 0x6, 0x6, 0x1, 0x2, 0x1, 0x25, 0x1, 0x2, 0x1, 0x6, 0x7, 0xa, 0x81, 0x36, 0x17, 0x9, 0x11, 0x1, 0x29, 0x3, 0x5, 0xd, 0xa, 0x56, 0x1, 0x4f, 0x83, 0x9a, 0x66, 0x6f, 0x11, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x10, 0x16, 0x8f, 0xaa, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x1, 0xa, 0x6, 0x4f, 0x1, 0xa, 0x6, 0x1e, 0x2, 0x5, 0xb, 0x37, 0x9, 0x4, 0xc, 0xa, 0x9, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x40, 0x80, 0x80, 0x4b, 0x4, 0x39, 0x7, 0x11, 0x40, 0x2, 0x1, 0x2, 0xb, 0x2, 0xe, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x3, 0x2, 0x92, 0x61, 0x2e, 0x2, 0x17, 0x82, 0x1e, 0x5, 0x3, 0x6, 0x8, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x80, 0x94, 0x3, 0x81, 0xbb, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x2, 0x32, 0x82, 0x0, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x16, 0x5, 0x1, 0xf, 0x84, 0x50, 0x1f, 0x6, 0x6, 0x80, 0xd5, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x5, 0x3e, 0x21, 0x1, 0x70, 0x2d, 0x3, 0xe, 0x2, 0xa, 0x4, 0x1, 0x81, 0x41, 0x1f, 0x11, 0x3a, 0x81, 0xd6, 0x2a, 0x82, 0xe6, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0xb, 0x7, 0x29, 0x4c, 0x4, 0xa, 0x84, 0xa6, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x8d, 0x34, 0xa, 0x84, 0x6, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60, 0xaa, 0xdd, 0x50, 0x80, 0xf0]; -_T Ideographic = [0xa0, 0x30, 0x6, 0x2, 0x19, 0x9, 0xe, 0x3, 0x83, 0xc5, 0x99, 0xc0, 0x40, 0xa0, 0x52, 0x0, 0xa0, 0x59, 0x0, 0x81, 0x6e, 0x2, 0x6a, 0xa0, 0x75, 0xa, 0x1, 0x1b, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x24, 0x67, 0x81, 0x8c, 0xa0, 0x4d, 0x4, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Cf = [0x80, 0xad, 0x1, 0x85, 0x52, 0x6, 0x16, 0x1, 0x80, 0xc0, 0x1, 0x31, 0x1, 0x81, 0x80, 0x2, 0x50, 0x1, 0x8f, 0x2b, 0x1, 0x87, 0xfc, 0x5, 0x1a, 0x5, 0x31, 0x5, 0x1, 0xa, 0xa0, 0xde, 0x8f, 0x1, 0x80, 0xf9, 0x3, 0x90, 0xc1, 0x1, 0xf, 0x1, 0xa0, 0x23, 0x62, 0x10, 0xa0, 0x88, 0x60, 0x4, 0x94, 0xcf, 0x8, 0xac, 0x2e, 0x86, 0x1, 0x1e, 0x60]; -_T So = [0x80, 0xa6, 0x1, 0x2, 0x1, 0x4, 0x1, 0x1, 0x1, 0x83, 0xd1, 0x1, 0x81, 0xa, 0x2, 0x7f, 0x2, 0x80, 0xce, 0x1, 0xa, 0x1, 0x13, 0x2, 0x80, 0xf7, 0x1, 0x82, 0x3, 0x1, 0x81, 0x75, 0x1, 0x80, 0x82, 0x6, 0x1, 0x1, 0x80, 0x84, 0x1, 0x80, 0xcf, 0x1, 0x29, 0x1, 0x81, 0x87, 0x3, 0xf, 0x1, 0x1, 0x3, 0x2, 0x6, 0x14, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0x85, 0x8, 0x1, 0x6, 0x1, 0x2, 0x5, 0x4, 0x80, 0xc5, 0x2, 0x82, 0xf0, 0xa, 0x82, 0xd3, 0x1, 0x82, 0xd2, 0x1, 0x80, 0x9d, 0x22, 0x81, 0x61, 0xa, 0x9, 0x9, 0x85, 0x83, 0x2, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0xb, 0x2, 0xe, 0x1, 0x1, 0x2, 0x1, 0x1, 0x3a, 0x2, 0x9, 0x5, 0x2, 0x4, 0x1, 0x2, 0x1, 0x2, 0x1, 0x7, 0x1, 0x1f, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1f, 0x81, 0xc, 0x8, 0x4, 0x14, 0x2, 0x7, 0x2, 0x51, 0x1, 0x1e, 0x19, 0x28, 0x6, 0x45, 0x19, 0xb, 0x51, 0x4e, 0x16, 0x80, 0xb7, 0x1, 0x9, 0x1, 0x36, 0x8, 0x6f, 0x1, 0x80, 0xf8, 0x2c, 0x2c, 0x40, 0x81, 0x0, 0x82, 0x0, 0x30, 0x15, 0x2, 0x6, 0x27, 0x2, 0x20, 0x1, 0x69, 0x80, 0xe5, 0x6, 0x81, 0x65, 0x2, 0x2e, 0x1a, 0x1, 0x59, 0xc, 0x80, 0xd6, 0x1a, 0xc, 0x8, 0x1, 0xd, 0x2, 0xc, 0x1, 0x15, 0x2, 0x6, 0x2, 0x81, 0x50, 0x2, 0x4, 0xa, 0x20, 0x24, 0x1c, 0x1f, 0xb, 0x1e, 0x8, 0x1, 0xf, 0x20, 0xa, 0x27, 0xf, 0x81, 0x40, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x90, 0x37, 0x83, 0x61, 0x4, 0xa, 0x2, 0x1, 0x1, 0x82, 0x3d, 0x3, 0xa0, 0x52, 0xc6, 0x10, 0x7f, 0x1, 0x2d, 0x3, 0x81, 0xe4, 0x1, 0x3, 0x1, 0x4, 0x2, 0xd, 0x2, 0x81, 0x39, 0x9, 0x39, 0x11, 0x2, 0x3, 0x1, 0xd, 0x3, 0x1, 0x2f, 0x2d, 0x86, 0x7a, 0x2, 0x82, 0x4f, 0x1, 0x8c, 0x76, 0x1, 0x88, 0x95, 0x8, 0x4, 0x11, 0xa0, 0x4b, 0x4a, 0x4, 0x5, 0x1, 0xa0, 0x51, 0x56, 0x1, 0x92, 0xb3, 0x74, 0x3c, 0x80, 0xf6, 0xa, 0x27, 0x2, 0x3c, 0x5, 0x3, 0x16, 0x2, 0x7, 0x1e, 0x4, 0x3d, 0x15, 0x42, 0x3, 0x1, 0x80, 0xba, 0x57, 0x84, 0xa9, 0x82, 0x0, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x2, 0x86, 0xc8, 0x1, 0x8b, 0x5c, 0x1, 0x80, 0x81, 0x1, 0x82, 0xd1, 0x2c, 0x4, 0x64, 0xc, 0xf, 0x2, 0xf, 0x1, 0xf, 0x1, 0x25, 0x17, 0x80, 0xa1, 0x38, 0x1d, 0xd, 0x2c, 0x4, 0x9, 0x7, 0x2, 0xe, 0x6, 0x80, 0x9a, 0x80, 0xfb, 0x5, 0x82, 0xd8, 0x4, 0x11, 0x3, 0xd, 0x3, 0x77, 0x4, 0x5f, 0x6, 0xc, 0x4, 0x1, 0xf, 0xc, 0x4, 0x38, 0x8, 0xa, 0x6, 0x28, 0x8, 0x1e, 0x2, 0x2, 0x4e, 0x81, 0x54, 0xc, 0xe, 0x2, 0xd, 0x3, 0x9, 0x7, 0x2e, 0x1, 0x7, 0x8, 0xe, 0x4, 0x9, 0x7, 0x9, 0x7, 0x80, 0x93, 0x1, 0x37]; -_T White_Space = [0x9, 0x5, 0x12, 0x1, 0x64, 0x1, 0x1a, 0x1, 0x95, 0xdf, 0x1, 0x89, 0x7f, 0xb, 0x1d, 0x2, 0x5, 0x1, 0x2f, 0x1, 0x8f, 0xa0, 0x1]; -_T Sentence_Terminal = [0x21, 0x1, 0xc, 0x1, 0x10, 0x1, 0x85, 0x49, 0x1, 0x80, 0x93, 0x3, 0x80, 0xb4, 0x1, 0x2b, 0x3, 0x80, 0xf6, 0x1, 0x3d, 0x1, 0x1, 0x1, 0x3, 0x2, 0x81, 0x25, 0x2, 0x86, 0xe4, 0x2, 0x83, 0x16, 0x1, 0x4, 0x2, 0x83, 0x5, 0x1, 0x80, 0xc6, 0x2, 0x80, 0xcc, 0x1, 0x5, 0x1, 0x81, 0x3a, 0x2, 0x81, 0x62, 0x4, 0x80, 0xae, 0x2, 0x2, 0x2, 0x1d, 0x2, 0x80, 0xbc, 0x2, 0x41, 0x2, 0x83, 0xbc, 0x2, 0x9, 0x3, 0x8d, 0xe4, 0x1, 0xd, 0x1, 0x16, 0x2, 0x81, 0xad, 0x1, 0xa0, 0x74, 0xfc, 0x1, 0x81, 0xe, 0x2, 0x80, 0xe3, 0x1, 0x3, 0x1, 0x81, 0x7e, 0x2, 0x56, 0x2, 0x5f, 0x1, 0x80, 0x98, 0x2, 0x80, 0x93, 0x3, 0x80, 0x90, 0x2, 0x80, 0xf9, 0x1, 0xa0, 0x52, 0x66, 0x1, 0x3, 0x2, 0x80, 0xa9, 0x1, 0xc, 0x1, 0x10, 0x1, 0x41, 0x1, 0x8a, 0xf4, 0x2, 0x84, 0xfd, 0x5, 0x2c, 0x4, 0x80, 0xbd, 0x2, 0x75, 0x4, 0x7f, 0x3, 0x80, 0x81, 0x2, 0x6, 0x1, 0x10, 0x2, 0x58, 0x2, 0x1, 0x2, 0x6c, 0x1, 0x81, 0xa1, 0x2, 0x81, 0x75, 0x2, 0x5, 0xf, 0x69, 0x2, 0x80, 0xf9, 0x3, 0x82, 0x5, 0x1, 0x1, 0x1, 0x80, 0xfb, 0x2, 0x57, 0x2, 0x81, 0xa4, 0x2, 0x82, 0xb4, 0x2, 0x4a, 0x2, 0xa0, 0x4b, 0x29, 0x2, 0x80, 0x85, 0x1, 0x41, 0x2, 0xb, 0x1, 0x83, 0x53, 0x1, 0xa0, 0x4e, 0x6, 0x1, 0x9d, 0xe8, 0x1]; -_T Lt = [0x81, 0xc5, 0x1, 0x2, 0x1, 0x2, 0x1, 0x26, 0x1, 0x9d, 0x95, 0x8, 0x8, 0x8, 0x8, 0x8, 0xc, 0x1, 0xf, 0x1, 0x2f, 0x1]; -_T Other_Lowercase = [0x80, 0xaa, 0x1, 0xf, 0x1, 0x81, 0xf5, 0x9, 0x7, 0x2, 0x1e, 0x5, 0x60, 0x1, 0x34, 0x1, 0x8d, 0x81, 0x1, 0x8c, 0x2f, 0x3f, 0xd, 0x1, 0x22, 0x25, 0x82, 0xb1, 0x1, 0xd, 0x1, 0x10, 0xd, 0x80, 0xd3, 0x10, 0x83, 0x50, 0x1a, 0x87, 0x92, 0x2, 0xa0, 0x7a, 0x1e, 0x2, 0x80, 0xd2, 0x1, 0x80, 0x81, 0x3, 0x3, 0x2, 0x83, 0x62, 0x4, 0x9, 0x1, 0xa0, 0x5c, 0x16, 0x1, 0x2, 0x3, 0x1, 0x2a, 0x1, 0x9, 0xa0, 0xd8, 0x75, 0x3e]; -_T Other_Alphabetic = [0x83, 0x45, 0x1, 0x82, 0x6a, 0xe, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x48, 0xb, 0x30, 0xd, 0x1, 0x7, 0x10, 0x1, 0x65, 0x7, 0x4, 0x4, 0x2, 0x2, 0x4, 0x1, 0x23, 0x1, 0x1e, 0x10, 0x66, 0xb, 0x65, 0x2, 0x3, 0x9, 0x1, 0x3, 0x1, 0x4, 0x80, 0xa7, 0xc, 0x3, 0x7, 0x6, 0x14, 0x36, 0x2, 0x2, 0xf, 0x1, 0x2, 0x5, 0x3, 0xa, 0x2, 0x1d, 0x3, 0x3a, 0x7, 0x2, 0x2, 0x2, 0x2, 0xa, 0x1, 0xa, 0x2, 0x1d, 0x3, 0x3a, 0x5, 0x4, 0x2, 0x2, 0x2, 0x4, 0x1, 0x1e, 0x2, 0x3, 0x1, 0xb, 0x3, 0x3a, 0x8, 0x1, 0x3, 0x1, 0x2, 0x15, 0x2, 0x16, 0x3, 0x4, 0x3, 0x3a, 0x7, 0x2, 0x2, 0x2, 0x2, 0x9, 0x2, 0xa, 0x2, 0x1e, 0x1, 0x3b, 0x5, 0x3, 0x3, 0x1, 0x3, 0xa, 0x1, 0x28, 0x5, 0x39, 0x7, 0x1, 0x3, 0x1, 0x3, 0x8, 0x2, 0xb, 0x2, 0x1d, 0x3, 0x3a, 0x7, 0x1, 0x3, 0x1, 0x3, 0x8, 0x2, 0xb, 0x2, 0xf, 0x1, 0xc, 0x4, 0x3a, 0x7, 0x1, 0x3, 0x1, 0x3, 0xa, 0x1, 0xa, 0x2, 0x1d, 0x3, 0x4b, 0x6, 0x1, 0x1, 0x1, 0x8, 0x12, 0x2, 0x3d, 0x1, 0x2, 0x7, 0x12, 0x1, 0x63, 0x1, 0x2, 0x6, 0x1, 0x2, 0x10, 0x1, 0x80, 0xa3, 0x13, 0x9, 0xb, 0x1, 0x24, 0x6e, 0xc, 0x1, 0x1, 0x2, 0x4, 0x17, 0x4, 0x4, 0x3, 0x1, 0x3, 0x2, 0x7, 0x3, 0x4, 0xd, 0xc, 0x1, 0x1, 0xa, 0x4, 0x86, 0x74, 0x2, 0x1e, 0x2, 0x1e, 0x2, 0x1e, 0x2, 0x42, 0x13, 0x80, 0xbc, 0x2, 0x22, 0x1, 0x76, 0xc, 0x4, 0x9, 0x80, 0xde, 0x5, 0x39, 0xa, 0x2, 0x14, 0x4a, 0x2, 0xb, 0x3, 0x31, 0x5, 0x30, 0xf, 0x3c, 0x3, 0x1e, 0x9, 0x2, 0x2, 0x39, 0xb, 0x32, 0x13, 0x81, 0xb0, 0xe, 0x86, 0xc1, 0x34, 0x88, 0xf6, 0x20, 0xa0, 0x78, 0x74, 0x8, 0x22, 0x2, 0x81, 0x62, 0x1, 0x8, 0x1, 0x17, 0x5, 0x58, 0x2, 0x32, 0x10, 0x1, 0x1, 0x39, 0x1, 0x26, 0x5, 0x1c, 0xc, 0x2d, 0x4, 0x30, 0xc, 0x25, 0x1, 0x43, 0xe, 0xc, 0x1, 0x8, 0x2, 0x2d, 0x3, 0x32, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x1, 0x2c, 0x5, 0x5, 0x1, 0x80, 0xed, 0x8, 0xa0, 0x4f, 0x33, 0x1, 0x88, 0x57, 0x5, 0x86, 0x86, 0x3, 0x1, 0x2, 0x5, 0x4, 0x83, 0x14, 0x4, 0x81, 0x83, 0x2, 0x81, 0x53, 0x3, 0x35, 0xe, 0x2d, 0x2, 0xb, 0x3, 0x2d, 0x9, 0x9, 0x1, 0x3d, 0x3, 0x24, 0xc, 0x12, 0x2, 0x39, 0x3, 0x30, 0xd, 0xe, 0x2, 0x5c, 0x9, 0x2, 0x1, 0x6, 0x1, 0x2, 0x1, 0x80, 0x9d, 0xa, 0x17, 0x4, 0x3a, 0x7, 0x2, 0x2, 0x2, 0x2, 0xa, 0x1, 0xa, 0x2, 0x80, 0xd1, 0xd, 0x1, 0x3, 0x6a, 0x12, 0x80, 0xed, 0x7, 0x2, 0x7, 0x1d, 0x2, 0x52, 0xf, 0x1, 0x1, 0x6a, 0xb, 0x67, 0xe, 0x81, 0x1, 0xd, 0x80, 0xf7, 0x6, 0x1, 0x2, 0x2, 0x2, 0x3, 0x1, 0x1, 0x1, 0x80, 0x8e, 0x7, 0x2, 0x6, 0x4, 0x1, 0x1c, 0xa, 0x2a, 0x5, 0x1, 0x4, 0x12, 0xb, 0x2e, 0xe, 0x81, 0x97, 0x8, 0x1, 0x7, 0x53, 0x16, 0x1, 0xe, 0x7a, 0x6, 0x3, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x3, 0x1, 0x42, 0x5, 0x1, 0x2, 0x1, 0x4, 0x81, 0x5c, 0x4, 0x9, 0x2, 0x1, 0x1, 0x30, 0x7, 0x3, 0x3, 0xa0, 0x50, 0xe, 0x1, 0x1, 0x37, 0x7, 0x4, 0x5d, 0x2, 0xa0, 0x4c, 0xac, 0x1, 0xa0, 0x23, 0x61, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x64, 0x1, 0x88, 0xb7, 0x1, 0x87, 0xe8, 0x1a, 0x6, 0x1a, 0x6, 0x1a]; -_T XID_Continue = [0x30, 0xa, 0x7, 0x1a, 0x4, 0x1, 0x1, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x1, 0x1, 0x2, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xca, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x11, 0x75, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x6, 0x5, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x1, 0x5, 0x2, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x1, 0x6, 0x29, 0x8, 0x2d, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x8, 0x1b, 0x4, 0x4, 0x1d, 0xb, 0x5, 0x4a, 0x4, 0x66, 0x1, 0x8, 0x2, 0xa, 0x1, 0x13, 0x2, 0x1, 0x10, 0x3b, 0x2, 0x65, 0xe, 0x36, 0x4, 0x1, 0x2, 0x1, 0x2, 0x2e, 0x12, 0x1c, 0x4, 0xb, 0x5, 0x18, 0x1, 0x6, 0x9, 0x4a, 0x1, 0x80, 0x81, 0x2, 0xa, 0x1, 0x13, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x2, 0x9, 0x2, 0x2, 0x2, 0x4, 0x8, 0x1, 0x4, 0x2, 0x1, 0x5, 0x2, 0xc, 0xa, 0x1, 0x1, 0x1, 0x2, 0x3, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x5, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x7, 0x4, 0x1, 0x1, 0x7, 0x10, 0xb, 0x3, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x3, 0x1, 0x3, 0x2, 0x1, 0xf, 0x4, 0x2, 0xa, 0x9, 0x7, 0x1, 0x3, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0x9, 0x2, 0x2, 0x2, 0x3, 0x7, 0x3, 0x4, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x1, 0x10, 0x2, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x4, 0x5, 0x3, 0x3, 0x1, 0x4, 0x2, 0x1, 0x6, 0x1, 0xe, 0xa, 0x10, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x1, 0x3, 0x2, 0x1, 0x2, 0x4, 0x2, 0xa, 0x10, 0x4, 0x1, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x6, 0x2, 0x1, 0x4, 0x2, 0xa, 0x1, 0x3, 0xc, 0xd, 0x1, 0x3, 0x1, 0x33, 0x1, 0x3, 0x1, 0x5, 0x5, 0x4, 0x7, 0x5, 0x2, 0xa, 0xa, 0x6, 0x1, 0x3, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x8, 0x6, 0xa, 0x2, 0x2, 0xd, 0x3a, 0x5, 0xf, 0x1, 0xa, 0x27, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0x17, 0x2, 0x5, 0x1, 0x1, 0x1, 0x7, 0x1, 0xa, 0x2, 0x4, 0x20, 0x1, 0x17, 0x2, 0x6, 0xa, 0xb, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0xa, 0x1, 0x24, 0x4, 0x14, 0x1, 0x12, 0x1, 0x24, 0x9, 0x1, 0x39, 0x4a, 0x6, 0x4e, 0x2, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x81, 0x4d, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x2, 0x3, 0x9, 0x9, 0xe, 0x10, 0x10, 0x56, 0x2, 0x6, 0x3, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x3, 0xb, 0x7, 0x16, 0x9, 0x16, 0xb, 0x14, 0xc, 0xd, 0x1, 0x3, 0x1, 0x2, 0xc, 0x54, 0x3, 0x1, 0x4, 0x2, 0x2, 0xa, 0x21, 0x3, 0x1, 0xb, 0x6, 0x59, 0x7, 0x2b, 0x5, 0x46, 0xa, 0x1f, 0x1, 0xc, 0x4, 0xc, 0xa, 0x28, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x6, 0xb, 0x25, 0x1c, 0x4, 0x3f, 0x1, 0x1d, 0x2, 0xb, 0x6, 0xa, 0xd, 0x1, 0x8, 0xe, 0x1, 0x10, 0x31, 0x4d, 0x3, 0xa, 0x11, 0x9, 0xc, 0x74, 0xc, 0x38, 0x8, 0xa, 0x3, 0x31, 0x2, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x10, 0x3, 0x1, 0x27, 0x5, 0x82, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x42, 0x2, 0x13, 0x1, 0x1c, 0x1, 0xd, 0x1, 0x10, 0xd, 0x33, 0xd, 0x4, 0x1, 0x3, 0xc, 0x11, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x10, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x29, 0x8a, 0x77, 0x80, 0xe5, 0x6, 0x9, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x1, 0xf, 0x18, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x20, 0x82, 0x5, 0x3, 0x19, 0xf, 0x1, 0x5, 0x2, 0x5, 0x4, 0x56, 0x2, 0x2, 0x2, 0x3, 0x1, 0x5a, 0x1, 0x4, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x8d, 0x43, 0x2e, 0x2, 0x81, 0xd, 0x3, 0x1c, 0x14, 0x30, 0x4, 0xa, 0x1, 0x73, 0x25, 0x9, 0x2, 0x67, 0x2, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x36, 0x4, 0x1, 0x13, 0x34, 0xc, 0x46, 0xa, 0xa, 0x6, 0x18, 0x3, 0x1, 0x1, 0x31, 0x2, 0x24, 0xc, 0x1d, 0x3, 0x41, 0xe, 0xb, 0x6, 0x1f, 0x1, 0x37, 0x9, 0xe, 0x2, 0xa, 0x6, 0x17, 0x3, 0x49, 0x18, 0x3, 0x2, 0x10, 0x2, 0x5, 0xa, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x2b, 0x1, 0xe, 0x6, 0x7b, 0x1, 0x2, 0x2, 0xa, 0x6, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0xc, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x80, 0x8b, 0x6, 0x80, 0xda, 0x12, 0x40, 0x2, 0x36, 0x28, 0xa, 0x6, 0x10, 0x10, 0x10, 0x3, 0x2, 0x18, 0x3, 0x21, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7e, 0x13, 0xa, 0x7, 0x1a, 0x4, 0x1, 0x1, 0x1a, 0xb, 0x59, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x45, 0x35, 0x80, 0x88, 0x1, 0x80, 0x82, 0x1d, 0x3, 0x31, 0xf, 0x1, 0x1f, 0x20, 0xd, 0x1e, 0x5, 0x2b, 0x5, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x1, 0x5, 0x2a, 0x80, 0x9e, 0x2, 0xa, 0x6, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xc, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x4, 0x1, 0x2, 0x5, 0x8, 0x1, 0x3, 0x1, 0x1d, 0x2, 0x3, 0x4, 0x1, 0x20, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1e, 0x19, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x37, 0x33, 0xd, 0x33, 0xd, 0x28, 0x8, 0xa, 0x81, 0x46, 0x2a, 0x1, 0x2, 0x3, 0x2, 0x4b, 0x20, 0xa, 0x1, 0x8, 0x21, 0x1f, 0x16, 0x2a, 0x15, 0x1b, 0x17, 0x9, 0x47, 0x1f, 0x10, 0x9, 0x3c, 0x7, 0x1, 0xd, 0x19, 0x7, 0xa, 0x6, 0x35, 0x1, 0xa, 0x4, 0x4, 0x8, 0x24, 0x2, 0x1, 0x9, 0x45, 0x4, 0x4, 0x1, 0xd, 0x1, 0x1, 0x23, 0x12, 0x1, 0x25, 0x6, 0x4, 0x3e, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x3b, 0x5, 0xa, 0x6, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x1, 0xa, 0x2, 0x2, 0x2, 0x3, 0x2, 0x1, 0x6, 0x1, 0x5, 0x7, 0x2, 0x7, 0x3, 0x5, 0x80, 0x8b, 0x4b, 0x5, 0xa, 0x4, 0x4, 0x1e, 0x46, 0x1, 0x1, 0x8, 0xa, 0x80, 0xa6, 0x36, 0x2, 0x9, 0x17, 0x6, 0x22, 0x41, 0x3, 0x1, 0xb, 0xa, 0x26, 0x39, 0x7, 0xa, 0x36, 0x1b, 0x2, 0xf, 0x4, 0xa, 0x6, 0x7, 0x80, 0xb9, 0x3b, 0x65, 0x4a, 0x15, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1e, 0x1, 0x2, 0x2, 0x9, 0xc, 0xa, 0x46, 0x8, 0x2, 0x2e, 0x2, 0x8, 0x1, 0x2, 0x1b, 0x3f, 0x8, 0x1, 0x8, 0x4a, 0x3, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x2d, 0x1, 0x9, 0xf, 0xa, 0x18, 0x1e, 0x2, 0x16, 0x1, 0xe, 0x49, 0x7, 0x1, 0x2, 0x1, 0x2c, 0x3, 0x1, 0x1, 0x2, 0x1, 0x9, 0x8, 0xa, 0x6, 0x6, 0x1, 0x2, 0x1, 0x25, 0x1, 0x2, 0x1, 0x6, 0x7, 0xa, 0x81, 0x36, 0x17, 0x9, 0x11, 0x1, 0x29, 0x3, 0x5, 0xd, 0xa, 0x56, 0x1, 0x4f, 0x83, 0x9a, 0x66, 0x6f, 0x11, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x10, 0x16, 0x8f, 0xaa, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x1, 0xa, 0x6, 0x4f, 0x1, 0xa, 0x6, 0x1e, 0x2, 0x5, 0xb, 0x37, 0x9, 0x4, 0xc, 0xa, 0x9, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x40, 0x80, 0x80, 0x4b, 0x4, 0x39, 0x7, 0x11, 0x40, 0x2, 0x1, 0x2, 0xb, 0x2, 0xe, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x3, 0x2, 0x92, 0x61, 0x2e, 0x2, 0x17, 0x82, 0x1e, 0x5, 0x3, 0x6, 0x8, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x80, 0x94, 0x3, 0x81, 0xbb, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x2, 0x32, 0x82, 0x0, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x16, 0x5, 0x1, 0xf, 0x84, 0x50, 0x1f, 0x6, 0x6, 0x80, 0xd5, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x5, 0x3e, 0x21, 0x1, 0x70, 0x2d, 0x3, 0xe, 0x2, 0xa, 0x4, 0x1, 0x81, 0x41, 0x1f, 0x11, 0x3a, 0x81, 0xd6, 0x2a, 0x82, 0xe6, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0xb, 0x7, 0x29, 0x4c, 0x4, 0xa, 0x84, 0xa6, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x8d, 0x34, 0xa, 0x84, 0x6, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60, 0xaa, 0xdd, 0x50, 0x80, 0xf0]; -_T Cc = [0x0, 0x20, 0x5f, 0x21]; -_T Regional_Indicator = [0xa1, 0xf1, 0xe6, 0x1a]; -_T Sc = [0x24, 0x1, 0x7d, 0x4, 0x84, 0xe9, 0x1, 0x7b, 0x1, 0x81, 0xf2, 0x2, 0x81, 0xf2, 0x2, 0x7, 0x1, 0x80, 0xf5, 0x1, 0x81, 0x7, 0x1, 0x82, 0x45, 0x1, 0x89, 0x9b, 0x1, 0x88, 0xc4, 0x21, 0xa0, 0x87, 0x77, 0x1, 0xa0, 0x55, 0xc3, 0x1, 0x6c, 0x1, 0x80, 0x9a, 0x1, 0x80, 0xdb, 0x2, 0x3, 0x2, 0x9f, 0xf6, 0x4, 0xa0, 0xc3, 0x1e, 0x1, 0x89, 0xb0, 0x1]; -_T Pe = [0x29, 0x1, 0x33, 0x1, 0x1f, 0x1, 0x8e, 0xbd, 0x1, 0x1, 0x1, 0x87, 0x5e, 0x1, 0x89, 0xa9, 0x1, 0x37, 0x1, 0xf, 0x1, 0x82, 0x7a, 0x1, 0x1, 0x1, 0x1e, 0x1, 0x84, 0x3e, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x50, 0x1, 0x20, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0x94, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x40, 0x1, 0x1, 0x1, 0x21, 0x1, 0x84, 0x25, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2c, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0xac, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0xa0, 0xcd, 0x1e, 0x1, 0x80, 0xd9, 0x1, 0x1d, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x11, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0xaa, 0x1, 0x33, 0x1, 0x1f, 0x1, 0x2, 0x1, 0x2, 0x1]; -_T Pf = [0x80, 0xbb, 0x1, 0x9f, 0x5d, 0x1, 0x3, 0x1, 0x1c, 0x1, 0x8d, 0xc8, 0x1, 0x1, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x3, 0x1]; -_T Other_Uppercase = [0xa0, 0x21, 0x60, 0x10, 0x83, 0x46, 0x1a, 0xa1, 0xcc, 0x60, 0x1a, 0x6, 0x1a, 0x6, 0x1a]; -_T Cn = [0x83, 0x78, 0x2, 0x6, 0x4, 0x7, 0x1, 0x1, 0x1, 0x14, 0x1, 0x81, 0x8d, 0x1, 0x26, 0x2, 0x32, 0x2, 0x3, 0x1, 0x37, 0x8, 0x1b, 0x4, 0x6, 0xb, 0x81, 0xe, 0x1, 0x3c, 0x2, 0x65, 0xe, 0x3b, 0x2, 0x31, 0x2, 0xf, 0x1, 0x1c, 0x2, 0x1, 0x1, 0xb, 0x5, 0x1f, 0x1, 0x2, 0x6, 0x80, 0xec, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x2, 0x9, 0x2, 0x2, 0x2, 0x4, 0x8, 0x1, 0x4, 0x2, 0x1, 0x5, 0x2, 0x19, 0x2, 0x3, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x5, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x7, 0x4, 0x1, 0x1, 0x7, 0x11, 0xa, 0x3, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x3, 0x1, 0x3, 0x2, 0x1, 0xf, 0x4, 0x2, 0xc, 0x7, 0x7, 0x1, 0x3, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0x9, 0x2, 0x2, 0x2, 0x3, 0x7, 0x3, 0x4, 0x2, 0x1, 0x5, 0x2, 0x12, 0xa, 0x2, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x4, 0x5, 0x3, 0x3, 0x1, 0x4, 0x2, 0x1, 0x6, 0x1, 0xe, 0x15, 0x5, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x1, 0x3, 0x2, 0x1, 0x2, 0x4, 0x2, 0xa, 0x7, 0x16, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x6, 0x2, 0x1, 0x4, 0x2, 0xa, 0x1, 0x3, 0xc, 0xd, 0x1, 0x3, 0x1, 0x33, 0x1, 0x3, 0x1, 0x6, 0x4, 0x10, 0x2, 0x1a, 0x1, 0x3, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x8, 0x6, 0xa, 0x2, 0x3, 0xc, 0x3a, 0x4, 0x1d, 0x25, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0x17, 0x2, 0x5, 0x1, 0x1, 0x1, 0x7, 0x1, 0xa, 0x2, 0x4, 0x20, 0x48, 0x1, 0x24, 0x4, 0x27, 0x1, 0x24, 0x1, 0xf, 0x1, 0xd, 0x25, 0x80, 0xc6, 0x1, 0x1, 0x5, 0x1, 0x2, 0x81, 0x79, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x2, 0x20, 0x3, 0x1a, 0x6, 0x56, 0x2, 0x6, 0x2, 0x82, 0x9d, 0x3, 0x59, 0x7, 0x16, 0x9, 0x18, 0x9, 0x14, 0xc, 0xd, 0x1, 0x3, 0x1, 0x2, 0xc, 0x5e, 0x2, 0xa, 0x6, 0xa, 0x6, 0x1a, 0x6, 0x59, 0x7, 0x2b, 0x5, 0x46, 0xa, 0x1f, 0x1, 0xc, 0x4, 0xc, 0x4, 0x1, 0x3, 0x2a, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x6, 0xb, 0x3, 0x3e, 0x2, 0x41, 0x1, 0x1d, 0x2, 0xb, 0x6, 0xa, 0x6, 0xe, 0x2, 0x1f, 0x31, 0x4d, 0x3, 0x2f, 0x1, 0x74, 0x8, 0x3c, 0x3, 0xf, 0x3, 0x3c, 0x7, 0x2b, 0x2, 0xb, 0x8, 0x2b, 0x5, 0x82, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0xf, 0x1, 0xe, 0x2, 0x6, 0x1, 0x13, 0x2, 0x3, 0x1, 0x9, 0x1, 0x65, 0x1, 0xc, 0x2, 0x1b, 0x1, 0xd, 0x3, 0x21, 0xf, 0x21, 0xf, 0x80, 0x8c, 0x4, 0x82, 0x97, 0x19, 0xb, 0x15, 0x87, 0x14, 0x2, 0x20, 0x1, 0x81, 0x5d, 0x5, 0x2d, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x2, 0xe, 0x18, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7e, 0x22, 0x1a, 0x1, 0x59, 0xc, 0x80, 0xd6, 0x1a, 0xc, 0x4, 0x40, 0x1, 0x56, 0x2, 0x67, 0x5, 0x2b, 0x1, 0x5e, 0x1, 0x54, 0xc, 0x2f, 0x1, 0xa0, 0x72, 0x6d, 0x3, 0x37, 0x9, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x8, 0x80, 0xcb, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x3b, 0x3, 0xa, 0x6, 0x38, 0x8, 0x46, 0x8, 0xc, 0x6, 0x74, 0xb, 0x1e, 0x3, 0x4e, 0x1, 0xb, 0x4, 0x21, 0x1, 0x37, 0x9, 0xe, 0x2, 0xa, 0x2, 0x67, 0x18, 0x1c, 0xa, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x3c, 0x4, 0x7e, 0x2, 0xa, 0x6, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0x4, 0xa0, 0x22, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0x1a, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x7d, 0x10, 0x81, 0xbd, 0x2, 0x36, 0x7, 0x1, 0x20, 0x2a, 0x6, 0x33, 0x1, 0x13, 0x1, 0x4, 0x4, 0x5, 0x1, 0x80, 0x87, 0x2, 0x1, 0x1, 0x80, 0xbe, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x3, 0x7, 0x1, 0x7, 0xa, 0x5, 0x2, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x5, 0x3, 0x4, 0x2d, 0x3, 0x58, 0x1, 0xd, 0x3, 0x1, 0x2f, 0x2e, 0x80, 0x82, 0x1d, 0x3, 0x31, 0xf, 0x1c, 0x4, 0x24, 0x9, 0x1e, 0x5, 0x2b, 0x5, 0x1e, 0x1, 0x25, 0x4, 0xe, 0x2a, 0x80, 0x9e, 0x2, 0xa, 0x6, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xb, 0xc, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0x1, 0x48, 0x8, 0x9, 0x30, 0x13, 0x1, 0x2, 0x5, 0x21, 0x3, 0x1b, 0x5, 0x1, 0x40, 0x38, 0x4, 0x14, 0x2, 0x32, 0x1, 0x2, 0x5, 0x8, 0x1, 0x3, 0x1, 0x1d, 0x2, 0x3, 0x4, 0xa, 0x7, 0x9, 0x7, 0x40, 0x20, 0x27, 0x4, 0xc, 0x9, 0x36, 0x3, 0x1d, 0x2, 0x1b, 0x5, 0x1a, 0x7, 0x4, 0xc, 0x7, 0x50, 0x49, 0x37, 0x33, 0xd, 0x33, 0x7, 0x2e, 0x8, 0xa, 0x81, 0x26, 0x1f, 0x1, 0x2a, 0x1, 0x3, 0x2, 0x2, 0x4b, 0x2b, 0x8, 0x2a, 0x16, 0x1a, 0x26, 0x1c, 0x14, 0x17, 0x9, 0x4e, 0x4, 0x24, 0x9, 0x44, 0xa, 0x1, 0x2, 0x19, 0x7, 0xa, 0x6, 0x35, 0x1, 0x12, 0x8, 0x27, 0x9, 0x60, 0x1, 0x14, 0xb, 0x12, 0x1, 0x2f, 0x3e, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xb, 0x6, 0x3b, 0x5, 0xa, 0x6, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x1, 0xa, 0x2, 0x2, 0x2, 0x3, 0x2, 0x1, 0x6, 0x1, 0x5, 0x7, 0x2, 0x7, 0x3, 0x5, 0x80, 0x8b, 0x5c, 0x1, 0x5, 0x1e, 0x48, 0x8, 0xa, 0x80, 0xa6, 0x36, 0x2, 0x26, 0x22, 0x45, 0xb, 0xa, 0x6, 0xd, 0x13, 0x3a, 0x6, 0xa, 0x36, 0x1b, 0x2, 0xf, 0x4, 0x17, 0x80, 0xb9, 0x3c, 0x64, 0x53, 0xc, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1e, 0x1, 0x2, 0x2, 0xc, 0x9, 0xa, 0x46, 0x8, 0x2, 0x2e, 0x2, 0xb, 0x1b, 0x48, 0x8, 0x53, 0xd, 0x49, 0x7, 0xa, 0x80, 0xf6, 0x9, 0x1, 0x2d, 0x1, 0xe, 0xa, 0x1d, 0x3, 0x20, 0x2, 0x16, 0x1, 0xe, 0x49, 0x7, 0x1, 0x2, 0x1, 0x2c, 0x3, 0x1, 0x1, 0x2, 0x1, 0x9, 0x8, 0xa, 0x6, 0x6, 0x1, 0x2, 0x1, 0x25, 0x1, 0x2, 0x1, 0x6, 0x7, 0xa, 0x81, 0x36, 0x19, 0x7, 0x11, 0x1, 0x29, 0x3, 0x1c, 0x56, 0x1, 0xf, 0x32, 0xd, 0x83, 0x9b, 0x66, 0x6f, 0x1, 0x5, 0xb, 0x80, 0xc4, 0x8a, 0x4c, 0x63, 0xd, 0x84, 0x56, 0x8f, 0xaa, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x1, 0xa, 0x4, 0x51, 0x1, 0xa, 0x6, 0x1e, 0x2, 0x6, 0xa, 0x46, 0xa, 0xa, 0x1, 0x7, 0x1, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x4, 0x39, 0x7, 0x11, 0x40, 0x5, 0xb, 0x2, 0xe, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x2, 0x8, 0x92, 0x5c, 0x2e, 0x2, 0x17, 0x9, 0x74, 0x3c, 0x80, 0xf6, 0xa, 0x27, 0x2, 0x80, 0xc2, 0x15, 0x46, 0x7a, 0x14, 0xc, 0x14, 0xc, 0x57, 0x9, 0x19, 0x80, 0x87, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x81, 0x24, 0x2, 0x82, 0xbe, 0xf, 0x5, 0x1, 0xf, 0x84, 0x50, 0x1f, 0x6, 0x6, 0x80, 0xd5, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x5, 0x3e, 0x21, 0x1, 0x70, 0x2d, 0x3, 0xe, 0x2, 0xa, 0x4, 0x2, 0x81, 0x40, 0x1f, 0x11, 0x3a, 0x5, 0x1, 0x81, 0xd0, 0x2a, 0x82, 0xe6, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x2, 0x10, 0x29, 0x4c, 0x4, 0xa, 0x4, 0x2, 0x83, 0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x34, 0x2, 0x81, 0xe, 0x2c, 0x4, 0x64, 0xc, 0xf, 0x2, 0xf, 0x1, 0xf, 0x1, 0x25, 0xa, 0x80, 0xae, 0x38, 0x1d, 0xd, 0x2c, 0x4, 0x9, 0x7, 0x2, 0xe, 0x6, 0x80, 0x9a, 0x83, 0xd8, 0x4, 0x11, 0x3, 0xd, 0x3, 0x77, 0x4, 0x5f, 0x6, 0xc, 0x4, 0x1, 0xf, 0xc, 0x4, 0x38, 0x8, 0xa, 0x6, 0x28, 0x8, 0x1e, 0x2, 0x2, 0x4e, 0x81, 0x54, 0xc, 0xe, 0x2, 0xd, 0x3, 0x9, 0x7, 0x2e, 0x1, 0x7, 0x8, 0xe, 0x4, 0x9, 0x7, 0x9, 0x7, 0x80, 0x93, 0x1, 0x37, 0x25, 0xa, 0x84, 0x6, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60, 0xaa, 0xdc, 0x51, 0x1, 0x1e, 0x60, 0x80, 0x80, 0x80, 0xf0, 0xa0, 0xfe, 0x10, 0xa0, 0xff, 0xfe, 0x2, 0xa0, 0xff, 0xfe]; -_T Hyphen = [0x2d, 0x1, 0x7f, 0x1, 0x84, 0xdc, 0x1, 0x92, 0x7b, 0x1, 0x88, 0x9, 0x2, 0x8e, 0x5, 0x1, 0x82, 0xe3, 0x1, 0xa0, 0xcd, 0x67, 0x1, 0x80, 0xa9, 0x1, 0x57, 0x1]; -_T Other_Math = [0x5e, 0x1, 0x83, 0x71, 0x3, 0x2, 0x1, 0x1a, 0x2, 0x2, 0x2, 0x9c, 0x20, 0x1, 0x1b, 0x3, 0xb, 0x1, 0x20, 0x4, 0x18, 0x2, 0xe, 0x2, 0x41, 0xd, 0x4, 0x1, 0x3, 0x2, 0x4, 0x5, 0x12, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x3, 0x5, 0x6, 0x1, 0x3, 0x2, 0x2, 0x2, 0x1, 0x3, 0x1, 0x6, 0x3, 0x4, 0x5, 0x5, 0x4b, 0x5, 0x2, 0x4, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x5, 0x2, 0x2, 0x4, 0x2, 0x4, 0x12, 0x2, 0x2, 0x1, 0x1, 0x1, 0x7, 0x1, 0x1, 0x6, 0x2, 0x81, 0x22, 0x4, 0x80, 0xa8, 0x2, 0x1, 0x1, 0x18, 0x1, 0x11, 0x1, 0x81, 0xbd, 0x2, 0xc, 0x9, 0x5, 0x5, 0x5, 0x2, 0x2, 0x2, 0x3, 0x5, 0xe, 0x1, 0x1, 0x1, 0x2, 0x6, 0x18, 0x2, 0x39, 0x1, 0x1, 0x1, 0x1d, 0x4, 0x9, 0x2, 0x81, 0x56, 0x2, 0x1f, 0xa, 0x81, 0x93, 0x16, 0x3f, 0x4, 0x20, 0x2, 0xa0, 0xd4, 0x63, 0x1, 0x1, 0x1, 0x4, 0x1, 0x80, 0xd3, 0x1, 0x1, 0x1, 0xa0, 0xd4, 0xc1, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x2, 0x32, 0x96, 0x0, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11]; -_T Ps = [0x28, 0x1, 0x32, 0x1, 0x1f, 0x1, 0x8e, 0xbe, 0x1, 0x1, 0x1, 0x87, 0x5e, 0x1, 0x89, 0x7e, 0x1, 0x3, 0x1, 0x26, 0x1, 0x37, 0x1, 0xf, 0x1, 0x82, 0x7a, 0x1, 0x1, 0x1, 0x1e, 0x1, 0x84, 0x3e, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x50, 0x1, 0x20, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0x94, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x40, 0x1, 0x1, 0x1, 0x21, 0x1, 0x84, 0x25, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x19, 0x1, 0x12, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0xac, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0xa0, 0xcd, 0x21, 0x1, 0x80, 0xd7, 0x1, 0x1d, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x11, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0xaa, 0x1, 0x32, 0x1, 0x1f, 0x1, 0x3, 0x1, 0x2, 0x1]; -_T Zs = [0x20, 0x1, 0x7f, 0x1, 0x95, 0xdf, 0x1, 0x89, 0x7f, 0xb, 0x24, 0x1, 0x2f, 0x1, 0x8f, 0xa0, 0x1]; -_T Alphabetic = [0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x4, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xca, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x56, 0x1, 0x2a, 0x5, 0x1, 0x2, 0x2, 0x4, 0x1, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x8, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x1, 0x6, 0x29, 0x27, 0xe, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x8, 0x1b, 0x4, 0x4, 0x1d, 0xb, 0x5, 0x38, 0x1, 0x7, 0xe, 0x66, 0x1, 0x8, 0x4, 0x8, 0x4, 0x3, 0xa, 0x3, 0x2, 0x1, 0x10, 0x30, 0xd, 0x65, 0x18, 0x21, 0x9, 0x2, 0x4, 0x1, 0x5, 0x18, 0x2, 0x13, 0x13, 0x19, 0x7, 0xb, 0x5, 0x18, 0x1, 0x6, 0x11, 0x2a, 0xa, 0xc, 0x3, 0x7, 0x6, 0x4c, 0x1, 0x10, 0x1, 0x3, 0x4, 0xf, 0xd, 0x13, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x3, 0x8, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x8, 0x1, 0x4, 0x2, 0x1, 0x5, 0xc, 0x2, 0xa, 0x1, 0x4, 0x3, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x4, 0x5, 0x4, 0x2, 0x2, 0x2, 0x4, 0x1, 0x7, 0x4, 0x1, 0x1, 0x11, 0x6, 0xb, 0x3, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x9, 0x1, 0x3, 0x1, 0x2, 0x3, 0x1, 0xf, 0x4, 0x15, 0x4, 0x4, 0x3, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x8, 0x2, 0x2, 0x2, 0x2, 0x9, 0x2, 0x4, 0x2, 0x1, 0x5, 0xd, 0x1, 0x10, 0x2, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x4, 0x5, 0x3, 0x3, 0x1, 0x3, 0x3, 0x1, 0x6, 0x1, 0x28, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x3, 0x8, 0x1, 0x3, 0x1, 0x3, 0x8, 0x2, 0x1, 0x3, 0x2, 0x1, 0x2, 0x4, 0x1c, 0x4, 0x1, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x3, 0x8, 0x1, 0x3, 0x1, 0x3, 0x8, 0x2, 0x6, 0x2, 0x1, 0x4, 0xd, 0x3, 0xc, 0xd, 0x1, 0x3, 0x1, 0x29, 0x2, 0x8, 0x1, 0x3, 0x1, 0x3, 0x1, 0x1, 0x5, 0x4, 0x7, 0x5, 0x16, 0x6, 0x1, 0x3, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x8, 0x6, 0x1, 0x1, 0x1, 0x8, 0x12, 0x2, 0xd, 0x3a, 0x5, 0x7, 0x6, 0x1, 0x33, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0x13, 0x1, 0x3, 0x2, 0x5, 0x1, 0x1, 0x6, 0x1, 0xe, 0x4, 0x20, 0x1, 0x3f, 0x8, 0x1, 0x24, 0x4, 0x13, 0x4, 0x10, 0x1, 0x24, 0x43, 0x37, 0x1, 0x1, 0x2, 0x5, 0x10, 0x40, 0xa, 0x4, 0x2, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x81, 0x4d, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x25, 0x10, 0x10, 0x56, 0x2, 0x6, 0x3, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x3, 0xb, 0x7, 0x14, 0xb, 0x15, 0xc, 0x14, 0xc, 0xd, 0x1, 0x3, 0x1, 0x2, 0xc, 0x34, 0x2, 0x13, 0xe, 0x1, 0x4, 0x1, 0x43, 0x59, 0x7, 0x2b, 0x5, 0x46, 0xa, 0x1f, 0x1, 0xc, 0x4, 0x9, 0x17, 0x1e, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x36, 0x1c, 0x4, 0x3f, 0x2, 0x14, 0x32, 0x1, 0x17, 0x2, 0xb, 0x3, 0x31, 0x34, 0x1, 0xf, 0x1, 0x8, 0x33, 0x2a, 0x2, 0x4, 0xa, 0x2c, 0x1, 0xb, 0xe, 0x37, 0x16, 0x3, 0xa, 0x24, 0x2, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x29, 0x4, 0x1, 0x6, 0x1, 0x2, 0x3, 0x1, 0x5, 0x80, 0xc0, 0x27, 0xe, 0xb, 0x81, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x74, 0x1, 0xd, 0x1, 0x10, 0xd, 0x65, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x3, 0x5, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0xb, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x29, 0x83, 0x2d, 0x34, 0x87, 0x16, 0x80, 0xe5, 0x6, 0x4, 0x3, 0x2, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x1, 0x10, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x20, 0x2f, 0x1, 0x81, 0xd5, 0x3, 0x19, 0x9, 0x7, 0x5, 0x2, 0x5, 0x4, 0x56, 0x6, 0x3, 0x1, 0x5a, 0x1, 0x4, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x8d, 0x43, 0x2e, 0x2, 0x81, 0xd, 0x3, 0x10, 0xa, 0x2, 0x14, 0x2f, 0x5, 0x8, 0x3, 0x71, 0x27, 0x9, 0x2, 0x67, 0x2, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x14, 0x1, 0x21, 0x18, 0x34, 0xc, 0x44, 0x1, 0x1, 0x2c, 0x6, 0x3, 0x1, 0x1, 0x3, 0xa, 0x21, 0x5, 0x23, 0xd, 0x1d, 0x3, 0x33, 0x1, 0xc, 0xf, 0x1, 0x10, 0x10, 0xa, 0x5, 0x1, 0x37, 0x9, 0xe, 0x12, 0x17, 0x3, 0x45, 0x1, 0x1, 0x1, 0x1, 0x18, 0x3, 0x2, 0x10, 0x2, 0x4, 0xb, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x2b, 0x1, 0xe, 0x6, 0x7b, 0x15, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0xc, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x81, 0x6b, 0x12, 0x40, 0x2, 0x36, 0x28, 0xc, 0x74, 0x5, 0x1, 0x80, 0x87, 0x24, 0x1a, 0x6, 0x1a, 0xb, 0x59, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x45, 0x35, 0x81, 0xb, 0x1d, 0x3, 0x31, 0x2f, 0x20, 0xd, 0x1e, 0x5, 0x2b, 0x5, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x1, 0x5, 0x2a, 0x80, 0x9e, 0x12, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xc, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x4, 0x1, 0x2, 0x5, 0x8, 0x1, 0x3, 0x1, 0x1d, 0x2a, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1c, 0x1b, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x37, 0x33, 0xd, 0x33, 0xd, 0x28, 0x81, 0x58, 0x2a, 0x1, 0x2, 0x3, 0x2, 0x4e, 0x1d, 0xa, 0x1, 0x8, 0x16, 0x2a, 0x12, 0x2e, 0x15, 0x1b, 0x17, 0x9, 0x46, 0x2b, 0x5, 0xa, 0x39, 0x9, 0x1, 0xd, 0x19, 0x17, 0x33, 0x11, 0x4, 0x8, 0x23, 0x3, 0x1, 0x9, 0x40, 0x1, 0x4, 0x9, 0x2, 0xa, 0x1, 0x1, 0x1, 0x23, 0x12, 0x1, 0x22, 0x2, 0x1, 0x6, 0x4, 0x3e, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x39, 0x17, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x8, 0x2, 0x2, 0x2, 0x2, 0x3, 0x1, 0x6, 0x1, 0x5, 0x7, 0x80, 0x9c, 0x42, 0x1, 0x3, 0x1, 0x4, 0x14, 0x3, 0x1e, 0x42, 0x2, 0x2, 0x1, 0x1, 0x80, 0xb8, 0x36, 0x2, 0x7, 0x19, 0x6, 0x22, 0x3f, 0x1, 0x1, 0x3, 0x1, 0x3b, 0x36, 0x2, 0x1, 0x47, 0x1b, 0x2, 0xe, 0x15, 0x7, 0x80, 0xb9, 0x39, 0x67, 0x40, 0x1f, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1e, 0x1, 0x2, 0x2, 0x2, 0x2, 0x4, 0x5d, 0x8, 0x2, 0x2e, 0x2, 0x6, 0x1, 0x1, 0x1, 0x2, 0x1b, 0x33, 0x2, 0xa, 0x11, 0x48, 0x5, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x2d, 0x1, 0x7, 0x1, 0x1, 0x31, 0x1e, 0x2, 0x16, 0x1, 0xe, 0x49, 0x7, 0x1, 0x2, 0x1, 0x2c, 0x3, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x2, 0x2, 0x18, 0x6, 0x1, 0x2, 0x1, 0x25, 0x1, 0x2, 0x1, 0x4, 0x1, 0x1, 0x81, 0x47, 0x17, 0x9, 0x11, 0x1, 0x29, 0x3, 0x3, 0x6f, 0x1, 0x4f, 0x83, 0x9a, 0x66, 0x6f, 0x11, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x11, 0x6, 0x8f, 0xb9, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x11, 0x4f, 0x11, 0x1e, 0x12, 0x30, 0x10, 0x4, 0x1f, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x40, 0x80, 0x80, 0x4b, 0x4, 0x39, 0x7, 0x11, 0x40, 0x2, 0x1, 0x1, 0xc, 0x2, 0xe, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x4, 0x1, 0x97, 0x61, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x87, 0x34, 0x1f, 0x6, 0x6, 0x80, 0xd5, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x5, 0x3e, 0x21, 0x1, 0x70, 0x2d, 0xa, 0x7, 0x10, 0x1, 0x81, 0x41, 0x1e, 0x12, 0x2c, 0x81, 0xe4, 0x1c, 0x82, 0xf4, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x3b, 0x44, 0x3, 0x1, 0x3, 0x1, 0x84, 0xb4, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x82, 0x74, 0x1a, 0x6, 0x1a, 0x6, 0x1a, 0x8e, 0x76, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T XID_Start = [0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x4, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xca, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x80, 0x81, 0x5, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x14, 0x1, 0x53, 0x1, 0x80, 0x8b, 0x8, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x1, 0x6, 0x29, 0x47, 0x1b, 0x4, 0x4, 0x2d, 0x2b, 0x23, 0x2, 0x1, 0x63, 0x1, 0x1, 0xf, 0x2, 0x7, 0x2, 0xa, 0x3, 0x2, 0x1, 0x10, 0x1, 0x1, 0x1e, 0x1d, 0x59, 0xb, 0x1, 0x18, 0x21, 0x9, 0x2, 0x4, 0x1, 0x5, 0x16, 0x4, 0x1, 0x9, 0x1, 0x3, 0x1, 0x17, 0x19, 0x7, 0xb, 0x5, 0x18, 0x1, 0x6, 0x11, 0x2a, 0x3a, 0x36, 0x3, 0x1, 0x12, 0x1, 0x7, 0xa, 0xf, 0x10, 0x4, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x3, 0x1, 0x10, 0x1, 0xd, 0x2, 0x1, 0x3, 0xe, 0x2, 0xa, 0x1, 0x8, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1f, 0x4, 0x1, 0x1, 0x13, 0x3, 0x10, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xf, 0x2, 0x17, 0x1, 0xb, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x1e, 0x2, 0x1, 0x3, 0xf, 0x1, 0x11, 0x1, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x16, 0x1, 0x34, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x3, 0x1, 0x1a, 0x3, 0x2, 0x1, 0x2, 0x2, 0x1e, 0x1, 0x4, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x3, 0x1, 0x1f, 0x2, 0x1, 0x2, 0xf, 0x2, 0x11, 0x9, 0x1, 0x3, 0x1, 0x29, 0x2, 0x1, 0x10, 0x1, 0x5, 0x3, 0x8, 0x3, 0x18, 0x6, 0x5, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3a, 0x30, 0x1, 0x1, 0xd, 0x7, 0x3a, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0xa, 0x1, 0x1, 0xa, 0x1, 0x2, 0x5, 0x1, 0x1, 0x15, 0x4, 0x20, 0x1, 0x3f, 0x8, 0x1, 0x24, 0x1b, 0x5, 0x73, 0x2b, 0x14, 0x1, 0x10, 0x6, 0x4, 0x4, 0x3, 0x1, 0x3, 0x2, 0x7, 0x3, 0x4, 0xd, 0xc, 0x1, 0x11, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x81, 0x4d, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x25, 0x10, 0x10, 0x56, 0x2, 0x6, 0x3, 0x82, 0x6c, 0x2, 0x11, 0x1, 0x1a, 0x5, 0x4b, 0x3, 0xb, 0x7, 0x12, 0xd, 0x13, 0xe, 0x12, 0xe, 0xd, 0x1, 0x3, 0xf, 0x34, 0x23, 0x1, 0x4, 0x1, 0x43, 0x59, 0x7, 0x29, 0x1, 0x1, 0x5, 0x46, 0xa, 0x1f, 0x31, 0x1e, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x36, 0x17, 0x9, 0x35, 0x52, 0x1, 0x5d, 0x2f, 0x11, 0x8, 0x36, 0x1e, 0xd, 0x2, 0xa, 0x2c, 0x1a, 0x24, 0x29, 0x3, 0xa, 0x24, 0x2, 0x9, 0x7, 0x2b, 0x2, 0x3, 0x29, 0x4, 0x1, 0x6, 0x1, 0x2, 0x3, 0x1, 0x5, 0x80, 0xc0, 0x40, 0x81, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0x7, 0x1, 0x1, 0x3, 0x3, 0x1, 0x7, 0x3, 0x4, 0x2, 0x6, 0x4, 0xd, 0x5, 0x3, 0x1, 0x7, 0x74, 0x1, 0xd, 0x1, 0x10, 0xd, 0x65, 0x1, 0x4, 0x1, 0x2, 0xa, 0x1, 0x1, 0x2, 0x6, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x10, 0x2, 0x4, 0x5, 0x5, 0x4, 0x1, 0x11, 0x29, 0x8a, 0x77, 0x80, 0xe5, 0x6, 0x4, 0x3, 0x2, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x1, 0x10, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x82, 0x26, 0x3, 0x19, 0x9, 0x7, 0x5, 0x2, 0x5, 0x4, 0x56, 0x6, 0x3, 0x1, 0x5a, 0x1, 0x4, 0x5, 0x2b, 0x1, 0x5e, 0x11, 0x20, 0x30, 0x10, 0x82, 0x0, 0x99, 0xc0, 0x40, 0xa0, 0x56, 0x8d, 0x43, 0x2e, 0x2, 0x81, 0xd, 0x3, 0x10, 0xa, 0x2, 0x14, 0x2f, 0x10, 0x1f, 0x2, 0x50, 0x27, 0x9, 0x2, 0x67, 0x2, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x10, 0x1, 0x3, 0x1, 0x4, 0x1, 0x17, 0x1d, 0x34, 0xe, 0x32, 0x3e, 0x6, 0x3, 0x1, 0x1, 0x2, 0xb, 0x1c, 0xa, 0x17, 0x19, 0x1d, 0x7, 0x2f, 0x1c, 0x1, 0x10, 0x5, 0x1, 0xa, 0xa, 0x5, 0x1, 0x29, 0x17, 0x3, 0x1, 0x8, 0x14, 0x17, 0x3, 0x1, 0x3, 0x32, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x1, 0x18, 0x3, 0x2, 0xb, 0x7, 0x3, 0xc, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x2b, 0x1, 0xe, 0x6, 0x73, 0x1d, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0x1, 0x1, 0xa, 0x1, 0xd, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x6c, 0x21, 0x80, 0x8b, 0x6, 0x80, 0xda, 0x12, 0x40, 0x2, 0x36, 0x28, 0xa, 0x77, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7e, 0x24, 0x1a, 0x6, 0x1a, 0xb, 0x38, 0x2, 0x1f, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x23, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x45, 0x35, 0x81, 0xb, 0x1d, 0x3, 0x31, 0x2f, 0x20, 0xd, 0x1e, 0x5, 0x26, 0xa, 0x1e, 0x2, 0x24, 0x4, 0x8, 0x1, 0x5, 0x2a, 0x80, 0x9e, 0x12, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xc, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0xa, 0x17, 0x9, 0x1f, 0x41, 0x13, 0x1, 0x2, 0xa, 0x16, 0xa, 0x1a, 0x46, 0x38, 0x6, 0x2, 0x40, 0x1, 0xf, 0x4, 0x1, 0x3, 0x1, 0x1d, 0x2a, 0x1d, 0x3, 0x1d, 0x23, 0x8, 0x1, 0x1c, 0x1b, 0x36, 0xa, 0x16, 0xa, 0x13, 0xd, 0x12, 0x6e, 0x49, 0x37, 0x33, 0xd, 0x33, 0xd, 0x24, 0x81, 0x5c, 0x2a, 0x6, 0x2, 0x4e, 0x1d, 0xa, 0x1, 0x8, 0x16, 0x2a, 0x12, 0x2e, 0x15, 0x1b, 0x17, 0xc, 0x35, 0x39, 0x2, 0x2, 0x1, 0xd, 0x2d, 0x20, 0x19, 0x1a, 0x24, 0x1d, 0x1, 0x2, 0x1, 0x8, 0x23, 0x3, 0x1, 0xc, 0x30, 0xe, 0x4, 0x15, 0x1, 0x1, 0x1, 0x23, 0x12, 0x1, 0x19, 0x13, 0x2, 0x3f, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xa, 0x7, 0x2f, 0x26, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x12, 0x1, 0xc, 0x5, 0x80, 0x9e, 0x35, 0x12, 0x4, 0x14, 0x3, 0x1e, 0x30, 0x14, 0x2, 0x1, 0x1, 0x80, 0xb8, 0x2f, 0x29, 0x4, 0x24, 0x30, 0x14, 0x1, 0x3b, 0x2b, 0xd, 0x1, 0x47, 0x1b, 0x25, 0x7, 0x80, 0xb9, 0x2c, 0x74, 0x40, 0x1f, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x18, 0xf, 0x1, 0x1, 0x1, 0x5e, 0x8, 0x2, 0x27, 0x10, 0x1, 0x1, 0x1, 0x1c, 0x1, 0xa, 0x28, 0x7, 0x1, 0x15, 0x1, 0xb, 0x2e, 0x13, 0x1, 0x12, 0x49, 0x81, 0x7, 0x9, 0x1, 0x25, 0x11, 0x1, 0x31, 0x1e, 0x70, 0x7, 0x1, 0x2, 0x1, 0x26, 0x15, 0x1, 0x19, 0x6, 0x1, 0x2, 0x1, 0x20, 0xe, 0x1, 0x81, 0x47, 0x13, 0xf, 0x1, 0x1, 0xd, 0x1, 0x22, 0x7c, 0x1, 0x4f, 0x83, 0x9a, 0x66, 0x6f, 0x11, 0x80, 0xc4, 0x8a, 0x4c, 0x61, 0xf, 0x84, 0x30, 0x11, 0x6, 0x8f, 0xb9, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x11, 0x4f, 0x11, 0x1e, 0x12, 0x30, 0x10, 0x4, 0x1f, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x40, 0x80, 0x80, 0x4b, 0x5, 0x1, 0x42, 0xd, 0x40, 0x2, 0x1, 0x1, 0x1c, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x97, 0x66, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x19, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x1f, 0x1, 0x19, 0x1, 0x8, 0x87, 0x34, 0x1f, 0x6, 0x6, 0x81, 0x5, 0x3e, 0x80, 0x92, 0x2d, 0xa, 0x7, 0x10, 0x1, 0x81, 0x41, 0x1e, 0x12, 0x2c, 0x81, 0xe4, 0x1c, 0x82, 0xf4, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x3b, 0x44, 0x7, 0x1, 0x84, 0xb4, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x91, 0x44, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Grapheme_Link = [0x89, 0x4d, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x7f, 0x1, 0x6d, 0x2, 0x10, 0x1, 0x7c, 0x1, 0x6f, 0x1, 0x7f, 0x1, 0x80, 0xc9, 0x1, 0x80, 0xb4, 0x2, 0x86, 0xd9, 0x2, 0x1e, 0x1, 0x80, 0x9d, 0x1, 0x82, 0x8d, 0x1, 0x80, 0xe3, 0x1, 0x65, 0x2, 0x46, 0x2, 0x91, 0x8b, 0x1, 0xa0, 0x7a, 0x86, 0x1, 0x25, 0x1, 0x80, 0x97, 0x1, 0x80, 0x8e, 0x1, 0x6c, 0x1, 0x81, 0x35, 0x1, 0x80, 0xf6, 0x1, 0xa0, 0x5e, 0x51, 0x1, 0x86, 0x6, 0x1, 0x29, 0x1, 0xe, 0x1, 0x39, 0x1, 0x79, 0x2, 0x80, 0x8b, 0x1, 0x74, 0x1, 0x80, 0xb4, 0x1, 0x62, 0x1, 0x80, 0xf4, 0x1, 0x7f, 0x1, 0x80, 0xfc, 0x1, 0x7f, 0x1, 0x76, 0x1, 0x74, 0x1, 0x81, 0xd, 0x1, 0x81, 0x3, 0x2, 0x80, 0xa1, 0x1, 0x53, 0x1, 0x12, 0x1, 0x51, 0x1, 0x81, 0xa5, 0x1, 0x81, 0x4, 0x2, 0x51, 0x1, 0x81, 0xa9, 0x2]; -_T Dash = [0x2d, 0x1, 0x85, 0x5c, 0x1, 0x33, 0x1, 0x8e, 0x41, 0x1, 0x84, 0x5, 0x1, 0x88, 0x9, 0x6, 0x3d, 0x1, 0x27, 0x1, 0xf, 0x1, 0x81, 0x86, 0x1, 0x8c, 0x4, 0x1, 0x2, 0x1, 0x1f, 0x2, 0x4, 0x1, 0x1c, 0x1, 0x81, 0xbe, 0x1, 0x13, 0x1, 0x6f, 0x1, 0xa0, 0xcd, 0x90, 0x2, 0x25, 0x1, 0xa, 0x1, 0x80, 0xa9, 0x1, 0x8f, 0x9f, 0x1]; -_T Nl = [0x96, 0xee, 0x3, 0x8a, 0x6f, 0x23, 0x2, 0x4, 0x8e, 0x7e, 0x1, 0x19, 0x9, 0xe, 0x3, 0xa0, 0x76, 0xab, 0xa, 0xa0, 0x5a, 0x50, 0x35, 0x81, 0xcc, 0x1, 0x8, 0x1, 0x80, 0x86, 0x5, 0xa0, 0x20, 0x2a, 0x6f]; -_T IDS_Trinary_Operator = [0xa0, 0x2f, 0xf2, 0x2]; -_T Terminal_Punctuation = [0x21, 0x1, 0xa, 0x1, 0x1, 0x1, 0xb, 0x2, 0x3, 0x1, 0x83, 0x3e, 0x1, 0x8, 0x1, 0x82, 0x1, 0x1, 0x39, 0x1, 0x48, 0x1, 0xe, 0x1, 0x1, 0x3, 0x80, 0xb4, 0x1, 0x2b, 0xb, 0x1, 0x1, 0x80, 0xeb, 0x2, 0x36, 0xf, 0x1f, 0x1, 0x81, 0x5, 0x2, 0x84, 0xf4, 0x2, 0x80, 0xac, 0x1, 0x4, 0x6, 0x81, 0x37, 0x2, 0x83, 0x15, 0x8, 0x83, 0x5, 0x1, 0x7c, 0x3, 0x47, 0x2, 0x80, 0x9d, 0x3, 0x3, 0x1, 0x27, 0x4, 0x2, 0x2, 0x81, 0x3a, 0x2, 0x81, 0x62, 0x4, 0x80, 0xae, 0x2, 0x1, 0x3, 0x1d, 0x2, 0x80, 0xbc, 0x5, 0x3e, 0x2, 0x83, 0xbc, 0x2, 0x9, 0x3, 0x8d, 0xe4, 0x1, 0xd, 0x1, 0x4, 0x1, 0xa, 0x1, 0x1, 0x2, 0x3, 0x2, 0x81, 0xac, 0x2, 0xa0, 0x74, 0xfb, 0x2, 0x81, 0xd, 0x3, 0x80, 0xe3, 0x5, 0x81, 0x7e, 0x2, 0x56, 0x2, 0x5f, 0x1, 0x80, 0x97, 0x3, 0x80, 0x93, 0x3, 0x7f, 0x1, 0x10, 0x2, 0x80, 0xf9, 0x1, 0xa0, 0x52, 0x64, 0x3, 0x1, 0x4, 0x80, 0xa9, 0x1, 0xa, 0x1, 0x1, 0x1, 0xb, 0x2, 0x3, 0x1, 0x41, 0x1, 0x2, 0x1, 0x84, 0x3a, 0x1, 0x30, 0x1, 0x84, 0x86, 0x1, 0x80, 0xc7, 0x1, 0x81, 0x36, 0x2, 0x80, 0x98, 0x6, 0x44, 0x6, 0x59, 0x4, 0x83, 0xb8, 0x5, 0x2c, 0x4, 0x80, 0xbd, 0x7, 0x70, 0x4, 0x7f, 0x3, 0x80, 0x81, 0x2, 0x6, 0x1, 0x10, 0x2, 0x58, 0x5, 0x6c, 0x1, 0x81, 0xa1, 0x3, 0xc, 0x2, 0x81, 0x66, 0x4, 0x3, 0xf, 0x69, 0x2, 0x80, 0xf9, 0x3, 0x82, 0x5, 0x1, 0x1, 0x1, 0x80, 0xfb, 0x2, 0x57, 0x2, 0x4, 0x2, 0x81, 0x9e, 0x3, 0x2d, 0x1, 0x82, 0x85, 0x2, 0x4a, 0x2, 0x85, 0x2b, 0x5, 0xa0, 0x45, 0xf9, 0x2, 0x80, 0x85, 0x1, 0x41, 0x3, 0xa, 0x1, 0x83, 0x52, 0x2, 0xa0, 0x4e, 0x6, 0x1, 0x9d, 0xe7, 0x4]; -_T Nd = [0x30, 0xa, 0x86, 0x26, 0xa, 0x80, 0x86, 0xa, 0x80, 0xc6, 0xa, 0x81, 0x9c, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x76, 0xa, 0x60, 0xa, 0x76, 0xa, 0x46, 0xa, 0x81, 0x16, 0xa, 0x46, 0xa, 0x87, 0x46, 0xa, 0x26, 0xa, 0x81, 0x2c, 0xa, 0x80, 0x80, 0xa, 0x80, 0xa6, 0xa, 0x6, 0xa, 0x80, 0xb6, 0xa, 0x56, 0xa, 0x80, 0x86, 0xa, 0x6, 0xa, 0xa0, 0x89, 0xc6, 0xa, 0x82, 0xa6, 0xa, 0x26, 0xa, 0x80, 0xc6, 0xa, 0x16, 0xa, 0x56, 0xa, 0x81, 0x96, 0xa, 0xa0, 0x53, 0x16, 0xa, 0x85, 0x86, 0xa, 0x88, 0x86, 0xa, 0x83, 0x2c, 0xa, 0x80, 0x80, 0xa, 0x3c, 0xa, 0x80, 0x90, 0xa, 0x81, 0x16, 0xa, 0x81, 0x56, 0xa, 0x76, 0xa, 0x81, 0x76, 0xa, 0x66, 0xa, 0x66, 0xa, 0x81, 0xa6, 0xa, 0x66, 0xa, 0x82, 0xf6, 0xa, 0x80, 0xf6, 0xa, 0x46, 0xa, 0x81, 0xa6, 0xa, 0xa0, 0x4b, 0x6, 0xa, 0x56, 0xa, 0x80, 0x86, 0xa, 0xa0, 0x6c, 0x74, 0x32, 0x89, 0x40, 0xa, 0x81, 0xa6, 0xa, 0x81, 0xf6, 0xa, 0x84, 0x56, 0xa, 0x92, 0x96, 0xa]; -_T Prepended_Concatenation_Mark = [0x86, 0x0, 0x6, 0x80, 0xd7, 0x1, 0x31, 0x1, 0x81, 0x80, 0x2, 0x50, 0x1, 0xa1, 0x7, 0xda, 0x1, 0xf, 0x1]; -_T Mc = [0x89, 0x3, 0x1, 0x37, 0x1, 0x2, 0x3, 0x8, 0x4, 0x1, 0x2, 0x32, 0x2, 0x3a, 0x3, 0x6, 0x2, 0x2, 0x2, 0xa, 0x1, 0x2b, 0x1, 0x3a, 0x3, 0x42, 0x1, 0x3a, 0x3, 0x8, 0x1, 0x1, 0x2, 0x35, 0x2, 0x3a, 0x1, 0x1, 0x1, 0x6, 0x2, 0x2, 0x2, 0xa, 0x1, 0x66, 0x2, 0x1, 0x2, 0x3, 0x3, 0x1, 0x3, 0xa, 0x1, 0x29, 0x3, 0x3d, 0x4, 0x3d, 0x2, 0x3a, 0x1, 0x1, 0x5, 0x2, 0x2, 0x1, 0x2, 0x9, 0x2, 0x1c, 0x1, 0xe, 0x2, 0x3a, 0x3, 0x5, 0x3, 0x1, 0x3, 0xa, 0x1, 0x2a, 0x2, 0x4b, 0x3, 0x6, 0x8, 0x12, 0x2, 0x81, 0x4a, 0x2, 0x3f, 0x1, 0x80, 0xab, 0x2, 0x4, 0x1, 0x6, 0x1, 0x2, 0x2, 0x19, 0x2, 0xa, 0x3, 0x2, 0x7, 0x15, 0x2, 0x2, 0x6, 0x2, 0x1, 0xa, 0x3, 0x86, 0x78, 0x1, 0x1e, 0x1, 0x80, 0x81, 0x1, 0x7, 0x8, 0x1, 0x2, 0x81, 0x5a, 0x4, 0x2, 0x3, 0x4, 0x2, 0x1, 0x6, 0x80, 0xe0, 0x2, 0x3a, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x2, 0x8, 0x6, 0x80, 0x91, 0x1, 0x30, 0x1, 0x5, 0x1, 0x1, 0x5, 0x1, 0x2, 0x3d, 0x1, 0x1e, 0x1, 0x4, 0x2, 0x2, 0x1, 0x3c, 0x1, 0x2, 0x3, 0x1, 0x1, 0x3, 0x2, 0x30, 0x8, 0x8, 0x2, 0x80, 0xab, 0x1, 0x15, 0x1, 0x93, 0x36, 0x2, 0xa0, 0x77, 0xf3, 0x2, 0x2, 0x1, 0x58, 0x2, 0x32, 0x10, 0x80, 0x8e, 0x2, 0x2f, 0x1, 0x30, 0x2, 0x4, 0x2, 0x2, 0x3, 0x6e, 0x2, 0x2, 0x2, 0x18, 0x1, 0x2d, 0x1, 0x1, 0x1, 0x6d, 0x1, 0x2, 0x2, 0x5, 0x1, 0x80, 0xed, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0xa0, 0x64, 0x13, 0x1, 0x1, 0x1, 0x7f, 0x1, 0x2d, 0x3, 0x4, 0x2, 0x73, 0x1, 0x18, 0x2, 0x3b, 0x1, 0x30, 0x3, 0x9, 0x2, 0xd, 0x1, 0x5d, 0x3, 0x3, 0x2, 0x1, 0x1, 0x80, 0xaa, 0x3, 0x1f, 0x2, 0x3a, 0x2, 0x1, 0x4, 0x2, 0x2, 0x2, 0x3, 0x9, 0x1, 0xa, 0x2, 0x80, 0xd1, 0x3, 0x8, 0x2, 0x3, 0x1, 0x6a, 0x3, 0x6, 0x1, 0x1, 0x4, 0x2, 0x1, 0x80, 0xed, 0x3, 0x6, 0x4, 0x2, 0x1, 0x71, 0x3, 0x8, 0x2, 0x1, 0x1, 0x6d, 0x1, 0x1, 0x2, 0x6, 0x1, 0x69, 0x2, 0x4, 0x1, 0x81, 0x5, 0x3, 0x9, 0x1, 0x80, 0xf7, 0x6, 0x1, 0x2, 0x4, 0x1, 0x2, 0x1, 0x1, 0x1, 0x80, 0x8e, 0x3, 0x8, 0x4, 0x4, 0x1, 0x54, 0x1, 0x1d, 0x2, 0x3e, 0x1, 0x81, 0x97, 0x1, 0xe, 0x1, 0x6a, 0x1, 0x7, 0x1, 0x2, 0x1, 0x80, 0xd5, 0x5, 0x4, 0x2, 0x1, 0x1, 0x81, 0x5e, 0x2, 0xc, 0x1, 0x30, 0x2, 0x8, 0x2, 0x1, 0x1, 0xa0, 0x50, 0xf, 0x37, 0x68, 0x2, 0xa0, 0x61, 0x73, 0x2, 0x6, 0x6]; -_T ASCII_Hex_Digit = [0x30, 0xa, 0x7, 0x6, 0x1a, 0x6]; -_T Quotation_Mark = [0x22, 0x1, 0x4, 0x1, 0x80, 0x83, 0x1, 0xf, 0x1, 0x9f, 0x5c, 0x8, 0x19, 0x2, 0x8e, 0x7, 0x1, 0x81, 0xc9, 0x4, 0xd, 0x3, 0xa0, 0xce, 0x21, 0x4, 0x80, 0xbd, 0x1, 0x4, 0x1, 0x5a, 0x2]; -_T Radical = [0xa0, 0x2e, 0x80, 0x1a, 0x1, 0x59, 0xc, 0x80, 0xd6]; -_T Other_Default_Ignorable_Code_Point = [0x83, 0x4f, 0x1, 0x8e, 0xf, 0x2, 0x86, 0x53, 0x2, 0x88, 0xaf, 0x1, 0x90, 0xfe, 0x1, 0xa0, 0xce, 0x3b, 0x1, 0x4f, 0x9, 0xad, 0x0, 0x7, 0x1, 0x1, 0x1e, 0x60, 0x80, 0x80, 0x80, 0xf0, 0x8e, 0x10]; -_T Join_Control = [0xa0, 0x20, 0xc, 0x2]; -_T Grapheme_Base = [0x20, 0x5f, 0x21, 0xd, 0x1, 0x82, 0x52, 0x70, 0x8, 0x2, 0x6, 0x4, 0x7, 0x1, 0x1, 0x1, 0x14, 0x1, 0x80, 0xe0, 0x7, 0x80, 0xa6, 0x1, 0x26, 0x2, 0x32, 0x2, 0x3, 0x2e, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x9, 0x1b, 0x4, 0x6, 0x11, 0xa, 0xb, 0x1, 0x1, 0x2e, 0x15, 0x10, 0x1, 0x65, 0x8, 0x1, 0x6, 0x2, 0x2, 0x1, 0x4, 0x20, 0x2, 0x1, 0x1, 0x1e, 0x1d, 0x59, 0xb, 0x1, 0xe, 0x2b, 0x9, 0x7, 0x3, 0x18, 0x4, 0x1, 0x9, 0x1, 0x3, 0x1, 0x7, 0xf, 0x1, 0x19, 0x5, 0x1, 0x1, 0xb, 0x5, 0x1f, 0x11, 0x2a, 0x39, 0x37, 0x1, 0x1, 0x1, 0x4, 0x8, 0x4, 0x1, 0x3, 0x7, 0xa, 0x2, 0x1d, 0x1, 0x2, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x3, 0x1, 0x1, 0x2, 0x6, 0x2, 0x2, 0x2, 0x1, 0x1, 0xd, 0x2, 0x1, 0x3, 0x4, 0x18, 0x5, 0x1, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x4, 0x3, 0x18, 0x4, 0x1, 0x1, 0x7, 0xa, 0x2, 0x3, 0x1, 0x1, 0xc, 0x1, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x4, 0x8, 0x1, 0x1, 0x2, 0x3, 0x1, 0xf, 0x2, 0x4, 0xc, 0x7, 0x1, 0x8, 0x2, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x2, 0x1, 0x6, 0x2, 0x2, 0x2, 0xf, 0x2, 0x1, 0x3, 0x4, 0x12, 0xb, 0x1, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x5, 0x1, 0x1, 0x2, 0x3, 0x3, 0x1, 0x3, 0x3, 0x1, 0x15, 0x15, 0x6, 0x3, 0x1, 0x8, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x3, 0x1, 0x3, 0x4, 0x13, 0x3, 0x2, 0x1, 0x2, 0x2, 0x4, 0xa, 0x7, 0xa, 0x1, 0xb, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x3, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x2, 0x1, 0x2, 0x11, 0x2, 0x1, 0x2, 0x4, 0xa, 0x1, 0x3, 0xe, 0xb, 0x1, 0x3, 0x1, 0x29, 0x2, 0x1, 0x1, 0x2, 0x5, 0x3, 0x1, 0x3, 0x1, 0x2, 0x4, 0x3, 0x1, 0xa, 0x4, 0x1a, 0x2, 0x2, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x9, 0x2, 0x6, 0x7, 0x7, 0xa, 0x2, 0x3, 0xc, 0x30, 0x1, 0x2, 0xb, 0x8, 0x8, 0xd, 0x25, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0xa, 0x1, 0x2, 0x9, 0x1, 0x2, 0x5, 0x1, 0x1, 0x9, 0xa, 0x2, 0x4, 0x20, 0x18, 0x2, 0x1b, 0x1, 0x1, 0x1, 0x1, 0x1, 0xe, 0x1, 0x24, 0x12, 0x1, 0x5, 0x1, 0x2, 0x5, 0x31, 0x8, 0x1, 0x6, 0x1, 0xd, 0x25, 0x2d, 0x4, 0x1, 0x6, 0x1, 0x2, 0x2, 0x2, 0x19, 0x2, 0x4, 0x3, 0x10, 0x4, 0xd, 0x1, 0x2, 0x2, 0x6, 0x1, 0xf, 0x1, 0x28, 0x1, 0x1, 0x5, 0x1, 0x2, 0x81, 0x79, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x5, 0x1d, 0x3, 0x1a, 0x6, 0x56, 0x2, 0x6, 0x2, 0x82, 0x9d, 0x3, 0x59, 0x7, 0x12, 0x3, 0x1, 0x9, 0x13, 0x2, 0x3, 0x9, 0x12, 0xe, 0xd, 0x1, 0x3, 0xf, 0x34, 0x2, 0x1, 0x7, 0x8, 0x1, 0x2, 0xb, 0x9, 0x3, 0xa, 0x6, 0xa, 0x6, 0xb, 0x5, 0xa, 0x6, 0x59, 0x7, 0x5, 0x2, 0x22, 0x1, 0x1, 0x5, 0x46, 0xa, 0x1f, 0x4, 0x4, 0x2, 0x3, 0x4, 0x2, 0x1, 0x6, 0x7, 0x1, 0x3, 0x2a, 0x2, 0x5, 0xb, 0x2c, 0x4, 0x1a, 0x6, 0xb, 0x3, 0x39, 0x2, 0x2, 0x3, 0x38, 0x1, 0x1, 0x9, 0x1, 0x1, 0x2, 0x8, 0x6, 0xd, 0xa, 0x6, 0xa, 0x6, 0xe, 0x56, 0x30, 0x7, 0x1, 0x1, 0x5, 0x1, 0xa, 0x3, 0x1b, 0x9, 0xb, 0x3, 0x20, 0x4, 0x2, 0x2, 0x1, 0x3, 0x38, 0x1, 0x1, 0x2, 0x3, 0x1, 0x1, 0x3, 0x2, 0x8, 0x30, 0x8, 0x2, 0x5, 0xf, 0x3, 0x3c, 0x7, 0x2b, 0x2, 0xb, 0xb, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x1, 0x5, 0x80, 0xc0, 0x40, 0x81, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0xf, 0x1, 0xe, 0x2, 0x6, 0x1, 0x13, 0x2, 0x3, 0x1, 0x9, 0x1, 0xb, 0x5, 0x18, 0x7, 0x31, 0x10, 0x2, 0x2, 0x1b, 0x1, 0xd, 0x3, 0x21, 0x3f, 0x80, 0x8c, 0x4, 0x82, 0x97, 0x19, 0xb, 0x15, 0x87, 0x14, 0x2, 0x20, 0x1, 0x81, 0x58, 0x3, 0x2, 0x5, 0x2d, 0x1, 0x1, 0x5, 0x1, 0x2, 0x38, 0x7, 0x2, 0xf, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x21, 0x5e, 0x22, 0x1a, 0x1, 0x59, 0xc, 0x80, 0xd6, 0x1a, 0xc, 0x4, 0x2a, 0x6, 0x10, 0x1, 0x56, 0x4, 0x65, 0x5, 0x2b, 0x1, 0x5e, 0x1, 0x54, 0xc, 0x2f, 0x1, 0xa0, 0x72, 0x6d, 0x3, 0x37, 0x9, 0x81, 0x5c, 0x14, 0x2f, 0x4, 0x1, 0xa, 0x20, 0x2, 0x50, 0x2, 0x6, 0x8, 0x80, 0xcb, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0x10, 0x1, 0x3, 0x1, 0x4, 0x1, 0x19, 0x2, 0x5, 0x4, 0xa, 0x6, 0x38, 0x8, 0x44, 0xa, 0xc, 0x18, 0xd, 0x1, 0x26, 0x8, 0x19, 0xb, 0x2, 0xb, 0x1e, 0x6, 0x30, 0x1, 0x2, 0x4, 0x2, 0x2, 0x10, 0x1, 0xb, 0x4, 0x7, 0x1, 0x19, 0x1, 0x29, 0x6, 0x2, 0x2, 0x2, 0xb, 0x3, 0x1, 0x8, 0x1, 0x1, 0x2, 0xa, 0x2, 0x20, 0x1, 0x33, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x1, 0x18, 0x11, 0x2, 0x8, 0xb, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0x1, 0x3c, 0x4, 0x75, 0x1, 0x2, 0x1, 0x4, 0x3, 0xa, 0x6, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x21, 0x4, 0x81, 0x6e, 0x2, 0x6a, 0x26, 0x7, 0xc, 0x5, 0x5, 0x1, 0x1, 0x18, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x7d, 0x10, 0x81, 0xbd, 0x2, 0x36, 0x7, 0x1, 0x20, 0x10, 0x10, 0xa, 0x16, 0x23, 0x1, 0x13, 0x1, 0x4, 0x4, 0x5, 0x1, 0x80, 0x87, 0x4, 0x80, 0x9d, 0x2, 0x1f, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3, 0x3, 0x7, 0x1, 0x7, 0xd, 0x2, 0x2, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b, 0x5, 0x3, 0x4, 0x2d, 0x3, 0x58, 0x1, 0xd, 0x3, 0x1, 0x2f, 0x2d, 0x80, 0x83, 0x1d, 0x3, 0x31, 0x10, 0x1b, 0x4, 0x24, 0x9, 0x1e, 0x5, 0x26, 0xa, 0x1e, 0x1, 0x25, 0x4, 0xe, 0x2a, 0x80, 0x9e, 0x2, 0xa, 0x6, 0x24, 0x4, 0x24, 0x4, 0x28, 0x8, 0x34, 0xb, 0xc, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x43, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8, 0x18, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x45, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x17, 0x1, 0x48, 0x8, 0x9, 0x30, 0x13, 0x1, 0x2, 0x5, 0x21, 0x3, 0x1b, 0x5, 0x1, 0x40, 0x38, 0x4, 0x14, 0x2, 0x2f, 0xf, 0x4, 0x1, 0x3, 0x1, 0x1d, 0xa, 0x9, 0x7, 0x9, 0x7, 0x40, 0x20, 0x25, 0x6, 0xc, 0x9, 0x36, 0x3, 0x1d, 0x2, 0x1b, 0x5, 0x1a, 0x7, 0x4, 0xc, 0x7, 0x50, 0x49, 0x37, 0x33, 0xd, 0x33, 0x7, 0x2a, 0xc, 0xa, 0x81, 0x26, 0x1f, 0x1, 0x2a, 0x3, 0x1, 0x2, 0x2, 0x4e, 0x28, 0x8, 0x16, 0xb, 0x9, 0x16, 0x12, 0x4, 0x4, 0x26, 0x1c, 0x14, 0x17, 0x9, 0x1, 0x1, 0x36, 0xf, 0x7, 0x4, 0x1e, 0x1, 0x2, 0x2, 0x1, 0xc, 0x31, 0x4, 0x2, 0x2, 0x2, 0x1, 0x4, 0xe, 0x19, 0x7, 0xa, 0x9, 0x24, 0x5, 0x1, 0x9, 0x12, 0x8, 0x23, 0x1, 0x3, 0xb, 0x34, 0x9, 0xa, 0x4, 0x2, 0x1, 0x10, 0x1, 0x14, 0xb, 0x12, 0x1, 0x1c, 0x3, 0x2, 0x1, 0x1, 0x2, 0x6, 0x1, 0x2, 0x3f, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xb, 0x6, 0x2f, 0x1, 0x3, 0xd, 0xa, 0x8, 0x2, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x3, 0x1, 0x1, 0x1, 0x1, 0x4, 0x2, 0x2, 0x2, 0x3, 0x2, 0x1, 0xc, 0x7, 0x80, 0x9c, 0x38, 0x8, 0x2, 0x3, 0x1, 0x1, 0x15, 0x1, 0x1, 0x1, 0x3, 0x1e, 0x30, 0x1, 0x2, 0x6, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x4, 0x8, 0xa, 0x80, 0xa6, 0x2f, 0x1, 0x2, 0x6, 0x4, 0x2, 0x1, 0x2, 0x1b, 0x24, 0x33, 0x8, 0x2, 0x1, 0x1, 0x2, 0x4, 0xb, 0xa, 0x6, 0xd, 0x13, 0x2b, 0x1, 0x1, 0x1, 0x2, 0x6, 0x1, 0x1, 0x2, 0x6, 0xa, 0x36, 0x1b, 0x5, 0x2, 0x4, 0x1, 0x9, 0x17, 0x80, 0xb9, 0x2f, 0x9, 0x1, 0x2, 0x1, 0x64, 0x53, 0xc, 0x8, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x18, 0x1, 0x5, 0x1, 0x2, 0x4, 0x1, 0x1, 0x4, 0x1, 0x3, 0x9, 0xa, 0x46, 0x8, 0x2, 0x2a, 0x8, 0x4, 0x1, 0x4, 0x1b, 0x1, 0xa, 0x28, 0x6, 0x2, 0x4, 0x8, 0x9, 0x1, 0x6, 0x2, 0x3, 0x2e, 0xd, 0x1, 0x2, 0x9, 0xd, 0x49, 0x7, 0xa, 0x80, 0xf6, 0x9, 0x1, 0x26, 0xe, 0x1, 0x1, 0x6, 0xa, 0x1d, 0x3, 0x20, 0x19, 0x1, 0x7, 0x1, 0x2, 0x1, 0x4b, 0x7, 0x1, 0x2, 0x1, 0x26, 0x15, 0x1, 0x9, 0xa, 0x6, 0x6, 0x1, 0x2, 0x1, 0x25, 0x4, 0x2, 0x1, 0x1, 0x1, 0x1, 0x7, 0xa, 0x81, 0x36, 0x13, 0x2, 0x4, 0x9, 0xf, 0x1, 0x24, 0x8, 0x2, 0x1, 0x1, 0x1, 0x17, 0x56, 0x1, 0xf, 0x32, 0xd, 0x83, 0x9b, 0x66, 0x6f, 0x1, 0x5, 0xb, 0x80, 0xc4, 0x8a, 0x4c, 0x63, 0xd, 0x84, 0x30, 0x11, 0x6, 0x8f, 0xb9, 0x82, 0x47, 0xa0, 0x21, 0xb9, 0x82, 0x39, 0x7, 0x1f, 0x1, 0xa, 0x4, 0x51, 0x1, 0xa, 0x6, 0x1e, 0x7, 0x1, 0xa, 0x30, 0x7, 0xf, 0xa, 0xa, 0x1, 0x7, 0x1, 0x15, 0x5, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x5, 0x38, 0xb, 0xd, 0x40, 0x4, 0xc, 0x2, 0xe, 0x97, 0xf8, 0x8, 0x84, 0xd6, 0x2a, 0x9, 0xa0, 0x22, 0xe7, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x81, 0x23, 0xf, 0x1, 0x1d, 0x3, 0x2, 0x1, 0xe, 0x4, 0x8, 0x81, 0x8c, 0x89, 0x4, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x2, 0x1, 0x2, 0x1, 0x92, 0xb0, 0x74, 0x3c, 0x80, 0xf6, 0xa, 0x27, 0x2, 0x3c, 0x1, 0x1, 0x3, 0x4, 0x15, 0x2, 0x7, 0x1e, 0x4, 0x3d, 0x15, 0x42, 0x3, 0x1, 0x7a, 0x14, 0xc, 0x14, 0xc, 0x57, 0x9, 0x19, 0x80, 0x87, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x81, 0x24, 0x2, 0x82, 0x32, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x7, 0x84, 0x74, 0x1f, 0x6, 0x6, 0x81, 0x5, 0x3e, 0x80, 0x92, 0x2d, 0xa, 0x7, 0x2, 0xa, 0x4, 0x2, 0x81, 0x40, 0x1e, 0x12, 0x2c, 0x4, 0xa, 0x5, 0x1, 0x81, 0xd0, 0x1c, 0x4, 0xa, 0x82, 0xe6, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf, 0x1, 0x80, 0xc5, 0x2, 0x9, 0x30, 0x44, 0x7, 0x1, 0x4, 0xa, 0x4, 0x2, 0x83, 0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x34, 0x2, 0x81, 0xe, 0x2c, 0x4, 0x64, 0xc, 0xf, 0x2, 0xf, 0x1, 0xf, 0x1, 0x25, 0xa, 0x80, 0xae, 0x38, 0x1d, 0xd, 0x2c, 0x4, 0x9, 0x7, 0x2, 0xe, 0x6, 0x80, 0x9a, 0x83, 0xd8, 0x4, 0x11, 0x3, 0xd, 0x3, 0x77, 0x4, 0x5f, 0x6, 0xc, 0x4, 0x1, 0xf, 0xc, 0x4, 0x38, 0x8, 0xa, 0x6, 0x28, 0x8, 0x1e, 0x2, 0x2, 0x4e, 0x81, 0x54, 0xc, 0xe, 0x2, 0xd, 0x3, 0x9, 0x7, 0x2e, 0x1, 0x7, 0x8, 0xe, 0x4, 0x9, 0x7, 0x9, 0x7, 0x80, 0x93, 0x1, 0x37, 0x25, 0xa, 0x84, 0x6, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Uppercase = [0x41, 0x1a, 0x65, 0x17, 0x1, 0x7, 0x21, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x2, 0x4, 0x1, 0x2, 0x1, 0x3, 0x3, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x3, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x81, 0x21, 0x1, 0x1, 0x1, 0x3, 0x1, 0x8, 0x1, 0x6, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x1, 0x11, 0x1, 0x9, 0x23, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x2, 0x1, 0x1, 0x2, 0x2, 0x33, 0x30, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x26, 0x8b, 0x49, 0x26, 0x1, 0x1, 0x5, 0x1, 0x82, 0xd2, 0x56, 0x88, 0x9a, 0x2b, 0x2, 0x3, 0x81, 0x40, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x8, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0x6, 0xb, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x8, 0x48, 0x4, 0xc, 0x4, 0xc, 0x4, 0xc, 0x5, 0xb, 0x4, 0x81, 0x6, 0x1, 0x4, 0x1, 0x3, 0x3, 0x2, 0x3, 0x2, 0x1, 0x3, 0x5, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x2, 0x4, 0xa, 0x2, 0x5, 0x1, 0x1a, 0x10, 0x13, 0x1, 0x83, 0x32, 0x1a, 0x87, 0x30, 0x30, 0x30, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x8, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x1, 0x1, 0x1, 0x4, 0x1, 0xa0, 0x79, 0x4d, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0x87, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xa, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x6, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1c, 0x1, 0xa0, 0x57, 0x2b, 0x1a, 0x84, 0xc5, 0x28, 0x80, 0x88, 0x24, 0x80, 0x9c, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x86, 0xea, 0x33, 0x8b, 0xed, 0x20, 0xa0, 0x55, 0x80, 0x20, 0xa0, 0x65, 0xa0, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0x8, 0x1a, 0x1a, 0x1a, 0x2, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1b, 0x2, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1b, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1e, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x19, 0x21, 0x1, 0x91, 0x35, 0x22, 0x88, 0xe, 0x1a, 0x6, 0x1a, 0x6, 0x1a]; -_T Zl = [0xa0, 0x20, 0x28, 0x1]; -_T Hex_Digit = [0x30, 0xa, 0x7, 0x6, 0x1a, 0x6, 0xa0, 0xfe, 0xa9, 0xa, 0x7, 0x6, 0x1a, 0x6]; -_T Zp = [0xa0, 0x20, 0x29, 0x1]; -_T Pattern_White_Space = [0x9, 0x5, 0x12, 0x1, 0x64, 0x1, 0x9f, 0x88, 0x2, 0x18, 0x2]; -_T Diacritic = [0x5e, 0x1, 0x1, 0x1, 0x47, 0x1, 0x6, 0x1, 0x4, 0x1, 0x2, 0x2, 0x81, 0xf7, 0x80, 0x9f, 0x1, 0x8, 0x5, 0x6, 0x11, 0x2, 0x4, 0x1, 0x9, 0x2, 0x80, 0xfd, 0x5, 0x80, 0xd1, 0x1, 0x37, 0x11, 0x1, 0x1b, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x80, 0x86, 0x8, 0x4, 0x2, 0x80, 0x86, 0x2, 0x4, 0x2, 0x3, 0x3, 0x43, 0x1b, 0x5b, 0xb, 0x3a, 0xb, 0x22, 0x2, 0x7e, 0x8, 0x29, 0xa, 0x10, 0x1c, 0x3d, 0x1, 0x10, 0x1, 0x3, 0x4, 0x1c, 0x1, 0x4a, 0x1, 0x10, 0x1, 0x6e, 0x1, 0x10, 0x1, 0x6e, 0x1, 0x10, 0x1, 0x2f, 0x3, 0x3c, 0x1, 0x10, 0x1, 0x7, 0x1, 0x77, 0x1, 0x6e, 0x1, 0x10, 0x1, 0x6e, 0x1, 0x10, 0x1, 0x6d, 0x2, 0x10, 0x1, 0x7c, 0x1, 0x7c, 0x6, 0x1, 0x1, 0x6b, 0x1, 0xd, 0x5, 0x4b, 0x2, 0x1b, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x2, 0x42, 0x3, 0x1, 0x2, 0x3e, 0x1, 0x70, 0x1, 0x1, 0x2, 0x28, 0x2, 0x4, 0x5, 0x19, 0x7, 0x1, 0x1, 0xa, 0x2, 0x82, 0xc1, 0x3, 0x83, 0xb4, 0x2, 0x80, 0xb3, 0xb, 0x9, 0x1, 0x81, 0x5b, 0x3, 0x81, 0x39, 0x8, 0x2, 0x1, 0x30, 0xf, 0x2, 0xb, 0x68, 0x1, 0xf, 0x1, 0x26, 0x9, 0x36, 0x2, 0x80, 0x8a, 0x2, 0x40, 0x6, 0x52, 0x19, 0x4, 0x1, 0x6, 0x1, 0x2, 0x3, 0x32, 0x3f, 0x59, 0xc, 0x25, 0xb, 0x81, 0xbd, 0x1, 0x1, 0x3, 0xb, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x2, 0x8c, 0xf0, 0x3, 0x81, 0x3d, 0x1, 0x81, 0xfa, 0x6, 0x69, 0x4, 0x5f, 0x1, 0xa0, 0x75, 0x72, 0x1, 0xc, 0x2, 0x1, 0x1, 0x1c, 0x2, 0x52, 0x2, 0xe, 0x22, 0x66, 0x3, 0x6d, 0x2, 0x80, 0xca, 0x1, 0x1b, 0x12, 0x39, 0x4, 0x24, 0x1, 0x5f, 0x1, 0xc, 0x1, 0x24, 0x1, 0x80, 0x95, 0x3, 0x41, 0x4, 0x33, 0x1, 0x64, 0x5, 0x9, 0x3, 0x80, 0x80, 0x2, 0xa0, 0x4f, 0x30, 0x1, 0x83, 0x1, 0x10, 0x81, 0xe, 0x1, 0x1, 0x1, 0x2f, 0x1, 0x2d, 0x2, 0x43, 0x1, 0x82, 0xfc, 0x1, 0x84, 0x9f, 0x6, 0x1, 0x2a, 0x1, 0x9, 0x83, 0x2a, 0x2, 0x82, 0x3b, 0x6, 0x81, 0xd5, 0x3, 0x46, 0xb, 0x31, 0x4, 0x80, 0xc0, 0x1, 0x29, 0x1, 0x48, 0x2, 0x78, 0x2, 0x3e, 0x1, 0x4c, 0x1, 0x9, 0x3, 0x68, 0x2, 0x80, 0xb2, 0x2, 0x51, 0x1, 0x10, 0x1, 0x18, 0x7, 0x3, 0x5, 0x80, 0xcd, 0x1, 0x3, 0x1, 0x7b, 0x2, 0x80, 0xfb, 0x2, 0x7e, 0x1, 0x76, 0x2, 0x73, 0x1, 0x81, 0xd, 0x2, 0x81, 0x2, 0x2, 0x4, 0x1, 0x80, 0x9c, 0x1, 0x53, 0x1, 0x12, 0x1, 0x51, 0x1, 0x81, 0xa5, 0x1, 0x81, 0x2, 0x1, 0x1, 0x2, 0x51, 0x1, 0x96, 0xaf, 0xf, 0xa0, 0x36, 0x9a, 0x5, 0x3b, 0x7, 0x84, 0x58, 0x11, 0x50, 0x2, 0xa0, 0x3f, 0xfe, 0x4, 0x1, 0x7, 0x1, 0x2, 0x9f, 0x1, 0x2e, 0x2, 0x17, 0x82, 0x20, 0x3, 0x3, 0x6, 0x8, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x8e, 0x82, 0x3e, 0x80, 0xc2, 0x7, 0x81, 0x77, 0x1, 0x3d, 0x4, 0x85, 0xe0, 0x7, 0x6d, 0x3, 0x1, 0x3]; -_T Lowercase = [0x61, 0x1a, 0x2f, 0x1, 0xa, 0x1, 0x4, 0x1, 0x24, 0x18, 0x1, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x2, 0x4, 0x1, 0x2, 0x1, 0x3, 0x3, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x3, 0x6, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x45, 0x1, 0x24, 0x7, 0x2, 0x1e, 0x5, 0x60, 0x1, 0x2b, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x4, 0x12, 0x1, 0x1b, 0x23, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x1, 0x2, 0x1, 0x2, 0x2, 0x33, 0x30, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x30, 0x29, 0x8b, 0x47, 0x2b, 0x1, 0x4, 0x82, 0xf8, 0x6, 0x88, 0x82, 0x9, 0x77, 0x80, 0xc0, 0x41, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0xe, 0x2, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x5, 0x1, 0x2, 0x6, 0x1, 0x3, 0x3, 0x1, 0x2, 0x8, 0x4, 0x2, 0x2, 0x8, 0x8, 0xa, 0x3, 0x1, 0x2, 0x79, 0x1, 0xd, 0x1, 0x10, 0xd, 0x6d, 0x1, 0x3, 0x2, 0x3, 0x1, 0x1b, 0x1, 0x4, 0x1, 0x4, 0x1, 0x2, 0x2, 0x8, 0x4, 0x4, 0x1, 0x21, 0x10, 0x4, 0x1, 0x83, 0x4b, 0x1a, 0x87, 0x46, 0x30, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x8, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0xa0, 0x79, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x80, 0x85, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xa, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x18, 0x3, 0x1, 0x1, 0x1, 0x3, 0x83, 0x35, 0x2b, 0x1, 0xe, 0x6, 0x50, 0xa0, 0x4f, 0x40, 0x7, 0xc, 0x5, 0x84, 0x29, 0x1a, 0x84, 0xcd, 0x28, 0x80, 0x88, 0x24, 0x80, 0x9b, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x81, 0xc3, 0x1, 0x2, 0x3, 0x1, 0x2a, 0x1, 0x9, 0x85, 0x5, 0x33, 0x8b, 0xcd, 0x20, 0xa0, 0x55, 0x80, 0x20, 0xa0, 0x65, 0x9a, 0x1a, 0x1a, 0x7, 0x1, 0x12, 0x1a, 0x1a, 0x1a, 0x4, 0x1, 0x1, 0x1, 0x7, 0x1, 0xb, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1c, 0x1c, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1, 0x1, 0x87, 0x34, 0xa, 0x1, 0x14, 0x6, 0x6, 0x81, 0x5, 0x3e, 0x88, 0xb4, 0x22]; -_T Ll = [0x61, 0x1a, 0x3a, 0x1, 0x29, 0x18, 0x1, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x2, 0x4, 0x1, 0x2, 0x1, 0x3, 0x3, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x3, 0x6, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x7, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x45, 0x1, 0x1b, 0x80, 0xc1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x3, 0x3, 0x12, 0x1, 0x1b, 0x23, 0x1, 0x2, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x1, 0x2, 0x1, 0x2, 0x2, 0x33, 0x30, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x30, 0x29, 0x8b, 0x47, 0x2b, 0x2, 0x3, 0x82, 0xf8, 0x6, 0x88, 0x82, 0x9, 0x77, 0x2c, 0x3f, 0xd, 0x1, 0x22, 0x66, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x9, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0x6, 0xa, 0x8, 0x8, 0x8, 0x8, 0xe, 0x2, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x5, 0x1, 0x2, 0x6, 0x1, 0x3, 0x3, 0x1, 0x2, 0x8, 0x4, 0x2, 0x2, 0x8, 0x8, 0xa, 0x3, 0x1, 0x2, 0x81, 0x12, 0x1, 0x3, 0x2, 0x3, 0x1, 0x1b, 0x1, 0x4, 0x1, 0x4, 0x1, 0x2, 0x2, 0x8, 0x4, 0x4, 0x1, 0x35, 0x1, 0x8a, 0xab, 0x30, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xc, 0x26, 0x1, 0x1, 0x5, 0x1, 0xa0, 0x79, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x13, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x80, 0x87, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x8, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x5, 0x1, 0x5, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1c, 0x1, 0x3, 0x1, 0x83, 0x35, 0x2b, 0x5, 0x9, 0x7, 0x50, 0xa0, 0x4f, 0x40, 0x7, 0xc, 0x5, 0x84, 0x29, 0x1a, 0x84, 0xcd, 0x28, 0x80, 0x88, 0x24, 0x80, 0x9b, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x87, 0x3, 0x33, 0x8b, 0xcd, 0x20, 0xa0, 0x55, 0x80, 0x20, 0xa0, 0x65, 0x9a, 0x1a, 0x1a, 0x7, 0x1, 0x12, 0x1a, 0x1a, 0x1a, 0x4, 0x1, 0x1, 0x1, 0x7, 0x1, 0xb, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1c, 0x1c, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1a, 0x19, 0x1, 0x6, 0x1, 0x1, 0x87, 0x34, 0xa, 0x1, 0x14, 0x6, 0x6, 0x89, 0xf7, 0x22]; -_T Extender = [0x80, 0xb7, 0x1, 0x82, 0x18, 0x2, 0x83, 0x6e, 0x1, 0x81, 0xb9, 0x1, 0x83, 0x5a, 0x1, 0x82, 0xf0, 0x1, 0x7f, 0x1, 0x89, 0x43, 0x1, 0x38, 0x1, 0x82, 0x63, 0x1, 0x81, 0x8e, 0x1, 0x44, 0x1, 0x93, 0x89, 0x1, 0x2b, 0x5, 0x67, 0x2, 0x5d, 0x3, 0xa0, 0x6f, 0x16, 0x1, 0x85, 0xf6, 0x1, 0x83, 0xc2, 0x1, 0x16, 0x1, 0x80, 0x89, 0x1, 0x6c, 0x1, 0x15, 0x2, 0xa0, 0x54, 0x7b, 0x1, 0x88, 0x10, 0x2, 0x8b, 0xda, 0x1, 0x82, 0x68, 0x3, 0x84, 0xcf, 0x1, 0xa0, 0x50, 0xa9, 0x2, 0x84, 0x9c, 0x2, 0x1, 0x1, 0xa0, 0x71, 0x58, 0x2, 0x88, 0x6, 0x3]; -_T Lm = [0x82, 0xb0, 0x12, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x80, 0x85, 0x1, 0x5, 0x1, 0x81, 0xde, 0x1, 0x80, 0xe6, 0x1, 0x80, 0xa4, 0x2, 0x81, 0xd, 0x2, 0x4, 0x1, 0x1f, 0x1, 0x9, 0x1, 0x3, 0x1, 0x80, 0xa0, 0x1, 0x80, 0xa7, 0x1, 0x84, 0xd4, 0x1, 0x7f, 0x1, 0x82, 0x35, 0x1, 0x86, 0xda, 0x1, 0x6b, 0x1, 0x82, 0x63, 0x1, 0x81, 0xd0, 0x6, 0x80, 0xae, 0x3f, 0xd, 0x1, 0x22, 0x25, 0x82, 0xb1, 0x1, 0xd, 0x1, 0x10, 0xd, 0x8b, 0xdf, 0x2, 0x80, 0xf1, 0x1, 0x80, 0xbf, 0x1, 0x81, 0xd5, 0x1, 0x2b, 0x5, 0x5, 0x1, 0x61, 0x2, 0x5d, 0x3, 0xa0, 0x6f, 0x16, 0x1, 0x84, 0xe2, 0x6, 0x81, 0xe, 0x1, 0x72, 0x1, 0x1c, 0x2, 0x79, 0x9, 0x50, 0x1, 0x17, 0x1, 0x69, 0x3, 0x3, 0x2, 0x81, 0xd5, 0x1, 0x16, 0x1, 0x80, 0x89, 0x1, 0x6c, 0x1, 0x15, 0x2, 0x67, 0x4, 0x9, 0x1, 0xa0, 0x54, 0x6, 0x1, 0x2d, 0x2, 0x87, 0xe0, 0x6, 0x1, 0x2a, 0x1, 0x9, 0xa0, 0x63, 0x85, 0x4, 0x84, 0x4f, 0xd, 0x40, 0x2, 0x1, 0x1, 0xa0, 0x40, 0xc, 0x4, 0x1, 0x7, 0x1, 0x2, 0xa0, 0x30, 0x31, 0x3e, 0x80, 0xc9, 0x7, 0x83, 0xad, 0x1, 0x84, 0x5f, 0x1]; -_T Mn = [0x83, 0x0, 0x70, 0x81, 0x13, 0x5, 0x81, 0x9, 0x2d, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x48, 0xb, 0x30, 0x15, 0x10, 0x1, 0x65, 0x7, 0x2, 0x6, 0x2, 0x2, 0x1, 0x4, 0x23, 0x1, 0x1e, 0x1b, 0x5b, 0xb, 0x3a, 0x9, 0x9, 0x1, 0x18, 0x4, 0x1, 0x9, 0x1, 0x3, 0x1, 0x5, 0x2b, 0x3, 0x3c, 0x8, 0x2a, 0x18, 0x1, 0x20, 0x37, 0x1, 0x1, 0x1, 0x4, 0x8, 0x4, 0x1, 0x3, 0x7, 0xa, 0x2, 0x1d, 0x1, 0x3a, 0x1, 0x4, 0x4, 0x8, 0x1, 0x14, 0x2, 0x1a, 0x1, 0x2, 0x2, 0x39, 0x1, 0x4, 0x2, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x1e, 0x2, 0x3, 0x1, 0xb, 0x2, 0x39, 0x1, 0x4, 0x5, 0x1, 0x2, 0x4, 0x1, 0x14, 0x2, 0x16, 0x6, 0x1, 0x1, 0x3a, 0x1, 0x2, 0x1, 0x1, 0x4, 0x8, 0x1, 0x7, 0x2, 0xb, 0x2, 0x1e, 0x1, 0x3d, 0x1, 0xc, 0x1, 0x32, 0x1, 0x3, 0x1, 0x37, 0x1, 0x1, 0x3, 0x5, 0x3, 0x1, 0x4, 0x7, 0x2, 0xb, 0x2, 0x1d, 0x1, 0x3a, 0x1, 0x2, 0x1, 0x6, 0x1, 0x5, 0x2, 0x14, 0x2, 0x1c, 0x2, 0x39, 0x2, 0x4, 0x4, 0x8, 0x1, 0x14, 0x2, 0x1d, 0x1, 0x48, 0x1, 0x7, 0x3, 0x1, 0x1, 0x5a, 0x1, 0x2, 0x7, 0xc, 0x8, 0x62, 0x1, 0x2, 0x9, 0xb, 0x7, 0x49, 0x2, 0x1b, 0x1, 0x1, 0x1, 0x1, 0x1, 0x37, 0xe, 0x1, 0x5, 0x1, 0x2, 0x5, 0xb, 0x1, 0x24, 0x9, 0x1, 0x66, 0x4, 0x1, 0x6, 0x1, 0x2, 0x2, 0x2, 0x19, 0x2, 0x4, 0x3, 0x10, 0x4, 0xd, 0x1, 0x2, 0x2, 0x6, 0x1, 0xf, 0x1, 0x82, 0xbf, 0x3, 0x83, 0xb2, 0x3, 0x1d, 0x2, 0x1e, 0x2, 0x1e, 0x2, 0x40, 0x2, 0x1, 0x7, 0x8, 0x1, 0x2, 0xb, 0x9, 0x1, 0x2d, 0x3, 0x1, 0x1, 0x75, 0x2, 0x22, 0x1, 0x76, 0x3, 0x4, 0x2, 0x9, 0x1, 0x6, 0x3, 0x80, 0xdb, 0x2, 0x2, 0x1, 0x3a, 0x1, 0x1, 0x7, 0x1, 0x1, 0x1, 0x1, 0x2, 0x8, 0x6, 0xa, 0x2, 0x1, 0x30, 0xe, 0x1, 0x10, 0x31, 0x4, 0x30, 0x1, 0x1, 0x5, 0x1, 0x1, 0x5, 0x1, 0x28, 0x9, 0xc, 0x2, 0x20, 0x4, 0x2, 0x2, 0x1, 0x3, 0x38, 0x1, 0x1, 0x2, 0x3, 0x1, 0x1, 0x3, 0x3a, 0x8, 0x2, 0x2, 0x80, 0x98, 0x3, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x80, 0xc6, 0x40, 0x82, 0xd0, 0xd, 0x4, 0x1, 0x3, 0xc, 0x8b, 0xfe, 0x3, 0x80, 0x8d, 0x1, 0x60, 0x20, 0x82, 0x2a, 0x4, 0x6b, 0x2, 0xa0, 0x75, 0xd4, 0x1, 0x4, 0xa, 0x20, 0x2, 0x50, 0x2, 0x81, 0x10, 0x1, 0x3, 0x1, 0x4, 0x1, 0x19, 0x2, 0x5, 0x1, 0x80, 0x97, 0x2, 0x1a, 0x12, 0xd, 0x1, 0x26, 0x8, 0x19, 0xb, 0x2e, 0x3, 0x30, 0x1, 0x2, 0x4, 0x2, 0x2, 0x27, 0x1, 0x43, 0x6, 0x2, 0x2, 0x2, 0x2, 0xc, 0x1, 0x8, 0x1, 0x2f, 0x1, 0x33, 0x1, 0x1, 0x3, 0x2, 0x2, 0x5, 0x2, 0x1, 0x1, 0x2a, 0x2, 0x8, 0x1, 0x80, 0xee, 0x1, 0x2, 0x1, 0x4, 0x1, 0xa0, 0x4f, 0x30, 0x1, 0x82, 0xe1, 0x10, 0x10, 0x10, 0x83, 0xcd, 0x1, 0x80, 0xe2, 0x1, 0x80, 0x95, 0x5, 0x86, 0x86, 0x3, 0x1, 0x2, 0x5, 0x4, 0x28, 0x3, 0x4, 0x1, 0x80, 0xa5, 0x2, 0x82, 0x3d, 0x4, 0x81, 0x83, 0x2, 0x50, 0x3, 0x46, 0xb, 0x31, 0x4, 0x7b, 0x1, 0x36, 0xf, 0x29, 0x1, 0x2, 0x2, 0xa, 0x3, 0x31, 0x4, 0x2, 0x2, 0x7, 0x1, 0x3d, 0x3, 0x24, 0x5, 0x1, 0x8, 0x3e, 0x1, 0xc, 0x2, 0x34, 0x9, 0xa, 0x4, 0x2, 0x1, 0x5f, 0x3, 0x2, 0x1, 0x1, 0x2, 0x6, 0x1, 0x2, 0x1, 0x80, 0x9d, 0x1, 0x3, 0x8, 0x15, 0x2, 0x39, 0x2, 0x3, 0x1, 0x25, 0x7, 0x3, 0x5, 0x80, 0xc3, 0x8, 0x2, 0x3, 0x1, 0x1, 0x17, 0x1, 0x54, 0x6, 0x1, 0x1, 0x4, 0x2, 0x1, 0x2, 0x80, 0xee, 0x4, 0x6, 0x2, 0x1, 0x2, 0x1b, 0x2, 0x55, 0x8, 0x2, 0x1, 0x1, 0x2, 0x6a, 0x1, 0x1, 0x1, 0x2, 0x6, 0x1, 0x1, 0x65, 0x3, 0x2, 0x4, 0x1, 0x5, 0x81, 0x3, 0x9, 0x1, 0x2, 0x81, 0x0, 0x2, 0x1, 0x1, 0x4, 0x1, 0x80, 0x90, 0x4, 0x2, 0x2, 0x4, 0x1, 0x20, 0xa, 0x28, 0x6, 0x2, 0x4, 0x8, 0x1, 0x9, 0x6, 0x2, 0x3, 0x2e, 0xd, 0x1, 0x2, 0x81, 0x96, 0x7, 0x1, 0x6, 0x1, 0x1, 0x52, 0x16, 0x2, 0x7, 0x1, 0x2, 0x1, 0x2, 0x7a, 0x6, 0x3, 0x1, 0x1, 0x2, 0x1, 0x7, 0x1, 0x1, 0x48, 0x2, 0x3, 0x1, 0x1, 0x1, 0x81, 0x5b, 0x2, 0xb, 0x2, 0x34, 0x5, 0x5, 0x1, 0x1, 0x1, 0x94, 0xfd, 0x1, 0x6, 0xf, 0xa0, 0x36, 0x9a, 0x5, 0x3b, 0x7, 0x84, 0x18, 0x1, 0x3f, 0x4, 0x51, 0x1, 0xa0, 0x4c, 0xb8, 0x2, 0x92, 0x61, 0x2e, 0x2, 0x17, 0x82, 0x20, 0x3, 0x11, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x80, 0x94, 0x3, 0x87, 0xbb, 0x37, 0x4, 0x32, 0x8, 0x1, 0xe, 0x1, 0x16, 0x5, 0x1, 0xf, 0x85, 0x50, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5, 0x64, 0x1, 0x80, 0xa0, 0x7, 0x81, 0x77, 0x1, 0x3d, 0x4, 0x81, 0xfc, 0x4, 0x83, 0xe0, 0x7, 0x6d, 0x7, 0xac, 0x17, 0xb5, 0x80, 0xf0]; -_T Sk = [0x5e, 0x1, 0x1, 0x1, 0x47, 0x1, 0x6, 0x1, 0x4, 0x1, 0x3, 0x1, 0x82, 0x9, 0x4, 0xc, 0xe, 0x5, 0x7, 0x1, 0x1, 0x1, 0x11, 0x75, 0x1, 0xe, 0x2, 0x85, 0x2, 0x1, 0x97, 0x34, 0x1, 0x1, 0x3, 0xb, 0x3, 0xd, 0x3, 0xd, 0x3, 0xd, 0x2, 0x90, 0x9c, 0x2, 0xa0, 0x76, 0x63, 0x17, 0x9, 0x2, 0x67, 0x2, 0x83, 0xd0, 0x1, 0xe, 0x2, 0xa0, 0x50, 0x46, 0x11, 0x83, 0x7b, 0x1, 0x1, 0x1, 0x80, 0xa2, 0x1, 0xa0, 0xf4, 0x17, 0x5]; -_T Po = [0x21, 0x3, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0xa, 0x2, 0x3, 0x2, 0x1b, 0x1, 0x44, 0x1, 0x5, 0x1, 0xe, 0x2, 0x7, 0x1, 0x82, 0xbe, 0x1, 0x8, 0x1, 0x81, 0xd2, 0x6, 0x29, 0x1, 0x36, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2c, 0x2, 0x14, 0x2, 0x1, 0x2, 0xd, 0x1, 0x1, 0x3, 0x4a, 0x4, 0x66, 0x1, 0x2b, 0xe, 0x80, 0xe9, 0x3, 0x36, 0xf, 0x1f, 0x1, 0x81, 0x5, 0x2, 0xa, 0x1, 0x80, 0x8c, 0x1, 0x78, 0x1, 0x79, 0x1, 0x81, 0x86, 0x1, 0xc, 0x1, 0x81, 0x6f, 0x1, 0x5a, 0x1, 0xa, 0x2, 0x80, 0xa8, 0xf, 0x1, 0x1, 0x70, 0x1, 0x4a, 0x5, 0x4, 0x2, 0x6f, 0x6, 0x80, 0xab, 0x1, 0x82, 0x64, 0x9, 0x83, 0x5, 0x1, 0x7c, 0x3, 0x47, 0x2, 0x80, 0x9d, 0x3, 0x1, 0x3, 0x25, 0x6, 0x1, 0x4, 0x81, 0x39, 0x2, 0x80, 0xd8, 0x2, 0x80, 0x80, 0x7, 0x1, 0x6, 0x80, 0xac, 0x7, 0x1c, 0x2, 0x7d, 0x4, 0x3b, 0x5, 0x3e, 0x2, 0x40, 0x8, 0xb, 0x1, 0x83, 0x42, 0x2, 0x8, 0x8, 0x8, 0x9, 0x2, 0x4, 0x2, 0x3, 0x3, 0xb, 0x1, 0x1, 0x1, 0xa, 0x8c, 0x9a, 0x4, 0x1, 0x2, 0x70, 0x1, 0x80, 0x8f, 0x2, 0x4, 0x3, 0x2, 0x1, 0x2, 0x9, 0x1, 0x2, 0x1, 0x1, 0x2, 0x2, 0xa, 0x5, 0x1, 0xa, 0x2, 0x4, 0x1, 0x1, 0x1, 0xd, 0x2, 0x3, 0x81, 0xac, 0x3, 0x39, 0x1, 0x80, 0xbd, 0x1, 0xa0, 0x74, 0x2, 0x2, 0x81, 0xd, 0x3, 0x63, 0x1, 0xa, 0x1, 0x73, 0x6, 0x81, 0x7c, 0x4, 0x56, 0x2, 0x28, 0x3, 0x1, 0x1, 0x31, 0x2, 0x2f, 0x1, 0x61, 0xd, 0x10, 0x2, 0x7c, 0x4, 0x7e, 0x2, 0x10, 0x2, 0x80, 0xf9, 0x1, 0xa0, 0x52, 0x24, 0x7, 0x2, 0x1, 0x16, 0x1, 0x14, 0x2, 0x2, 0x4, 0x3, 0x3, 0x1, 0x4, 0x7, 0x3, 0x6, 0x1, 0x1, 0x2, 0x80, 0x95, 0x3, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x2, 0xa, 0x2, 0x3, 0x2, 0x1b, 0x1, 0x24, 0x1, 0x2, 0x2, 0x81, 0x9a, 0x3, 0x82, 0x9c, 0x1, 0x30, 0x1, 0x81, 0x9e, 0x1, 0x82, 0xe7, 0x1, 0x80, 0xc7, 0x1, 0x1f, 0x1, 0x81, 0x10, 0x9, 0x26, 0x1, 0x70, 0x7, 0x42, 0x7, 0x59, 0x4, 0x83, 0xb8, 0x5, 0x2c, 0x4, 0x80, 0xbd, 0x7, 0x6d, 0x2, 0x1, 0x4, 0x7e, 0x4, 0x30, 0x2, 0x4f, 0x4, 0x4, 0x1, 0xd, 0x1, 0x1, 0x3, 0x58, 0x6, 0x6b, 0x1, 0x81, 0xa1, 0x5, 0xa, 0x2, 0x1, 0x1, 0x68, 0x1, 0x80, 0xfa, 0x17, 0x69, 0x3, 0x1c, 0xd, 0x4c, 0x1, 0x80, 0x82, 0x3, 0x80, 0xfc, 0x1, 0x81, 0x8, 0x3, 0x80, 0x9b, 0x1, 0x5c, 0x8, 0x53, 0x3, 0x1, 0x5, 0x5d, 0xa, 0x81, 0x37, 0x5, 0x2a, 0x2, 0x82, 0x85, 0x2, 0x4a, 0xd, 0x80, 0xaf, 0x1, 0x84, 0x70, 0x5, 0x8b, 0x7c, 0x2, 0xa0, 0x3a, 0x7b, 0x2, 0x80, 0x85, 0x1, 0x41, 0x5, 0x8, 0x1, 0x83, 0x52, 0x4, 0x81, 0x47, 0x1, 0xa0, 0x4c, 0xbc, 0x1, 0x9d, 0xe7, 0x5, 0x8e, 0xd2, 0x2]; -_T Deprecated = [0x81, 0x49, 0x1, 0x85, 0x29, 0x1, 0x89, 0x3, 0x1, 0x1, 0x1, 0x88, 0x29, 0x2, 0x88, 0xc5, 0x6, 0x82, 0xb9, 0x2, 0xad, 0xdc, 0xd6, 0x1]; -_T Other_ID_Continue = [0x80, 0xb7, 0x1, 0x82, 0xcf, 0x1, 0x8f, 0xe1, 0x9, 0x86, 0x68, 0x1]; +_T ID_Start = x"411A061A2F010A0104010517011F0181CA040C0E05070101018081050102020401010601010301010114015301808B0880A6012602010629471B04042D2B2302016301010F0207020A0302011001011E1D590B0118210902040105160401090103011719070B05180106112A3A3603011201070A0F10040802020216010701010304030110010D0201030E020A0108060402021601070102010201021F0401011303100901030116010701020105030112010F0217010B080202021601070102010503011E0201030F01110101060303010403020101010203020303030C1601340801030117011003011A03020102021E01040801030117010A010503011F0201020F0211090103012902011001050308031806051203180109010102073A3001020C073A020101010501180101010A0102090102050101150420013F0801241B05732B140110060404030103020703040D0C01112601010501022B01814D01040207010101040229010402210104020701010104020F01390104024325101056020603826C0211011A054B030B07120D130E120E0D01030F342301040143590729010105460A1F311E02050B2C041A3617093552015D2F1108361E0D020A2C1A2429030A24020B052B020329040106010203010580C04081160206022602060208010101010101011F0235010701010303010703040206040D0503010774010D01100D65010401020A01010206060101010101011002040505040111298A7780E5060403020C26010105010238070110170907010701070107010701070107010782260319090705020504560405015A0104052B015E11203010820099C040A0568D432E02810D03100A02142F101F025027090267024302020101010815100103010401171D340E323E06030101020B1C0A17191D072F1C011005010A0A05012917030108141703010332010103020205020101011803020B07030C060206020609070107012B010E06731DA02BA40C170431A02104816E026A26070C050501010A010D0105010101020102016C21816B12400236280C7405018087241A061A0B590306020602060203230C011A01130102010F020E227B4535810B1D03312F200D1E05260A1E0224040801052A809E12240424042808340C0B010F01070102010B010F0107010203340C813709160A081806012A010945060201012C0102030102170A17091F411301020A160A1A4638060240010F040103011D2A1D031D2308011C1B360A160A130D126E4937330D330D24261C091780FA2A060210033B1D0A0108162A122E151B170C35390202010D2D20191A241D010201082303010C300E04150101012312011913023F0701010104010F010A072F260802020216010701020105030112010C051E0A0101020101260101190101012C35120414031E301402010180B82F2904243014013B2B0D01471B250780B92C74401F0802010208010201180F0101015E080227100101011C010A28070115010B2E1301124980C7211F0901251101311E70070102012615011906010201200E018147130F01010D01227C014F839A666F1180C48A4C610F84301106198F9B0582479AB91E86E28239071F114F111E123010041F15051381B02D80D34080804B0501420D400201011C97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A97665501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F0119010887341F060681053E80922D0A07100181411E122C81E41C80E41E020181EF0701040102010F0180C53B44070184B404011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501119144A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Cs = x"A0D8008800"; +_T Default_Ignorable_Code_Point = x"80AD0182A10182CC018B4202865302550587FB051A05311090F401A0CC9B1080EF0180A0014F09A0BCA70494CF08AC2E859000"; +_T Pd = x"2D01855C0133018E41018405018809068E010102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01"; +_T Unified_Ideograph = x"A0340099C040A05200A05A0E02010101020A01010101020203A105D6A0A6E020903A0680DE0296820E9D310F826E91A2934B059060"; +_T IDS_Binary_Operator = x"A02FF002020A81F101"; +_T Sm = x"2B0110033D0101012D01040125011F0182FE01820F039A3B010D0127030D03808B01270506014405050204010201020107011F02020101011F810C20025A011E19280681D501090136086F01815005021F0A1081008083163F042002810230150206A0CFDC01833801010380A40110033D01010180830106048DA102A0C9310119011F0119011F0119011F0119011F011901972C02"; +_T Pi = x"80AB019F6C010202020119018DC8010101040102010F010301"; +_T Other_Grapheme_Extend = x"89BE01180181660118016601180180E80101010402010209026701180177010F018935011E0184000105010101050265014702841801902102A07923016C01A055DD0292200174018108010E0109016001090102010103050180E0010C0180F1018106018279010C01860301A050AE02A06173020606AC2EAD60"; +_T Grapheme_Extend = x"83007081130781072D0101010201020101480B30151001650702060202010423011E1B5B0B3A09090118040109010301052B033B092A180120370101010408040103070A021D013A0101010204080109010A021A010202390104020402020303011E0203010B0239010405010204011402160601013A0101020104080107030A021E013B0101010C01090128010301370101030503010407020B021D013A01020201010303010407020B021C02390201010204080109010A021D0148010401020301010801510102070C08620102090B0749021B0101010101370E01050102050B0124090166040106010202021902040310040D01020206010F0182BF0383B2041C031D021E02400201070801020B09012D03010175022201760304020901060380DB0202013A010107010101010208060A0201301F3104300A040326090C0220040206380101020301010538080202809803010D010704010601030280C640820C0180C3218BFE03808D016020822A066902A075D404010A2002500281100103010401190205018097021A120D012608190B01012C03300102040202020124014306020202020C0108012F01330101030202050201012A02080180EE0102010401A04F300182E1101010816E02825D0180E201809505868603010205042803040180A502823D044105813D024F04460B31047B01360F290102020A033104020207013D03240501083E010C0234090101080402015F03020406010201809D01030815023902010101010C0109010E07030543010206010102010103040301010E02550802030101170151010206010102010102010280EB010204060201021B025508020101026A01010102086501010102040105810309010280F5010A04040180900402020401200A280602040801090602032E0D01028196070106010152160207010201027A060301010201070101480203010101815B020B0234050503170194E501060FA02CC80C030389C0053B078418013F0451010B02A04CAB0292612E0217821E050306080802071E0480940387BB37043208010E011605010F8550070111020701020105640180A0078177013D0481FC0480FE0282E0076D07AC16D560808080F0"; +_T Other_ID_Start = x"98850288910115018F6C02"; +_T Pattern_Syntax = x"210F0A071A0401011A042207010101020101010204010401030117011F019F1818080F0213010A813182D080A082761E846C8200808081810304190F01A0CD0D02810502"; +_T Modifier_Combining_Mark = x"86540202018083010601030281E102010303011F01"; +_T Lu = x"411A6517010721010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101030201010102010302040102010303020102010101010102010102010102010301010102030107010201020102010101010101010101010101010101020101010101010101010101010101010101020102010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010702010202010104010101010101010181210101010301080106010103010101020111010923010203030101010101010101010101010101010101010101010101050102010102023330010101010101010101010101010101010101010101010101010101010101010101090101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102268B49260101050182D256889301062B0203814001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010901010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101090808060A08080808060B01010101010101080848040C040C040C050B0481060104010303020302010305060101010101010402040A0205013D018A7C303001010302010101010101040101020108030101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080101010401A0794D0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011301010101010101010101010101010101010101010101010101010180870101010101010101010101010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010A0101010102010101010101010104010101020101010301010101010101010101010101010101010101010501050101010101010101010101010101010401010102030105010101010101011801A0572B1A84C528808824809C0B010F0107010286EA33809D168B3A20A0558020A065A01A1A1A1A1A1A01010202010202020401081A1A1A020104020801071B0201040105010103071B1A1A1A1A1A1A1A1A1A1A1A1E1921192119211921192101913522"; +_T Case_Ignorable = x"270106010B01230101014701040101010401020281F780C0040204010902010180FB0780CF010501312D01010102010201012C010B060A0B010123010A1510016508010A0104210101011E1B5B0B3A0B0401020118182B032C0107020509293A370101010408040103070A020D010F013A010404080114021A010202390104020402020303011E0203010B0239010405010204011402160601013A0102010104080107020B021E013D010C0132010301370101030503010407020B021D013A0102010601050214021C0239020404080114021D014801070301015A0102070B09620102090901010749021B0101010101370E01050102050B0124090166040106010202021902040310040D01020206010F015E0182600383B2031D021E021E02400201070801020B030105012D05330141022201760304020901060380DB0202013A010107010101010208060A02012701081F3104300101050101050128090C0220040202010338010102030101033A08020240065203010D0107040106010302323F0D01226581BD0101030B030D030D030D020C0508020A01020102053105010A01010D01100D33218B8B0271037D010F0160202F0181D5012404030505015D065D03A06F160184E206810E016204010A01011C0450020E224E01170367030302080103010401190205018097021A120D012608190B2E03300102040202110115024206020202020C01080123010B01330101030202050201011B010E020502010164050903790102010401A04F3001809311823D1003010C102201020180A901070106010B01230101012F012D024301150382010180E201809505840506012A0109824603010205042803040180A502823D0426011A050101813B024F04460B31047B01360F290102020A0331040202020104010A013203240501083E010C0234090A0402015F030201010206010201809D0103081502390203012507030546060D01010101010E025508020301011701540601010402010280EE04060201021B025508020101026A01010102060101650101010204010581030901028100020101040180900402020401200A280602040801090602032E0D01028196070106010152160207010201027A060301010201070101480203010101815B020B02340505010101170194D511060FA02CC80C030389C0053B07090481FC03280281E2013F1140020102A0400B04010701028C9E020104925C2E0217822003091002071E0480940387BB37043208010E011605010F8550070111020701020105053E210180A00E8170013D0481FB0580FE0282E0076D088AAF05AC0C01011E60808080F0"; +_T Lo = x"80AA010F01810001040480D001833B1B04042D20010A23020163010118020A0302011001011E1D590B01182115162A19070B0518010611293B3603011201070A100F040802020216010701010304030110010D0201030E020A0108060402021601070102010201021F0401011303100901030116010701020105030112010F0217010B080202021601070102010503011E0201030F01110101060303010403020101010203020303030C1601340801030117011003011A03020102021E01040801030117010A010503011F0201020F0211090103012902011001050308031806051203180109010102073A3001020C063B020101010501180101010A010209010205170420013F0801241B05732B140110060404030103020703040D0C0171814901040207010101040229010402210104020701010104020F013901040243251071826C0211011A054B060807120D130E120E0D01030F3428014323013507050222010105460A1F311E02050B2C041A3617093580B02F1108361E0D020A2C1A2429030A1E7104010601020301843A048BF738181709070107010701070107010701070107822701350104560801015A0401052B015E11203010820099C040A05215018477432808810C04100A024201314680A901670103070103010401171D340E323E06030101020B1C0A17191D072F2D0502090A050129170301081410010603010332010103020205020101011802030B07010E0602060206090701078091231DA02BA40C170431A02104816E026A4301010A010D0105010101020102016C21816B12400236280C7405018087690A012D021F0306020602060203230C011A01130102010F020E227B81851D03312F200D14010806260A1E0224040880804E622808345C340C813709160A088098060201012C0102030102170A17091F411301020A160A1A4638060240010F040103011D2A1D031D2308011C1B360A160A130D126E4980B7242604010181302A060210033B1D0A0108162A122E151B170C35390202010D2D20191A241D010201082303010C300E04150101012312011913023F0701010104010F010A072F260802020216010701020105030112010C051E0A0101020101260101190101012C35120414031E301402010180B82F2904243014013B2B0D01471B250780B92C80D30802010208010201180F0101015E080227100101011C010A28070115010B2E1301124980C7211F0901251101311E70070102012615011906010201200E018147130F01010D01227C014F839A80E680C48A4C610F84301106198F9B0582479AB91E86E28239071F114F111E12303315051381B32881954B050180AF97F80884D6290AA022F781230F011D0302010E0408818C89046B050D0309070AA022700181F52D210181411E122C81E41B80E51E020181EF0701040102010F0180C5853B04011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501119144A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Pc = x"5F019FDF021301A0DDDE02180380EF01"; +_T Bidi_Control = x"861C0199F1021A053704"; +_T Co = x"A0E0009900AE0700A0FFFE02A0FFFE"; +_T Variation_Selector = x"980B030101A0E5F010AD02F080F0"; +_T Soft_Dotted = x"690280C4018119011E01340114018140016201010199090133010D010301808401809D0181A50180D6028B3201A1A7A5023202320232023202320232023202320232023202320232028886018131021A01"; +_T Noncharacter_Code_Point = x"A0FDD020820E02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE02A0FFFE"; +_T Logical_Order_Exception = x"8E40057B058AF0030201A090FA0202010102"; +_T Cased = x"411A061A2F010A0104010517011F0180C301040480D0012407021E0560012A040202020401010601010301010114015301808B0880A6012609298B172601010501022B010482A056020688820B052B02034080C04081160206022602060208010101010101011F0235010701010303010703040206040D0503010774010D01100D65010401020A0101030506010101010101040106040102040505040111200302833134871680E5060403020C2601010501A079122E121E8084660304013E0202010101081505010383352B010E0650A04F40070C0584091A061A84A55060240424740B010F01070102010B010F0107010281C3010203012A010984C5330D335D160A168B1A40A0556040A065805501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F0119010887340A0114060681053E88924487EC1A061A061A"; +_T ID_Compat_Math_Continue = x"80B20205019FB601030B010F81730104011601A1B4A20119011F0119011F0119011F0119011F011901"; +_T Math = x"2B0110031F011D0101012D01040125011F0182D80302011A020203820F039A0D011B030B0103010D010E0415050B05410D04010302040512010401020A0101020606010302020201030106030E010144180106010204020420010106020E810C080414025A011E1B010118010B0781BD020C0A04060402020203050E01010102060B080502390101011D0409038150408100820030150206A0CFDC01833706010180A20110031D0101011D01010180830106048DA102A0C6705501470102020102020204010C010101070141010402080107011C01040105010103070181540281240232960004011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402"; +_T No = x"80B20205010203893506817806780380850780D907110981B10A84351484730A81E0018695010306060A80C610290182D63C4E1682761E856901849404808A0A1E08010F200A270FA0757006A058D12D4104110281551B2404853408190727094B05160680A0020210022E400934021E034B05680818082907814A0681601F809E0A2A047007808614817B1485450281AE09836713835315A04B8607831E17A06429140C146C19954E0983A13B010301044C2D010F83C20D"; +_T ID_Continue = x"300A071A0401011A2F010A01010102010517011F0181CA040C0E05070101011175010202040101060501010114015301808B01050280A6012602010629082D0101010201020101081B04041D0B054A04660108020A01130201103B02650E3604010201022E121C040B05180106084B018081020A0113010802020216010701010304020902020204080104020105020C0A01010102030106040202160107010201020102020101050402020303010704010107100B03010901030116010701020105020A0103010302010F04020A09070103010802020216010701020105020902020203070304020105020A0101100201060303010403020101010203020303030C040503030104020106010E0A100D0103011701100209010301040702010302010204020A1004010801030117010A0105020901030104070206020104020A01030C0D010301330103010505040705020A0A060103011203180109010102070301040601010108060A02020D3A050F010A270201010105011801010117020501010107010A020420011702060A0B0101010101040A01240414011201240901394A064E022601010501022B01814D01040207010101040229010402210104020701010104020F013901040243020309090E101056020603826C0211011A054B030B071609160B140C0D010301020C5403010402020A2103010B0659072B05460A1F010C040C0A2802050B2C041A060B251C043F011D020B060A0D01080E0110314D030A11090C740C38080A0331020B052B0203100301270582160206022602060208010101010101011F0235010701010303010703040206040D050301070F02310213011C010D01100D330D0401030C11010401020A01010206060101010101011002040505040111298A7780E506090C2601010501023807010F18090701070107010701070107010701070120820503190F0105020504560207015F052B015E11203010820099C040A0568D432E02810D031C1430040A01732509026702430202010101081536040113340C460A0A06180301013102240C1D03410E0B061F0137090E020A061703491803021002050A060206020609070107012B010E067B0102020A06A02BA40C170431A02104816E026A26070C05050C010D0105010101020102016C21816B12400236280C04101010030218032005018087130A071A0401011A0A5A0306020602060203230C011A01130102010F020E227B453580880180821D03310F011F200D1E052B051E0224040801052A809E020A06240424042808340C0B010F01070102010B010F0107010203340C813709160A081806012A010945060201012C0102030102170A17091F411301020A160A1A463806024004010205080103011D02030401201D031D2308011E19360A160A130D126E4937330D330D28080A06260305011780FA2A01020302100337210A0108211F162A151B1709471F10093C07010D19070A0635010A04040824020109450404010D01012312012506043E0701010104010F010A073B050A0604010802020216010701020105010A02020203020106010507020703050B0A010102010126010A01010201010401080D021D4B050A04041E460101080A80A63602091706224103010B0A2639070A06141C1B020F040A060780B93B654A1508020102080102011E010202090C0A4608022E020801021B3F0801084A0301124980C7210F0A0609012D01090F0A181E0216010E49070102012C030101020109080A06060102012501020106070A8136170911012903050D0B55014F839A666F1180C48A4C610F843010160A8F9B0582479AB93A86C68239071F010A064F010A061E02050B3709040C0A0915051381B02D030A80C64080804B04390711400201020B020E97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A030290510A82062E0217821E050306080802071E0480940381BB5501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F011901080232820037043208010E011605010F84501F060680D5070111020701020105053E2101702D030E020A040181411F113A81D62A80D62B81E50701040102010F0180C50B07294C040A84A604011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501118D340A8406A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060AADD5080F0"; +_T Me = x"848802963401861E040103A0858B03"; +_T Ideographic = x"A030060219090E0383C599C040A05200A05900816E026AA0750A011B97F80884D6290AA02467818CA04D04A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Cf = x"80AD01855206160180C001310181800250018F2B0187FC051A053105010AA0DE8F0180F90390C1010F01A0236210A088600494CF08AC2E86011E60"; +_T So = x"80A60102010401010183D101810A027F0280CE010A01130280F701820301817501808206010180840180CF0129018187030F010103020614010101010180850801060102050480C50282F00A82D30182D201809D2281610A0909858302010401020A010102060601010101010104010B020E01010201013A0209050204010201020107011F02020101011F810C08041402070251011E19280648160B514E1680B701090136086F0180F82C2C408100820030150206270220016980E5068165022E1A01590C80D61A1004010D020C0115020602815002040A20260901101F0B1E08010F200A270F814099C040A05690378361040A020101823D03A052C6107F012D0381E401030104020D0281390939110203010D03012F2D867A02824F018C76018895080411A04B4A040501A05156018F6380F01081B4809C743C80F60A27023C05031602071E043D1542030180BA5784A9820037043208010E010286C8018B5C0180810182D12C04640C0F020F010F01251780A1381D0D2C040907020E06809A80FB0582D80411030D0377045F060C04010F0C0438080A0628081E020C04023E81540C0E020D030A0538070F020B0609078093015C"; +_T White_Space = x"0905120164011A0195DF01897F0B1D0205012F018FA001"; +_T Sentence_Terminal = x"21010C01100185490180930380B4012B0380F6013D010101030281250286E402831601040283050180C602809D022D010501813A0281620480A2020A0202021D0380BB02410283A401170209038CAF038132010D01160281AD01A074FC01810E0280E3010301817E0256025F0180980280930380900280F901A052260102023B01030280A9010C01100141018AF40284FD052C0480BD0275047F0380810206011002580201026C01812A027502817502050F690280F903820501010180FB02570281A40282B4024A02A04B290280850141020B01822902812801A04E06019DE801"; +_T Lt = x"81C5010201020126019D9508080808080C010F012F01"; +_T Other_Lowercase = x"80AA010F0181F50907021E05600134018D81018C2F3F0D01222582B1010D01100D80D31083501A879202A07A1E0280D20180810303028362040901A05C16010203012A0109A0D8753E"; +_T Other_Alphabetic = x"8345011D0D82400E0101010201020101480B300D01071001650704040202040123011E10660B65020309010301046A013C0C030706143602020F010205030A021D033A07020202020A010A021D033A050402020204011E0203010B033A08010301021502160304033A070202020209020A021E013B05030301030A01280539070103010308020B021D033A070103010308020B020F010C043A07010301030A010A021D034B060101010812023D0102071201630102060102100180A313090B01246E0C01010204170404030103020703040D0C01010A048674021E021E021E02421380BC022201760C040980DE05390A02144A020B033105300F3C031E090202390B3213819C2286C13488F620A0787408220281620108011705580232100101390126051C0C2D04300C2501430E0C0108022D0332010103020205012C05050180ED08A04F33018857058686030102050483140441018141024F01810303350E2D020B032D0909013D03240C12023903300D0E025C09020106010201809D0A17043A07020202020A010A0254090101020101040102670D01036A1280ED0702071D02520F01016A0B670E81010D80F7060102020203010101808E07020604011C0A2A050104120B2E0E81970801075316010E7A0603010102010301010301420501020104815C040902010130070303A041DD118E2001013707045D02A04CAC01A02361070111020701020105640188B70187E81A061A061A"; +_T XID_Continue = x"300A071A0401011A2F010A01010102010517011F0181CA040C0E05070101011175010203030101060501010114015301808B01050280A6012602010629082D0101010201020101081B04041D0B054A04660108020A01130201103B02650E3604010201022E121C040B05180106084B018081020A0113010802020216010701010304020902020204080104020105020C0A01010102030106040202160107010201020102020101050402020303010704010107100B03010901030116010701020105020A0103010302010F04020A09070103010802020216010701020105020902020203070304020105020A0101100201060303010403020101010203020303030C040503030104020106010E0A100D0103011701100209010301040702010302010204020A1004010801030117010A0105020901030104070206020104020A01030C0D010301330103010505040705020A0A060103011203180109010102070301040601010108060A02020D3A050F010A270201010105011801010117020501010107010A020420011702060A0B0101010101040A01240414011201240901394A064E022601010501022B01814D01040207010101040229010402210104020701010104020F013901040243020309090E101056020603826C0211011A054B030B071609160B140C0D010301020C5403010402020A2103010B0659072B05460A1F010C040C0A2802050B2C041A060B251C043F011D020B060A0D01080E0110314D030A11090C740C38080A0331020B052B0203100301270582160206022602060208010101010101011F0235010701010303010703040206040D050301070F02310213011C010D01100D330D0401030C11010401020A01010206060101010101011002040505040111298A7780E506090C2601010501023807010F18090701070107010701070107010701070120820503190F01050205045602020203015F052B015E11203010820099C040A0568D432E02810D031C1430040A01732509026702430202010101081536040113340C460A0A06180301013102240C1D03410E0B061F0137090E020A061703491803021002050A060206020609070107012B010E067B0102020A06A02BA40C170431A02104816E026A26070C05050C010D0105010101020102016C21808B0680DA12400236280A0610101003021803210101010301010101010101017E130A071A0401011A0A5A0306020602060203230C011A01130102010F020E227B453580880180821D03310F011F200D1E052B051E0224040801052A809E020A06240424042808340C0B010F01070102010B010F0107010203340C813709160A081806012A010945060201012C0102030102170A17091F411301020A160A1A463806024004010205080103011D02030401201D031D2308011E19360A160A130D126E4937330D330D28080A06260305011780FA2A01020302100337210A0108211F162A151B1709471F10093C07010D19070A0635010A04040824020109450404010D01012312012506043E0701010104010F010A073B050A0604010802020216010701020105010A02020203020106010507020703050B0A010102010126010A01010201010401080D021D4B050A04041E460101080A80A63602091706224103010B0A2639070A06141C1B020F040A060780B93B654A1508020102080102011E010202090C0A4608022E020801021B3F0801084A0301124980C7210F0A0609012D01090F0A181E0216010E49070102012C030101020109080A06060102012501020106070A8136170911012903050D0B55014F839A666F1180C48A4C610F843010160A8F9B0582479AB93A86C68239071F010A064F010A061E02050B3709040C0A0915051381B02D030A80C64080804B04390711400201020B020E97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A030290510A82062E0217821E050306080802071E0480940381BB5501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F011901080232820037043208010E011605010F84501F060680D5070111020701020105053E2101702D030E020A040181411F113A81D62A80D62B81E50701040102010F0180C50B07294C040A84A604011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501118D340A8406A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060AADD5080F0"; +_T Cc = x"00205F21"; +_T Regional_Indicator = x"A1F1E61A"; +_T Sc = x"24017D0484E9017B0181F20281F202070180F501810701824501899B0188C421A0877701A055C3016C01809A0180DB0203029FF604A0C31E0189B001"; +_T IDS_Unary_Operator = x"A02FFE02"; +_T Pf = x"80BB019F5D0103011C018DC8010101040102010F010301"; +_T Pe = x"290133011F018EBD010101875E0189A90137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101012C0101010101010181AC01010101010101010103010101010101010202A0CD1E0180D9011D010101010101010101010101010101030111010101010180AA0133011F0102010201"; +_T Other_Uppercase = x"A021601083461AA1CC601A061A061A"; +_T Cn = x"8378020604070101011401818D0126023202030137081B04060B810E013C02650E3B0231020F011C0201010B051F01020580ED010802020216010701010304020902020204080104020105021902030106040202160107010201020102020101050402020303010704010107110A03010901030116010701020105020A0103010302010F04020C0707010301080202021601070102010502090202020307030402010502120A0201060303010403020101010203020303030C040503030104020106010E15050D0103011701100209010301040702010302010204020A071601030117010A0105020901030104070206020104020A01030C0D01030133010301060410021A0103011203180109010102070301040601010108060A02030C3A041D250201010105011801010117020501010107010A02042048012404270124010F010D2580C60101050102817901040207010101040229010402210104020701010104020F0139010402430220031A0656020602829D03590716091809140C0D010301020C5E020A060A061A0659072B05460A1F010C040C0401032A02050B2C041A060B033E0241011D020B060A060E021F314D0180A6083C030F033E052B020B082B0582160206022602060208010101010101011F0235010F010E02060113020301090165010C021B010D03210F210F808C04829A160B158714022001815D052D01010501023807020E1809070107010701070107010701070107017E221A01590C80D61A5001560267052B015E0156093001A0726D033709815C1480B80880CE020201010108153B030A06380846080C06740B1E034E010B04210137090E020A0267181C0A060206020609070107013C047E020A06A02BA40C17043104A0226E026A26070C05051A0105010101020102017D1081BD02360701202A063301130104040501808702010180BE0306020602060203030701070A05020C011A01130102010F020E227B0503042D0358010D03012F2E80821D03310F1C0424091E052B051E0125040E2A809E020A06240424042808340B0C010F01070102010B010F0107010203340C813709160A081806012A010945060201012C01020301021701480809301301020521031B0501403804140232010205080103011D0203040A070907402027040C0936031D021B051A07040C07504937330D33072E080A0626031D080280D01F012A010302021003372C082A161A261C1417094E042409440A010219070A063501120827096001140B12012F3E0701010104010F010B063B050A0604010802020216010701020105010A02020203020106010507020703050B0A010102010126010A010102010104010A010208021D5C01051E48080A80A636022622450B0A060D133A060A06141C1B020F041780B93C64530C08020102080102011E0102020C090A4608022E020B1B4808530D49070A80B6220E0A0609012D010E0A1D03200216010E49070102012C030101020109080A06060102012501020106070A81361907110129031D55010F320D839B666F01050B80C48A4C630D84560A8F9B0582479AB93A86C68239071F010A0451010A061E02060A460A0A01070115051381B03A80C65B654B0439071140050B020E97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A02088F5C80FA0681B44C2E021709743C80F60A270280C215467A140C140C57091980875501470102020102020204010C010101070141010402080107011C01040105010103070181540281240282BE0F05010F84501F060680D5070111020701020105053E2101702D030E020A040281401F113A050181D02A80D62B040181E00701040102010F0180C50210294C040A04028311444C3D80C204011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402810E2C04640C0F020F010F01250A80AE381D0D2C040907020E06809A83D80411030D0377045F060C04010F0C0438080A0628081E020C04023E81540C0E020D030A0538070F020B060907809301668406A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060AADC51011E60808080F0A0FE10A0FFFE02A0FFFE"; +_T Hyphen = x"2D017F0184DC01927B018809028E050182E301A0CD670180A9015701"; +_T Other_Math = x"5E0183710302011A0202029C20011B030B01200418020E02410D04010302040512010401020A0101030506010302020201030106030405054B05020401020102010101050202040204120202010101070101060281220480A80201011801110181BD020C0905050502020203050E01010102061802390101011D0409028156021F0A8193163F042002A0D463010101040180D3010101A0D4C15501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F011901080232960004011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A0111050301050111"; +_T Ps = x"280132011F018EBE010101875E01897E010301260137010F01827A0101011E01843E0101010101010101010101010150012001010101010101010181940101010101010101010101010101010101010101014001010121018425010101010101011901120101010101010181AC01010101010101010103010101010101010201A0CD210180D7011D010101010101010101010101010101030111010101010180AA0132011F0103010201"; +_T Zs = x"20017F0195DF01897F0B24012F018FA001"; +_T Alphabetic = x"411A061A2F010A0104010517011F0181CA040C0E050701010156011D120102020401010601010301010114015301808B0880A6012602010629270E0101010201020101081B04041D0B053801070E660108040804030A03020110300D65182109020401051802131319070B051801060801082A0A0C0307064C01100103040F0D1301080202021601070101030403080202020201010801040201050C020A010403010604020216010701020102010204050402020204010704010111060B0301090103011601070102010503090103010203010F04150404030108020202160107010201050308020202020902040201050D01100201060303010403020101010203020303030C04050303010303010601280D01030117011003080103010308020103020102041C04010801030117010A01050308010301030802060201040D030C0D01030129020801030103010105040705160601030112031801090101020708060101010812020D3A0507060133020101010501180101011301030205010106010E0420013F08012404130410012443370101020510400A04022601010501022B01814D01040207010101040229010402210104020701010104020F01390104024325101056020603826C0211011A054B030B07140B150C140C0D010301020C3402130E0104014359072B05460A1F010C0409171E02050B2C041A361C043F0214320117020B033134010F0108332A02040A2C010B0E3716030A24020B052B020329040106010203010580C013220B81160206022602060208010101010101011F0235010701010303010703040206040D0503010774010D01100D65010401020A010103050601010101010104010B0204050504011129832D34871680E5060403020C26010105010238070110170907010701070107010701070107010701202F0181D50319090705020504560603015A0104052B015E11203010820099C040A0568D432E02810D03100A02142F050803712709026702430202010101081514012118340C4401012C06030101030A2105230D1D0333010C0F0110100A050137090E12170345010101011803021002040B060206020609070107012B010E067B15A02BA40C170431A02104816E026A26070C05050C010D0105010101020102016C21816B12400236280C7405018087241A061A0B590306020602060203230C011A01130102010F020E227B4535810B1D03312F200D1E052B051E0224040801052A809E12240424042808340C0B010F01070102010B010F0107010203340C813709160A081806012A010945060201012C0102030102170A17091F411301020A160A1A463806024004010205080103011D2A1D031D2308011C1B360A160A130D126E4937330D330D28221C0301051780FA2A0102030210033701031D0A0108162A122E151B1709462B050A3909010D1917331104082303010940010409020A01010123120122020106043E0701010104010F010A073917040108020202160107010201050308020202020301060105071C0A010102010126010A0101020101040102030101012C420103010414031E420202010180B83602071906223F010103013B360201471B020E150780B93967401F08020102080102011E0102020202045D08022E0206010101021B33020A11480501124980C7211F09012D01070101311E0216010E49070102012C030101020103010102021806010201250102010401018147170911012903036F014F839A666F1180C48A4C610F84301106198F9B0582479AB92F86D18239071F114F111E123010041F15051381B02D80D34080804B04390711400201010C020E97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A040197615501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F0119010887341F060680D5070111020701020105053E2101702D0A07100181411E122C81E41C80E41E020181EF0701040102010F0180C53B440301030184B404011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A011105030105011182741A061A061A8E76A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T XID_Start = x"411A061A2F010A0104010517011F0181CA040C0E05070101018081050102030301010601010301010114015301808B0880A6012602010629471B04042D2B2302016301010F0207020A0302011001011E1D590B0118210902040105160401090103011719070B05180106112A3A3603011201070A0F10040802020216010701010304030110010D0201030E020A0108060402021601070102010201021F0401011303100901030116010701020105030112010F0217010B080202021601070102010503011E0201030F01110101060303010403020101010203020303030C1601340801030117011003011A03020102021E01040801030117010A010503011F0201020F0211090103012902011001050308031806051203180109010102073A3001010D073A020101010501180101010A01010A0102050101150420013F0801241B05732B140110060404030103020703040D0C01112601010501022B01814D01040207010101040229010402210104020701010104020F01390104024325101056020603826C0211011A054B030B07120D130E120E0D01030F342301040143590729010105460A1F311E02050B2C041A3617093552015D2F1108361E0D020A2C1A2429030A24020B052B020329040106010203010580C04081160206022602060208010101010101011F0235010701010303010703040206040D0503010774010D01100D65010401020A01010206060101010101011002040505040111298A7780E5060403020C26010105010238070110170907010701070107010701070107010782260319090705020504560603015A0104052B015E11203010820099C040A0568D432E02810D03100A02142F101F025027090267024302020101010815100103010401171D340E323E06030101020B1C0A17191D072F1C011005010A0A05012917030108141703010332010103020205020101011803020B07030C060206020609070107012B010E06731DA02BA40C170431A02104816E026A26070C050501010A010D0105010101020102016C21808B0680DA12400236280A770101010301010101010101017E241A061A0B38021F0306020602060203230C011A01130102010F020E227B4535810B1D03312F200D1E05260A1E0224040801052A809E12240424042808340C0B010F01070102010B010F0107010203340C813709160A081806012A010945060201012C0102030102170A17091F411301020A160A1A4638060240010F040103011D2A1D031D2308011C1B360A160A130D126E4937330D330D24261C091780FA2A060210033B1D0A0108162A122E151B170C35390202010D2D20191A241D010201082303010C300E04150101012312011913023F0701010104010F010A072F260802020216010701020105030112010C051E0A0101020101260101190101012C35120414031E301402010180B82F2904243014013B2B0D01471B250780B92C74401F0802010208010201180F0101015E080227100101011C010A28070115010B2E1301124980C7211F0901251101311E70070102012615011906010201200E018147130F01010D01227C014F839A666F1180C48A4C610F84301106198F9B0582479AB91E86E28239071F114F111E123010041F15051381B02D80D34080804B0501420D400201011C97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A97665501470102020102020204010C010101070141010402080107011C010401050101030701815402190119011F0119011F0119011F0119011F0119010887341F060681053E80922D0A07100181411E122C81E41C80E41E020181EF0701040102010F0180C53B44070184B404011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501119144A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Grapheme_Link = x"894D017F017F017F017F017F017F017F016D0210017C016F017F0180C90180B40286D9021E01809D01828D0180E30165024602918B01A07A86012501809701808E016C0181350180F601A05E510186060129010E0139017902808B01740180B401620180800371017F0180FC017F0176017401810D0181030280A10153011201510181A501810402510181A902A041EC01"; +_T Dash = x"2D01855C0133018E41018405018809063D0127010F018186018C040102011F0204011C0181BE0113016F01A0CD900225010A0180A9018E6001813E01"; +_T Nl = x"96EE038A6F2302048E7E0119090E03A076AB0AA05A503581CC010801808605A0202A6F"; +_T IDS_Trinary_Operator = x"A02FF202"; +_T Terminal_Punctuation = x"21010A0101010B020301833E010801820101390148010E01010380B4012B0B010180EB02360601081F0181050284F40280AC0104068137028315088305017C034702809D03030127040202813A0281620480A2020A0201031D0380BB053E0283A401170209038CAF038132010D0104010A010102030281AC02A074FB02810D0380E305817E0256025F018097038093037F01100280F901A052260102023903010480A9010A0101010B02030141010201843A01300184860180C7018136028098064406590483B8052C0480BD0770047F038081020601100258056C01812A0275030C02816604030F690280F903820501010180FB0257020402819E032D018285024A02852B05A045F90280850141030A01822902812702A04E06019DE704"; +_T Nd = x"300A86260A80860A80C60A819C0A760A760A760A760A760A760A760A760A760A600A760A460A81160A460A87460A260A812C0A80800A80A60A060A80B60A560A80860A060AA089C60A82A60A260A80C60A160A560A81960AA053160A85860A88860A060A831C0A80800A3C0A80900A81160A81560A760A81760A660A06144C0A81A60A660A82960A560A80F60A460A81A60AA041D60A89260A560A80860A82160AA05F760A8AD43289400A81A60A81F60A80F70A83550A92960A"; +_T ID_Compat_Math_Start = x"A022020104011601A1B4A20119011F0119011F0119011F0119011F011901"; +_T Prepended_Concatenation_Mark = x"86000680D70131018180025001A107DA010F01"; +_T ASCII_Hex_Digit = x"300A07061A06"; +_T Mc = x"890301370102030804010232023A03060202020A012B013A0342013A030801010235023A010101060202020A0166020102030301030A0129033D043D023A0101050202010209021C010E023A03050301030A012A024B0306081202814A023F0180AB0204010601020219020A0302071502020602010A038678011E0180810107080102815A0402030402010680E0023A01010109010102080680910130010501010501023D011E01040202013C010203010103023008080280AB011501933602A077F302020158023210808E022F013002040202036E02020218012D0101016D010202050180ED02010201020101A064130101017F012D030402730118023B01300309020D015D030302010180AA031F023A0201040202020309010A025403070102010104010201016503080203016A0306010104020180ED03060402017103080201016D0101020601670101020401810503090180F7060102040102010101808E030804040154011D023E018197010E016A010701020180D50504020101815E020C01300208020101A041E8038E24376802A06173020606"; +_T Radical = x"A02E801A01590C80D6"; +_T Quotation_Mark = x"220104018083010F019F5C0819028E070181C9040D03A0CE210480BD0104015A02"; +_T Other_Default_Ignorable_Code_Point = x"834F018E0F0286530288AF0190FE01A0CE3B014F09AD000701011E60808080F08E10"; +_T Join_Control = x"A0200C02"; +_T Grapheme_Base = x"205F210D018252700802060407010101140180E00780A60126023202032E01010102010201091B0406110A0B01012E1510016508010602020104200201011E1D590B010E2B09070318040109010301070F01190501010B051F112A39370101010408040103070A021D0102010802020216010701010304030101020602020201010D020103041805010106040202160107010201020102040318040101070A020301010C0101090103011601070102010503040801010203010F02040C0701080201080202021601070102010503010201060202020F02010304120B0101060303010403020101010203020303030C0501010203030103030115150603010801030117011003010304130302010202040A070A010B01030117010A010503020201010218020102040A01030E0B01030129020101020503010301020403010A041A02020112031801090101020709020607070A02030C3001020B08080D25020101010501180101010A0102090102050101090A02042018021B01010101010E012412010501020531080106010D252D040106010202021902040310040D01020206010F01280101050102817901040207010101040229010402210104020701010104020F013901040243051D031A0656020602829D035907120D13030209120E0D01030F340201070801020B09030A060A060B050A065907050222010105460A1F04040203040201060701032A02050B2C041A060B03390202033801010901010208060D0A060A060E56300A040308011D090C0220040206380101020301010D300802050F033E052B020B0B010D0107040106010302010580C04081160206022602060208010101010101011F0235010F010E0206011302030109010B051807311002021B010D03213F808C04829A160B15871402200181580302052D01010501023807020F1709070107010701070107010701070107215E221A01590C80D61A3A061001560465052B015E0156093001A0726D033709815C142F04010A20025002060880CE02020101010815100103010401190205040A063808440A0C180D012608190B010C1E0630010204020202010D010B040701190129060202020B0301080101020A0220013301010302020502010101181102080B060206020609070107013C047501020104030A06A02BA40C170431A02104816E026A26070C05050101180105010101020102017D1081BD023607012010100A162301130104040501808704809D021F0306020602060203030701070D02020C011A01130102010F020E227B0503042D0358010D03012F2D80831D0331101B0424091E05260A1E0125040E2A809E020A06240424042808340B0C010F01070102010B010F0107010203340C813709160A081806012A010945060201012C01020301021701480809301301020521031B050140380414022F0F040103011D0A09070907402025060C0936031D021B051A07040C07504937330D33072A0C0A06260818080280D01F012A0301020210033B2808160B0916120404261C1417090101360F07041E010202010C310402020201040E19070A092405010912082301030B34090101080402011001140B12011C0302040601023F0701010104010F010B062F01030D0A08020108020202160107010201050301010101040202020203010C071C0A010102010126010101020F0101020301010301022738080203010115010101031E30010206010102010102010204080A80A62F010206040201021B24330802010102040B0A060D132B010101020802060A06141C1B030101020401091780B92F0901020164530C0802010208010201180105010206040103090A4608022A080401041B010A280602040809010602032E0D0102090D49070A80B6220E0A060901260E0101060A1D03201901070102014B07010201261501090A060601020125040201010101070A8136130204090F01240802031756010F320D839B666F01050B80C48A4C630D84301106198F9B0582479AB91E0C03030A86C68239071F010A0451010A061E07010A30070F0A0A01070115051381B03A80C65B654B05380B0D40041C97F80884D6290AA022E704010701020181230F011D0302010E0408818C89046B050D0309070A020102018F6080FA0681B4809C743C80F60A27023C05031602071E043D154203017A140C140C57091980875501470102020102020204010C010101070141010402080107011C010401050101030701815402812402823237043208010E010784741F060681053E80922D0A07020A040281401E122C040A050181D01C040A80D61E020B040181E00701040102010F0180C5020930440701040A04028311444C3D80C204011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402810E2C04640C0F020F010F01250A80AE381D0D2C040907020E06809A83D80411030D0377045F060C04010F0C0438080A0628081E020C04023E81540C0E020D030A0538070F020B060907809301668406A0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Uppercase = x"411A6517010721010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101030201010102010302040102010303020102010101010102010102010102010301010102030107010201020102010101010101010101010101010101020101010101010101010101010101010101020102010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010702010202010104010101010101010181210101010301080106010103010101020111010923010203030101010101010101010101010101010101010101010101050102010102023330010101010101010101010101010101010101010101010101010101010101010101090101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102268B49260101050182D256889301062B0203814001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010901010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101090808060A08080808060B01010101010101080848040C040C040C050B0481060104010303020302010305060101010101010402040A0205011A10130183321A8730303001010302010101010101040101020108030101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080101010401A0794D0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011301010101010101010101010101010101010101010101010101010180870101010101010101010101010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010A0101010102010101010101010104010101020101010301010101010101010101010101010101010101010501050101010101010101010101010101010401010102030105010101010101011801A0572B1A84C528808824809C0B010F0107010286EA33809D168B3A20A0558020A065A01A1A1A1A1A1A01010202010202020401081A1A1A020104020801071B0201040105010103071B1A1A1A1A1A1A1A1A1A1A1A1E1921192119211921192101913522880E1A061A061A"; +_T Zl = x"A0202801"; +_T Hex_Digit = x"300A07061A06A0FEA90A07061A06"; +_T Zp = x"A0202901"; +_T Pattern_White_Space = x"0905120164019F88021802"; +_T Diacritic = x"5E010101470106010401020281F7809F0108050611020401090280FD0580D1013711011B010101020101808608040280860204020303431B5B0B3A0B22027E08290A101C3D01100103041C014A0110016E0110016E0110012F033C011001070177016E0110016E0110016D0210017C016F010C0601016B010D054B021B01010101010402420301023E017001010228020405190701010A0282C10383B4021E0180940B0901815B0381240114080201300F020B68010F01260936023A010B02420240065219040106010203323F590C250B81BD0101030B030D030D030D028CF003813D0181FA0669045F01A07572010C0201011C0252020E2266036D020C0125018097011B12390424015F010C0124018095034104330164050903808002A04F3001830110810E0101012F012D02430182FC01849F06012A0109827D03040180A502823B0626011A05818F03460B310480C0012901480278023E014C010903680280B2025002100118070305590301020D025F0103017B0280FB027E0176027301810D028102020401809C0153011201510181A5018102010102510181A902170194EC0FA02CD90189C0053B078234028222115002A03FFE04010701029F012E02178220030306080802071E048E823E80C2078177013D0482FE0282E0076D030103"; +_T Lowercase = x"611A2F010A01040124180108010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101030201010102010302040102010303020102010101010102010102010102010301010102020203060102010201010101010101010101010101010101020101010101010101010101010101010101020201010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010702010202010104010101010101010145012407021E0560012B0101010301020412011B2301020303010101010101010101010101010101010101010101010105010102010202333001010101010101010101010101010101010101010101010101010101010101010101090101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010130298B472B010482F80688820901017580C0410101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010109010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010908060A08080808060A080808080E020808080808080501020601030301020804020208080A03010279010D01100D6D01030203011B010401040102020804040121100401834B1A87463001010302010101010101040101020108030101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020701010104010C2601010501A0791301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010113010101010101010101010101010101010101010101010101010103808501010101010101010101010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010A01010101020101010101010101010401010102010103010101010101010101010101010101010101010105010501010101010101010101010101010104010101020103010101010101010101010116030101010383352B010E0650A04F40070C0584291A84CD28808824809B0B010F0107010281C3010203012A01098505337D168B3A20A0558020A0659A1A1A0701121A1A1A0401010107010B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1C1C1901061A1901061A1901061A1901061A190106010187340A0114060681053E88B422"; +_T Ll = x"611A3A0129180108010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101010101010101010101010102010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010201010101030201010102010302040102010303020102010101010102010102010102010301010102020203060102010201010101010101010101010101010101020101010101010101010101010101010101020201010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010702010202010104010101010101010145011B80C10101010301030312011B2301020303010101010101010101010101010101010101010101010105010102010202333001010101010101010101010101010101010101010101010101010101010101010101090101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020101010101010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010130298B472B020382F8068882090101752C3F0D0122660101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010109010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010908060A08080808060A080808080E020808080808080501020601030301020804020208080A030102811201030203011B010401040102020804040135018AAB3001010302010101010101040101020106050101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101020701010104010C2601010501A0791301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010113010101010101010101010101010101010101010101010101010101808701010101010101010101010103010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101080101010102010101010101010101040101010201010301010101010101010101010101010101010101010501050101010101010101010101010101010401010102010301010101010101010101011A01030183352B05090750A04F40070C0584291A84CD28808824809B0B010F010701028703337D168B3A20A0558020A0659A1A1A0701121A1A1A0401010107010B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1C1C1901061A1901061A1901061A1901061A190106010187340A0114060689F722"; +_T Extender = x"80B701821802836E0181B901827601808901590182F0017F018943013801826301818E0144019389012B0567025D03A06F160185F60183C20116018089016C011502A0547B0188100285CB011B01040184C701812501740281F20384CF01A050A902849C020101A071580284B101835403"; +_T Lm = x"82B012040C0E0507010101808501050181DE0180E60180A402810D0204011F010901030180A00180A70184D4017F0182350186DA016B0182630181D00680AE3F0D01222582B1010D01100D8BDF0280F10180BF0181D5012B05050161025D03A06F160184E206810E0172011C027909500117016903030281D50116018089016C01150267040901A05406012D0287E006012A01098593012001A05DD00481FC03280282260D40020101A0400C0401070102A030313E80C90783AD01845F01"; +_T Mn = x"83007081130581092D0101010201020101480B30151001650702060202010423011E1B5B0B3A09090118040109010301052B033B092A180120370101010408040103070A021D013A010404080114021A010202390104020402020303011E0203010B0239010405010204011402160601013A0102010104080107020B021E013D010C0132010301370101030503010407020B021D013A0102010601050214021C0239020404080114021D014801070301015A0102070C08620102090B0749021B0101010101370E01050102050B0124090166040106010202021902040310040D01020206010F0182BF0383B2031D021E021E02400201070801020B09012D03010175022201760304020901060380DB0202013A010107010101010208060A0201300E01103104300101050101050128090C0220040202010338010102030101033A080202809803010D010704010601030280C64082D00D0401030C8BFE03808D016020822A046B02A075D401040A2002500281100103010401190205018097021A120D012608190B2E0330010204020227014306020202020C0108012F01330101030202050201012A02080180EE0102010401A04F300182E110101083CD0180E201809505868603010205042803040180A502823D044105813D024F04460B31047B01360F290102020A033104020207013D03240501083E010C0234090A0402015F030201010206010201809D0103081502390203012507030546060D01010101010E025508020301011701540601010402010280EE04060201021B025508020101026A01010102060101650101010204010581030901028100020101040180900402020401200A280602040801090602032E0D01028196070106010152160207010201027A060301010201070101480203010101815B020B02340505010101170194E501060FA02CC80C030389C0053B078418013F045101A04CB80292612E0217822003110802071E0480940387BB37043208010E011605010F8550070111020701020105640180A0078177013D0481FC0480FE0282E0076D07AC17B580F0"; +_T Sk = x"5E01010147010601040103018209040C0E05070101011175010E0285020197340101030B030D030D030D02909C02A07663170902670283D0010E02A0504611837B01010180A201A0F41705"; +_T Po = x"210301030201010101020A0203021B01440105010E02070182BE01080181D20629013601020102012C02140201020D0101034A0466012B0E80E903360F1F018105020A01808C01780179018186010C01816F015A010A0280A80F010170014A0504026F0680AB018264098305017C034702809D0301032506010481390280D802808007010680A0020A071C037C043B053E0240080B018342020808080902040203030B0101010A8C9A0401027001808F020403020102090102010102020A05010A02040101010D020381AC03390180BD01A0740202810D0363010A017306817C0456022803010131022F01610D10027C047E02100280F901A052240702011601140202040303010407030601010280950301030201010101020A0203021B0124010202819A03829C013001819E0182E70180C7011F01811009260170074207590483B8052C0480BD076D0201047E0430024F0404010D01010358066B01812A02010272050A020101680180FA1769031C0D4C0180820380FC01810803809B015C08530301055D0A80D7015F052A028285024A0D80AF018470058B7C02A03A7B0280850141050801822803812704814701A04CBC019DE7058B7301835E02"; +_T Deprecated = x"814901852901890301010188290288C50682B902ADDCD601"; +_T Other_ID_Continue = x"80B70182CF018FE10986680186310290ED01A0CE6901"; _U[] _tab = [ _U("Alphabetic", Alphabetic), _U("ASCII_Hex_Digit", ASCII_Hex_Digit), @@ -1736,11 +996,14 @@ _U("Grapheme_Extend", Grapheme_Extend), _U("Grapheme_Link", Grapheme_Link), _U("Hex_Digit", Hex_Digit), _U("Hyphen", Hyphen), +_U("ID_Compat_Math_Continue", ID_Compat_Math_Continue), +_U("ID_Compat_Math_Start", ID_Compat_Math_Start), _U("ID_Continue", ID_Continue), _U("Ideographic", Ideographic), _U("IDS_Binary_Operator", IDS_Binary_Operator), _U("ID_Start", ID_Start), _U("IDS_Trinary_Operator", IDS_Trinary_Operator), +_U("IDS_Unary_Operator", IDS_Unary_Operator), _U("Initial_Punctuation", Pi), _U("Join_Control", Join_Control), _U("Letter_Number", Nl), @@ -1758,6 +1021,7 @@ _U("Math_Symbol", Sm), _U("Mc", Mc), _U("Me", Me), _U("Mn", Mn), +_U("Modifier_Combining_Mark", Modifier_Combining_Mark), _U("Modifier_Letter", Lm), _U("Modifier_Symbol", Sk), _U("Nd", Nd), @@ -1824,333 +1088,344 @@ private alias _U = immutable(UnicodeProperty); @property static _U[] tab() pure { return _tab; } static immutable: private alias _T = ubyte[]; -_T CJK_Unified_Ideographs_Extension_G = [0xa3, 0x0, 0x0, 0x93, 0x50]; -_T Tai_Le = [0x99, 0x50, 0x30]; -_T Coptic = [0xa0, 0x2c, 0x80, 0x80, 0x80]; -_T Halfwidth_and_Fullwidth_Forms = [0xa0, 0xff, 0x0, 0x80, 0xf0]; -_T Cyrillic = [0x84, 0x0, 0x81, 0x0]; -_T CJK_Radicals_Supplement = [0xa0, 0x2e, 0x80, 0x80, 0x80]; -_T Thaana = [0x87, 0x80, 0x40]; -_T Specials = [0xa0, 0xff, 0xf0, 0x10]; -_T Hangul_Jamo_Extended_B = [0xa0, 0xd7, 0xb0, 0x50]; -_T Linear_B_Syllabary = [0xa1, 0x0, 0x0, 0x80, 0x80]; -_T Ogham = [0x96, 0x80, 0x20]; -_T Arabic_Extended_C = [0xa1, 0xe, 0xc0, 0x40]; -_T Nabataean = [0xa1, 0x8, 0x80, 0x30]; -_T Makasar = [0xa1, 0x1e, 0xe0, 0x20]; -_T CJK_Unified_Ideographs_Extension_B = [0xa2, 0x0, 0x0, 0xa0, 0xa6, 0xe0]; -_T Siddham = [0xa1, 0x15, 0x80, 0x80, 0x80]; -_T Kana_Extended_A = [0xa1, 0xb1, 0x0, 0x30]; -_T Supplemental_Arrows_C = [0xa1, 0xf8, 0x0, 0x81, 0x0]; -_T Kaktovik_Numerals = [0xa1, 0xd2, 0xc0, 0x20]; -_T Combining_Diacritical_Marks = [0x83, 0x0, 0x70]; -_T Vertical_Forms = [0xa0, 0xfe, 0x10, 0x10]; -_T Old_Sogdian = [0xa1, 0xf, 0x0, 0x30]; -_T Old_South_Arabian = [0xa1, 0xa, 0x60, 0x20]; -_T Cyrillic_Extended_C = [0x9c, 0x80, 0x10]; -_T Myanmar = [0x90, 0x0, 0x80, 0xa0]; -_T Bassa_Vah = [0xa1, 0x6a, 0xd0, 0x30]; -_T Deseret = [0xa1, 0x4, 0x0, 0x50]; -_T Phaistos_Disc = [0xa1, 0x1, 0xd0, 0x30]; -_T Common_Indic_Number_Forms = [0xa0, 0xa8, 0x30, 0x10]; -_T Unified_Canadian_Aboriginal_Syllabics_Extended = [0x98, 0xb0, 0x50]; -_T Kaithi = [0xa1, 0x10, 0x80, 0x50]; -_T Medefaidrin = [0xa1, 0x6e, 0x40, 0x60]; -_T Arabic_Supplement = [0x87, 0x50, 0x30]; -_T Yi_Radicals = [0xa0, 0xa4, 0x90, 0x40]; -_T Tai_Tham = [0x9a, 0x20, 0x80, 0x90]; -_T Hiragana = [0xa0, 0x30, 0x40, 0x60]; -_T Hangul_Compatibility_Jamo = [0xa0, 0x31, 0x30, 0x60]; -_T Linear_B_Ideograms = [0xa1, 0x0, 0x80, 0x80, 0x80]; -_T Syriac_Supplement = [0x88, 0x60, 0x10]; -_T Ahom = [0xa1, 0x17, 0x0, 0x50]; -_T Shorthand_Format_Controls = [0xa1, 0xbc, 0xa0, 0x10]; -_T Phonetic_Extensions = [0x9d, 0x0, 0x80, 0x80]; -_T Nag_Mundari = [0xa1, 0xe4, 0xd0, 0x30]; -_T Devanagari = [0x89, 0x0, 0x80, 0x80]; -_T Tibetan = [0x8f, 0x0, 0x81, 0x0]; -_T Hanifi_Rohingya = [0xa1, 0xd, 0x0, 0x40]; -_T Old_Uyghur = [0xa1, 0xf, 0x70, 0x40]; -_T Enclosed_Ideographic_Supplement = [0xa1, 0xf2, 0x0, 0x81, 0x0]; -_T Brahmi = [0xa1, 0x10, 0x0, 0x80, 0x80]; -_T Number_Forms = [0xa0, 0x21, 0x50, 0x40]; -_T Mayan_Numerals = [0xa1, 0xd2, 0xe0, 0x20]; -_T Ornamental_Dingbats = [0xa1, 0xf6, 0x50, 0x30]; -_T Symbols_for_Legacy_Computing = [0xa1, 0xfb, 0x0, 0x81, 0x0]; -_T Unified_Canadian_Aboriginal_Syllabics_Extended_A = [0xa1, 0x1a, 0xb0, 0x10]; -_T Greek_and_Coptic = [0x83, 0x70, 0x80, 0x90]; -_T Counting_Rod_Numerals = [0xa1, 0xd3, 0x60, 0x20]; -_T Ethiopic_Extended_B = [0xa1, 0xe7, 0xe0, 0x20]; -_T Supplemental_Mathematical_Operators = [0xa0, 0x2a, 0x0, 0x81, 0x0]; -_T Osage = [0xa1, 0x4, 0xb0, 0x50]; -_T Nushu = [0xa1, 0xb1, 0x70, 0x81, 0x90]; -_T Chess_Symbols = [0xa1, 0xfa, 0x0, 0x70]; -_T Cuneiform = [0xa1, 0x20, 0x0, 0x84, 0x0]; -_T Takri = [0xa1, 0x16, 0x80, 0x50]; -_T Enclosed_Alphanumeric_Supplement = [0xa1, 0xf1, 0x0, 0x81, 0x0]; -_T Sutton_SignWriting = [0xa1, 0xd8, 0x0, 0x82, 0xb0]; -_T Miscellaneous_Technical = [0xa0, 0x23, 0x0, 0x81, 0x0]; -_T Old_Italic = [0xa1, 0x3, 0x0, 0x30]; -_T Toto = [0xa1, 0xe2, 0x90, 0x30]; -_T Hanunoo = [0x97, 0x20, 0x20]; -_T Lisu = [0xa0, 0xa4, 0xd0, 0x30]; -_T Limbu = [0x99, 0x0, 0x50]; -_T Saurashtra = [0xa0, 0xa8, 0x80, 0x60]; -_T Elbasan = [0xa1, 0x5, 0x0, 0x30]; -_T Variation_Selectors_Supplement = [0xae, 0x1, 0x0, 0x80, 0xf0]; -_T Psalter_Pahlavi = [0xa1, 0xb, 0x80, 0x30]; -_T Palmyrene = [0xa1, 0x8, 0x60, 0x20]; -_T Tagbanwa = [0x97, 0x60, 0x20]; -_T CJK_Unified_Ideographs_Extension_F = [0xa2, 0xce, 0xb0, 0x9d, 0x40]; -_T Combining_Diacritical_Marks_for_Symbols = [0xa0, 0x20, 0xd0, 0x30]; -_T Dingbats = [0xa0, 0x27, 0x0, 0x80, 0xc0]; -_T Nyiakeng_Puachue_Hmong = [0xa1, 0xe1, 0x0, 0x50]; -_T Combining_Half_Marks = [0xa0, 0xfe, 0x20, 0x10]; -_T Supplementary_Private_Use_Area_A = [0xaf, 0x0, 0x0, 0xa1, 0x0, 0x0]; -_T Playing_Cards = [0xa1, 0xf0, 0xa0, 0x60]; -_T Malayalam = [0x8d, 0x0, 0x80, 0x80]; -_T Indic_Siyaq_Numbers = [0xa1, 0xec, 0x70, 0x50]; -_T Variation_Selectors = [0xa0, 0xfe, 0x0, 0x10]; -_T Thai = [0x8e, 0x0, 0x80, 0x80]; -_T Supplemental_Arrows_B = [0xa0, 0x29, 0x0, 0x80, 0x80]; -_T Zanabazar_Square = [0xa1, 0x1a, 0x0, 0x50]; -_T Ideographic_Symbols_and_Punctuation = [0xa1, 0x6f, 0xe0, 0x20]; -_T Symbols_and_Pictographs_Extended_A = [0xa1, 0xfa, 0x70, 0x80, 0x90]; -_T High_Private_Use_Surrogates = [0xa0, 0xdb, 0x80, 0x80, 0x80]; -_T Modifier_Tone_Letters = [0xa0, 0xa7, 0x0, 0x20]; -_T Samaritan = [0x88, 0x0, 0x40]; -_T Egyptian_Hieroglyph_Format_Controls = [0xa1, 0x34, 0x30, 0x30]; -_T Latin_Extended_Additional = [0x9e, 0x0, 0x81, 0x0]; -_T Coptic_Epact_Numbers = [0xa1, 0x2, 0xe0, 0x20]; -_T Small_Form_Variants = [0xa0, 0xfe, 0x50, 0x20]; -_T Balinese = [0x9b, 0x0, 0x80, 0x80]; -_T Mandaic = [0x88, 0x40, 0x20]; -_T Block_Elements = [0xa0, 0x25, 0x80, 0x20]; -_T Supplemental_Symbols_and_Pictographs = [0xa1, 0xf9, 0x0, 0x81, 0x0]; -_T Miscellaneous_Mathematical_Symbols_A = [0xa0, 0x27, 0xc0, 0x30]; -_T Tifinagh = [0xa0, 0x2d, 0x30, 0x50]; -_T Arabic_Extended_A = [0x88, 0xa0, 0x60]; -_T Cyrillic_Extended_A = [0xa0, 0x2d, 0xe0, 0x20]; -_T Syriac = [0x87, 0x0, 0x50]; -_T Latin_Extended_E = [0xa0, 0xab, 0x30, 0x40]; -_T Caucasian_Albanian = [0xa1, 0x5, 0x30, 0x40]; -_T Soyombo = [0xa1, 0x1a, 0x50, 0x60]; -_T Syloti_Nagri = [0xa0, 0xa8, 0x0, 0x30]; -_T NKo = [0x87, 0xc0, 0x40]; -_T Tai_Viet = [0xa0, 0xaa, 0x80, 0x60]; -_T Low_Surrogates = [0xa0, 0xdc, 0x0, 0x84, 0x0]; -_T Elymaic = [0xa1, 0xf, 0xe0, 0x20]; -_T Hatran = [0xa1, 0x8, 0xe0, 0x20]; -_T Sundanese_Supplement = [0x9c, 0xc0, 0x10]; -_T CJK_Unified_Ideographs_Extension_H = [0xa3, 0x13, 0x50, 0x90, 0x60]; -_T Chorasmian = [0xa1, 0xf, 0xb0, 0x30]; -_T Kana_Extended_B = [0xa1, 0xaf, 0xf0, 0x10]; -_T Glagolitic = [0xa0, 0x2c, 0x0, 0x60]; -_T Devanagari_Extended_A = [0xa1, 0x1b, 0x0, 0x60]; -_T Hangul_Syllables = [0xa0, 0xac, 0x0, 0xa0, 0x2b, 0xb0]; -_T Osmanya = [0xa1, 0x4, 0x80, 0x30]; -_T Enclosed_CJK_Letters_and_Months = [0xa0, 0x32, 0x0, 0x81, 0x0]; -_T Meetei_Mayek_Extensions = [0xa0, 0xaa, 0xe0, 0x20]; -_T Hangul_Jamo = [0x91, 0x0, 0x81, 0x0]; -_T Mro = [0xa1, 0x6a, 0x40, 0x30]; -_T Currency_Symbols = [0xa0, 0x20, 0xa0, 0x30]; -_T Bopomofo_Extended = [0xa0, 0x31, 0xa0, 0x20]; -_T Chakma = [0xa1, 0x11, 0x0, 0x50]; -_T Pau_Cin_Hau = [0xa1, 0x1a, 0xc0, 0x40]; -_T Latin_Extended_G = [0xa1, 0xdf, 0x0, 0x81, 0x0]; -_T CJK_Unified_Ideographs = [0xa0, 0x4e, 0x0, 0xa0, 0x52, 0x0]; -_T Znamenny_Musical_Notation = [0xa1, 0xcf, 0x0, 0x80, 0xd0]; -_T New_Tai_Lue = [0x99, 0x80, 0x60]; -_T Modi = [0xa1, 0x16, 0x0, 0x60]; -_T Bamum_Supplement = [0xa1, 0x68, 0x0, 0x82, 0x40]; -_T Cypro_Minoan = [0xa1, 0x2f, 0x90, 0x70]; -_T Basic_Latin = [0x0, 0x80, 0x80]; -_T Multani = [0xa1, 0x12, 0x80, 0x30]; -_T Alchemical_Symbols = [0xa1, 0xf7, 0x0, 0x80, 0x80]; -_T Bopomofo = [0xa0, 0x31, 0x0, 0x30]; -_T Adlam = [0xa1, 0xe9, 0x0, 0x60]; -_T Khitan_Small_Script = [0xa1, 0x8b, 0x0, 0x82, 0x0]; -_T Old_Turkic = [0xa1, 0xc, 0x0, 0x50]; -_T Lao = [0x8e, 0x80, 0x80, 0x80]; -_T Cherokee_Supplement = [0xa0, 0xab, 0x70, 0x50]; -_T CJK_Compatibility_Ideographs = [0xa0, 0xf9, 0x0, 0x82, 0x0]; -_T Latin_Extended_F = [0xa1, 0x7, 0x80, 0x40]; -_T Lisu_Supplement = [0xa1, 0x1f, 0xb0, 0x10]; -_T Latin_Extended_A = [0x81, 0x0, 0x80, 0x80]; -_T Spacing_Modifier_Letters = [0x82, 0xb0, 0x50]; -_T Gothic = [0xa1, 0x3, 0x30, 0x20]; -_T Sinhala_Archaic_Numbers = [0xa1, 0x11, 0xe0, 0x20]; -_T Egyptian_Hieroglyphs = [0xa1, 0x30, 0x0, 0x84, 0x30]; -_T Sinhala = [0x8d, 0x80, 0x80, 0x80]; -_T Rejang = [0xa0, 0xa9, 0x30, 0x30]; -_T Glagolitic_Supplement = [0xa1, 0xe0, 0x0, 0x30]; -_T Lepcha = [0x9c, 0x0, 0x50]; -_T Optical_Character_Recognition = [0xa0, 0x24, 0x40, 0x20]; -_T Greek_Extended = [0x9f, 0x0, 0x81, 0x0]; -_T Miscellaneous_Symbols_and_Pictographs = [0xa1, 0xf3, 0x0, 0x83, 0x0]; -_T Emoticons = [0xa1, 0xf6, 0x0, 0x50]; -_T Tirhuta = [0xa1, 0x14, 0x80, 0x60]; -_T Marchen = [0xa1, 0x1c, 0x70, 0x50]; -_T Geometric_Shapes_Extended = [0xa1, 0xf7, 0x80, 0x80, 0x80]; -_T Arabic_Presentation_Forms_A = [0xa0, 0xfb, 0x50, 0x82, 0xb0]; -_T Cyrillic_Extended_D = [0xa1, 0xe0, 0x30, 0x60]; -_T Phoenician = [0xa1, 0x9, 0x0, 0x20]; -_T Wancho = [0xa1, 0xe2, 0xc0, 0x40]; -_T Meroitic_Hieroglyphs = [0xa1, 0x9, 0x80, 0x20]; -_T Alphabetic_Presentation_Forms = [0xa0, 0xfb, 0x0, 0x50]; -_T Linear_A = [0xa1, 0x6, 0x0, 0x81, 0x80]; -_T Mahjong_Tiles = [0xa1, 0xf0, 0x0, 0x30]; -_T Gurmukhi = [0x8a, 0x0, 0x80, 0x80]; -_T Byzantine_Musical_Symbols = [0xa1, 0xd0, 0x0, 0x81, 0x0]; -_T Transport_and_Map_Symbols = [0xa1, 0xf6, 0x80, 0x80, 0x80]; -_T Unified_Canadian_Aboriginal_Syllabics = [0x94, 0x0, 0x82, 0x80]; -_T Khojki = [0xa1, 0x12, 0x0, 0x50]; -_T Khudawadi = [0xa1, 0x12, 0xb0, 0x50]; -_T Newa = [0xa1, 0x14, 0x0, 0x80, 0x80]; -_T Dogra = [0xa1, 0x18, 0x0, 0x50]; -_T Ancient_Greek_Musical_Notation = [0xa1, 0xd2, 0x0, 0x50]; -_T Cypriot_Syllabary = [0xa1, 0x8, 0x0, 0x40]; -_T Latin_1_Supplement = [0x80, 0x80, 0x80, 0x80]; -_T Hangul_Jamo_Extended_A = [0xa0, 0xa9, 0x60, 0x20]; -_T Imperial_Aramaic = [0xa1, 0x8, 0x40, 0x20]; -_T Tamil_Supplement = [0xa1, 0x1f, 0xc0, 0x40]; -_T Oriya = [0x8b, 0x0, 0x80, 0x80]; -_T Tai_Xuan_Jing_Symbols = [0xa1, 0xd3, 0x0, 0x60]; -_T Enclosed_Alphanumerics = [0xa0, 0x24, 0x60, 0x80, 0xa0]; -_T Meetei_Mayek = [0xa0, 0xab, 0xc0, 0x40]; -_T Tagalog = [0x97, 0x0, 0x20]; -_T Sundanese = [0x9b, 0x80, 0x40]; -_T CJK_Compatibility_Ideographs_Supplement = [0xa2, 0xf8, 0x0, 0x82, 0x20]; -_T Cuneiform_Numbers_and_Punctuation = [0xa1, 0x24, 0x0, 0x80, 0x80]; -_T Ethiopic_Extended = [0xa0, 0x2d, 0x80, 0x60]; -_T Domino_Tiles = [0xa1, 0xf0, 0x30, 0x70]; -_T Old_Permic = [0xa1, 0x3, 0x50, 0x30]; -_T Supplementary_Private_Use_Area_B = [0xb0, 0x0, 0x0]; -_T Shavian = [0xa1, 0x4, 0x50, 0x30]; -_T Anatolian_Hieroglyphs = [0xa1, 0x44, 0x0, 0x82, 0x80]; -_T Lycian = [0xa1, 0x2, 0x80, 0x20]; -_T Inscriptional_Pahlavi = [0xa1, 0xb, 0x60, 0x20]; -_T Ancient_Greek_Numbers = [0xa1, 0x1, 0x40, 0x50]; -_T Miao = [0xa1, 0x6f, 0x0, 0x80, 0xa0]; -_T CJK_Unified_Ideographs_Extension_E = [0xa2, 0xb8, 0x20, 0x96, 0x90]; -_T Pahawh_Hmong = [0xa1, 0x6b, 0x0, 0x80, 0x90]; -_T Tangut = [0xa1, 0x70, 0x0, 0x98, 0x0]; -_T Bengali = [0x89, 0x80, 0x80, 0x80]; -_T CJK_Compatibility_Forms = [0xa0, 0xfe, 0x30, 0x20]; -_T Vithkuqi = [0xa1, 0x5, 0x70, 0x50]; -_T Supplemental_Punctuation = [0xa0, 0x2e, 0x0, 0x80, 0x80]; -_T Armenian = [0x85, 0x30, 0x60]; -_T Arabic_Presentation_Forms_B = [0xa0, 0xfe, 0x70, 0x80, 0x90]; -_T Tangut_Components = [0xa1, 0x88, 0x0, 0x83, 0x0]; -_T Sogdian = [0xa1, 0xf, 0x30, 0x40]; -_T Ottoman_Siyaq_Numbers = [0xa1, 0xed, 0x0, 0x50]; -_T Buhid = [0x97, 0x40, 0x20]; -_T Myanmar_Extended_A = [0xa0, 0xaa, 0x60, 0x20]; -_T Manichaean = [0xa1, 0xa, 0xc0, 0x40]; -_T Miscellaneous_Mathematical_Symbols_B = [0xa0, 0x29, 0x80, 0x80, 0x80]; -_T Latin_Extended_D = [0xa0, 0xa7, 0x20, 0x80, 0xe0]; -_T Avestan = [0xa1, 0xb, 0x0, 0x40]; -_T Small_Kana_Extension = [0xa1, 0xb1, 0x30, 0x40]; -_T Ethiopic_Supplement = [0x93, 0x80, 0x20]; -_T Arabic = [0x86, 0x0, 0x81, 0x0]; -_T Kayah_Li = [0xa0, 0xa9, 0x0, 0x30]; -_T Javanese = [0xa0, 0xa9, 0x80, 0x60]; -_T Lydian = [0xa1, 0x9, 0x20, 0x20]; -_T Aegean_Numbers = [0xa1, 0x1, 0x0, 0x40]; -_T Braille_Patterns = [0xa0, 0x28, 0x0, 0x81, 0x0]; -_T Buginese = [0x9a, 0x0, 0x20]; -_T CJK_Symbols_and_Punctuation = [0xa0, 0x30, 0x0, 0x40]; -_T Batak = [0x9b, 0xc0, 0x40]; -_T Combining_Diacritical_Marks_Supplement = [0x9d, 0xc0, 0x40]; -_T High_Surrogates = [0xa0, 0xd8, 0x0, 0x83, 0x80]; -_T Vedic_Extensions = [0x9c, 0xd0, 0x30]; -_T Nandinagari = [0xa1, 0x19, 0xa0, 0x60]; -_T Kanbun = [0xa0, 0x31, 0x90, 0x10]; -_T Arrows = [0xa0, 0x21, 0x90, 0x70]; -_T Devanagari_Extended = [0xa0, 0xa8, 0xe0, 0x20]; -_T Inscriptional_Parthian = [0xa1, 0xb, 0x40, 0x20]; -_T Cham = [0xa0, 0xaa, 0x0, 0x60]; -_T Box_Drawing = [0xa0, 0x25, 0x0, 0x80, 0x80]; -_T Ugaritic = [0xa1, 0x3, 0x80, 0x20]; -_T Georgian = [0x90, 0xa0, 0x60]; -_T Tangut_Supplement = [0xa1, 0x8d, 0x0, 0x80, 0x80]; -_T Kana_Supplement = [0xa1, 0xb0, 0x0, 0x81, 0x0]; -_T Sharada = [0xa1, 0x11, 0x80, 0x60]; -_T Tamil = [0x8b, 0x80, 0x80, 0x80]; -_T Old_Persian = [0xa1, 0x3, 0xa0, 0x40]; -_T Geometric_Shapes = [0xa0, 0x25, 0xa0, 0x60]; -_T Cherokee = [0x93, 0xa0, 0x60]; -_T Superscripts_and_Subscripts = [0xa0, 0x20, 0x70, 0x30]; -_T CJK_Strokes = [0xa0, 0x31, 0xc0, 0x30]; -_T Letterlike_Symbols = [0xa0, 0x21, 0x0, 0x50]; -_T CJK_Unified_Ideographs_Extension_D = [0xa2, 0xb7, 0x40, 0x80, 0xe0]; -_T Yijing_Hexagram_Symbols = [0xa0, 0x4d, 0xc0, 0x40]; -_T Georgian_Extended = [0x9c, 0x90, 0x30]; -_T Khmer_Symbols = [0x99, 0xe0, 0x20]; -_T Sora_Sompeng = [0xa1, 0x10, 0xd0, 0x30]; -_T Private_Use_Area = [0xa0, 0xe0, 0x0, 0x99, 0x0]; -_T Kharoshthi = [0xa1, 0xa, 0x0, 0x60]; -_T Dives_Akuru = [0xa1, 0x19, 0x0, 0x60]; -_T Ancient_Symbols = [0xa1, 0x1, 0x90, 0x40]; -_T Katakana = [0xa0, 0x30, 0xa0, 0x60]; -_T Ideographic_Description_Characters = [0xa0, 0x2f, 0xf0, 0x10]; -_T Cyrillic_Extended_B = [0xa0, 0xa6, 0x40, 0x60]; -_T Meroitic_Cursive = [0xa1, 0x9, 0xa0, 0x60]; -_T Mende_Kikakui = [0xa1, 0xe8, 0x0, 0x80, 0xe0]; -_T Rumi_Numeral_Symbols = [0xa1, 0xe, 0x60, 0x20]; -_T Combining_Diacritical_Marks_Extended = [0x9a, 0xb0, 0x50]; -_T Telugu = [0x8c, 0x0, 0x80, 0x80]; -_T Cyrillic_Supplement = [0x85, 0x0, 0x30]; -_T Ethiopic = [0x92, 0x0, 0x81, 0x80]; -_T Old_North_Arabian = [0xa1, 0xa, 0x80, 0x20]; -_T IPA_Extensions = [0x82, 0x50, 0x60]; -_T Vai = [0xa0, 0xa5, 0x0, 0x81, 0x40]; -_T Latin_Extended_C = [0xa0, 0x2c, 0x60, 0x20]; -_T Bamum = [0xa0, 0xa6, 0xa0, 0x60]; -_T Control_Pictures = [0xa0, 0x24, 0x0, 0x40]; -_T Mongolian = [0x98, 0x0, 0x80, 0xb0]; -_T Warang_Citi = [0xa1, 0x18, 0xa0, 0x60]; -_T Katakana_Phonetic_Extensions = [0xa0, 0x31, 0xf0, 0x10]; -_T Mathematical_Operators = [0xa0, 0x22, 0x0, 0x81, 0x0]; -_T Early_Dynastic_Cuneiform = [0xa1, 0x24, 0x80, 0x80, 0xd0]; -_T Ol_Chiki = [0x9c, 0x50, 0x30]; -_T Mahajani = [0xa1, 0x11, 0x50, 0x30]; -_T Myanmar_Extended_B = [0xa0, 0xa9, 0xe0, 0x20]; -_T Khmer = [0x97, 0x80, 0x80, 0x80]; -_T Grantha = [0xa1, 0x13, 0x0, 0x80, 0x80]; -_T Kannada = [0x8c, 0x80, 0x80, 0x80]; -_T Phags_pa = [0xa0, 0xa8, 0x40, 0x40]; -_T Mathematical_Alphanumeric_Symbols = [0xa1, 0xd4, 0x0, 0x84, 0x0]; -_T Kawi = [0xa1, 0x1f, 0x0, 0x60]; -_T Musical_Symbols = [0xa1, 0xd1, 0x0, 0x81, 0x0]; -_T Yezidi = [0xa1, 0xe, 0x80, 0x40]; -_T Kangxi_Radicals = [0xa0, 0x2f, 0x0, 0x80, 0xe0]; -_T Phonetic_Extensions_Supplement = [0x9d, 0x80, 0x40]; -_T CJK_Unified_Ideographs_Extension_A = [0xa0, 0x34, 0x0, 0x99, 0xc0]; -_T Mongolian_Supplement = [0xa1, 0x16, 0x60, 0x20]; -_T Bhaiksuki = [0xa1, 0x1c, 0x0, 0x70]; -_T Hebrew = [0x85, 0x90, 0x70]; -_T Gujarati = [0x8a, 0x80, 0x80, 0x80]; -_T Tangsa = [0xa1, 0x6a, 0x70, 0x60]; -_T General_Punctuation = [0xa0, 0x20, 0x0, 0x70]; -_T CJK_Compatibility = [0xa0, 0x33, 0x0, 0x81, 0x0]; -_T Yi_Syllables = [0xa0, 0xa0, 0x0, 0x84, 0x90]; -_T Carian = [0xa1, 0x2, 0xa0, 0x40]; -_T Miscellaneous_Symbols = [0xa0, 0x26, 0x0, 0x81, 0x0]; -_T CJK_Unified_Ideographs_Extension_C = [0xa2, 0xa7, 0x0, 0x90, 0x40]; -_T Miscellaneous_Symbols_and_Arrows = [0xa0, 0x2b, 0x0, 0x81, 0x0]; -_T Old_Hungarian = [0xa1, 0xc, 0x80, 0x80, 0x80]; -_T Latin_Extended_B = [0x81, 0x80, 0x80, 0xd0]; -_T Runic = [0x96, 0xa0, 0x60]; -_T Tags = [0xae, 0x0, 0x0, 0x80, 0x80]; -_T Supplemental_Arrows_A = [0xa0, 0x27, 0xf0, 0x10]; -_T Masaram_Gondi = [0xa1, 0x1d, 0x0, 0x60]; -_T Arabic_Extended_B = [0x88, 0x70, 0x30]; -_T Ethiopic_Extended_A = [0xa0, 0xab, 0x0, 0x30]; -_T Duployan = [0xa1, 0xbc, 0x0, 0x80, 0xa0]; -_T Georgian_Supplement = [0xa0, 0x2d, 0x0, 0x30]; -_T Gunjala_Gondi = [0xa1, 0x1d, 0x60, 0x50]; -_T Arabic_Mathematical_Alphabetic_Symbols = [0xa1, 0xee, 0x0, 0x81, 0x0]; +_T CJK_Unified_Ideographs_Extension_G = x"A300009350"; +_T Tai_Le = x"995030"; +_T Coptic = x"A02C808080"; +_T Halfwidth_and_Fullwidth_Forms = x"A0FF0080F0"; +_T Cyrillic = x"84008100"; +_T CJK_Radicals_Supplement = x"A02E808080"; +_T Thaana = x"878040"; +_T Specials = x"A0FFF010"; +_T Hangul_Jamo_Extended_B = x"A0D7B050"; +_T Linear_B_Syllabary = x"A100008080"; +_T Ogham = x"968020"; +_T Arabic_Extended_C = x"A10EC040"; +_T Nabataean = x"A1088030"; +_T Makasar = x"A11EE020"; +_T CJK_Unified_Ideographs_Extension_B = x"A20000A0A6E0"; +_T Siddham = x"A115808080"; +_T Kana_Extended_A = x"A1B10030"; +_T Supplemental_Arrows_C = x"A1F8008100"; +_T Kaktovik_Numerals = x"A1D2C020"; +_T Combining_Diacritical_Marks = x"830070"; +_T Vertical_Forms = x"A0FE1010"; +_T Old_Sogdian = x"A10F0030"; +_T Old_South_Arabian = x"A10A6020"; +_T Cyrillic_Extended_C = x"9C8010"; +_T Myanmar = x"900080A0"; +_T Bassa_Vah = x"A16AD030"; +_T Deseret = x"A1040050"; +_T Phaistos_Disc = x"A101D030"; +_T Common_Indic_Number_Forms = x"A0A83010"; +_T Unified_Canadian_Aboriginal_Syllabics_Extended = x"98B050"; +_T Kaithi = x"A1108050"; +_T Medefaidrin = x"A16E4060"; +_T Arabic_Supplement = x"875030"; +_T Yi_Radicals = x"A0A49040"; +_T Tai_Tham = x"9A208090"; +_T Hiragana = x"A0304060"; +_T Hangul_Compatibility_Jamo = x"A0313060"; +_T Linear_B_Ideograms = x"A100808080"; +_T Syriac_Supplement = x"886010"; +_T Ahom = x"A1170050"; +_T Shorthand_Format_Controls = x"A1BCA010"; +_T Phonetic_Extensions = x"9D008080"; +_T Nag_Mundari = x"A1E4D030"; +_T Devanagari = x"89008080"; +_T Tibetan = x"8F008100"; +_T Hanifi_Rohingya = x"A10D0040"; +_T Old_Uyghur = x"A10F7040"; +_T Enclosed_Ideographic_Supplement = x"A1F2008100"; +_T Brahmi = x"A110008080"; +_T Number_Forms = x"A0215040"; +_T Mayan_Numerals = x"A1D2E020"; +_T Ornamental_Dingbats = x"A1F65030"; +_T Todhri = x"A105C040"; +_T Unified_Canadian_Aboriginal_Syllabics_Extended_A = x"A11AB010"; +_T Greek_and_Coptic = x"83708090"; +_T Symbols_for_Legacy_Computing = x"A1FB008100"; +_T CJK_Unified_Ideographs_Extension_I = x"A2EBF08270"; +_T Counting_Rod_Numerals = x"A1D36020"; +_T Ethiopic_Extended_B = x"A1E7E020"; +_T Supplemental_Mathematical_Operators = x"A02A008100"; +_T Osage = x"A104B050"; +_T Nushu = x"A1B1708190"; +_T Chess_Symbols = x"A1FA0070"; +_T Cuneiform = x"A120008400"; +_T Takri = x"A1168050"; +_T Enclosed_Alphanumeric_Supplement = x"A1F1008100"; +_T Sutton_SignWriting = x"A1D80082B0"; +_T Miscellaneous_Technical = x"A023008100"; +_T Old_Italic = x"A1030030"; +_T Toto = x"A1E29030"; +_T Hanunoo = x"972020"; +_T Lisu = x"A0A4D030"; +_T Limbu = x"990050"; +_T Saurashtra = x"A0A88060"; +_T Elbasan = x"A1050030"; +_T Variation_Selectors_Supplement = x"AE010080F0"; +_T Psalter_Pahlavi = x"A10B8030"; +_T Palmyrene = x"A1086020"; +_T Tagbanwa = x"976020"; +_T Tulu_Tigalari = x"A113808080"; +_T Combining_Diacritical_Marks_for_Symbols = x"A020D030"; +_T Dingbats = x"A0270080C0"; +_T Nyiakeng_Puachue_Hmong = x"A1E10050"; +_T Combining_Half_Marks = x"A0FE2010"; +_T CJK_Unified_Ideographs_Extension_F = x"A2CEB09D40"; +_T Playing_Cards = x"A1F0A060"; +_T Malayalam = x"8D008080"; +_T Indic_Siyaq_Numbers = x"A1EC7050"; +_T Variation_Selectors = x"A0FE0010"; +_T Thai = x"8E008080"; +_T Supplemental_Arrows_B = x"A029008080"; +_T Zanabazar_Square = x"A11A0050"; +_T Ideographic_Symbols_and_Punctuation = x"A16FE020"; +_T Symbols_and_Pictographs_Extended_A = x"A1FA708090"; +_T High_Private_Use_Surrogates = x"A0DB808080"; +_T Supplementary_Private_Use_Area_A = x"AF0000A10000"; +_T Modifier_Tone_Letters = x"A0A70020"; +_T Samaritan = x"880040"; +_T Egyptian_Hieroglyph_Format_Controls = x"A1343030"; +_T Latin_Extended_Additional = x"9E008100"; +_T Coptic_Epact_Numbers = x"A102E020"; +_T Small_Form_Variants = x"A0FE5020"; +_T Balinese = x"9B008080"; +_T Mandaic = x"884020"; +_T Block_Elements = x"A0258020"; +_T Supplemental_Symbols_and_Pictographs = x"A1F9008100"; +_T Miscellaneous_Mathematical_Symbols_A = x"A027C030"; +_T Tifinagh = x"A02D3050"; +_T Arabic_Extended_A = x"88A060"; +_T Cyrillic_Extended_A = x"A02DE020"; +_T Syriac = x"870050"; +_T Latin_Extended_E = x"A0AB3040"; +_T Caucasian_Albanian = x"A1053040"; +_T Soyombo = x"A11A5060"; +_T Syloti_Nagri = x"A0A80030"; +_T NKo = x"87C040"; +_T Tai_Viet = x"A0AA8060"; +_T Low_Surrogates = x"A0DC008400"; +_T Elymaic = x"A10FE020"; +_T Hatran = x"A108E020"; +_T Sundanese_Supplement = x"9CC010"; +_T CJK_Unified_Ideographs_Extension_H = x"A313509060"; +_T Chorasmian = x"A10FB030"; +_T Kana_Extended_B = x"A1AFF010"; +_T Glagolitic = x"A02C0060"; +_T Devanagari_Extended_A = x"A11B0060"; +_T Hangul_Syllables = x"A0AC00A02BB0"; +_T Osmanya = x"A1048030"; +_T Enclosed_CJK_Letters_and_Months = x"A032008100"; +_T Meetei_Mayek_Extensions = x"A0AAE020"; +_T Hangul_Jamo = x"91008100"; +_T Mro = x"A16A4030"; +_T Currency_Symbols = x"A020A030"; +_T Bopomofo_Extended = x"A031A020"; +_T Chakma = x"A1110050"; +_T Pau_Cin_Hau = x"A11AC040"; +_T Latin_Extended_G = x"A1DF008100"; +_T CJK_Unified_Ideographs = x"A04E00A05200"; +_T Znamenny_Musical_Notation = x"A1CF0080D0"; +_T New_Tai_Lue = x"998060"; +_T Modi = x"A1160060"; +_T Bamum_Supplement = x"A168008240"; +_T Cypro_Minoan = x"A12F9070"; +_T Basic_Latin = x"008080"; +_T Multani = x"A1128030"; +_T Sunuwar = x"A11BC040"; +_T Alchemical_Symbols = x"A1F7008080"; +_T Bopomofo = x"A0310030"; +_T Adlam = x"A1E90060"; +_T Khitan_Small_Script = x"A18B008200"; +_T Old_Turkic = x"A10C0050"; +_T Lao = x"8E808080"; +_T Cherokee_Supplement = x"A0AB7050"; +_T CJK_Compatibility_Ideographs = x"A0F9008200"; +_T Kirat_Rai = x"A16D4040"; +_T Latin_Extended_F = x"A1078040"; +_T Myanmar_Extended_C = x"A116D030"; +_T Lisu_Supplement = x"A11FB010"; +_T Latin_Extended_A = x"81008080"; +_T Spacing_Modifier_Letters = x"82B050"; +_T Gothic = x"A1033020"; +_T Sinhala_Archaic_Numbers = x"A111E020"; +_T Egyptian_Hieroglyphs = x"A130008430"; +_T Sinhala = x"8D808080"; +_T Rejang = x"A0A93030"; +_T Glagolitic_Supplement = x"A1E00030"; +_T Lepcha = x"9C0050"; +_T Optical_Character_Recognition = x"A0244020"; +_T Greek_Extended = x"9F008100"; +_T Miscellaneous_Symbols_and_Pictographs = x"A1F3008300"; +_T Emoticons = x"A1F60050"; +_T Ol_Onal = x"A1E5D030"; +_T Tirhuta = x"A1148060"; +_T Marchen = x"A11C7050"; +_T Geometric_Shapes_Extended = x"A1F7808080"; +_T Arabic_Presentation_Forms_A = x"A0FB5082B0"; +_T Cyrillic_Extended_D = x"A1E03060"; +_T Phoenician = x"A1090020"; +_T Wancho = x"A1E2C040"; +_T Meroitic_Hieroglyphs = x"A1098020"; +_T Alphabetic_Presentation_Forms = x"A0FB0050"; +_T Linear_A = x"A106008180"; +_T Mahjong_Tiles = x"A1F00030"; +_T Gurmukhi = x"8A008080"; +_T Byzantine_Musical_Symbols = x"A1D0008100"; +_T Transport_and_Map_Symbols = x"A1F6808080"; +_T Unified_Canadian_Aboriginal_Syllabics = x"94008280"; +_T Khojki = x"A1120050"; +_T Khudawadi = x"A112B050"; +_T Newa = x"A114008080"; +_T Dogra = x"A1180050"; +_T Ancient_Greek_Musical_Notation = x"A1D20050"; +_T Cypriot_Syllabary = x"A1080040"; +_T Latin_1_Supplement = x"80808080"; +_T Hangul_Jamo_Extended_A = x"A0A96020"; +_T Imperial_Aramaic = x"A1084020"; +_T Tamil_Supplement = x"A11FC040"; +_T Oriya = x"8B008080"; +_T Tai_Xuan_Jing_Symbols = x"A1D30060"; +_T Enclosed_Alphanumerics = x"A0246080A0"; +_T Meetei_Mayek = x"A0ABC040"; +_T Tagalog = x"970020"; +_T Sundanese = x"9B8040"; +_T CJK_Compatibility_Ideographs_Supplement = x"A2F8008220"; +_T Cuneiform_Numbers_and_Punctuation = x"A124008080"; +_T Ethiopic_Extended = x"A02D8060"; +_T Domino_Tiles = x"A1F03070"; +_T Old_Permic = x"A1035030"; +_T Supplementary_Private_Use_Area_B = x"B00000"; +_T Shavian = x"A1045030"; +_T Anatolian_Hieroglyphs = x"A144008280"; +_T Lycian = x"A1028020"; +_T Inscriptional_Pahlavi = x"A10B6020"; +_T Ancient_Greek_Numbers = x"A1014050"; +_T Miao = x"A16F0080A0"; +_T CJK_Unified_Ideographs_Extension_E = x"A2B8209690"; +_T Pahawh_Hmong = x"A16B008090"; +_T Tangut = x"A170009800"; +_T Bengali = x"89808080"; +_T CJK_Compatibility_Forms = x"A0FE3020"; +_T Vithkuqi = x"A1057050"; +_T Supplemental_Punctuation = x"A02E008080"; +_T Armenian = x"853060"; +_T Arabic_Presentation_Forms_B = x"A0FE708090"; +_T Tangut_Components = x"A188008300"; +_T Sogdian = x"A10F3040"; +_T Ottoman_Siyaq_Numbers = x"A1ED0050"; +_T Buhid = x"974020"; +_T Myanmar_Extended_A = x"A0AA6020"; +_T Manichaean = x"A10AC040"; +_T Garay = x"A10D4050"; +_T Miscellaneous_Mathematical_Symbols_B = x"A029808080"; +_T Latin_Extended_D = x"A0A72080E0"; +_T Avestan = x"A10B0040"; +_T Small_Kana_Extension = x"A1B13040"; +_T Ethiopic_Supplement = x"938020"; +_T Arabic = x"86008100"; +_T Kayah_Li = x"A0A90030"; +_T Javanese = x"A0A98060"; +_T Gurung_Khema = x"A1610040"; +_T Lydian = x"A1092020"; +_T Aegean_Numbers = x"A1010040"; +_T Symbols_for_Legacy_Computing_Supplement = x"A1CC0082C0"; +_T Braille_Patterns = x"A028008100"; +_T Buginese = x"9A0020"; +_T CJK_Symbols_and_Punctuation = x"A0300040"; +_T Batak = x"9BC040"; +_T Combining_Diacritical_Marks_Supplement = x"9DC040"; +_T High_Surrogates = x"A0D8008380"; +_T Vedic_Extensions = x"9CD030"; +_T Nandinagari = x"A119A060"; +_T Kanbun = x"A0319010"; +_T Arrows = x"A0219070"; +_T Devanagari_Extended = x"A0A8E020"; +_T Inscriptional_Parthian = x"A10B4020"; +_T Cham = x"A0AA0060"; +_T Box_Drawing = x"A025008080"; +_T Ugaritic = x"A1038020"; +_T Georgian = x"90A060"; +_T Tangut_Supplement = x"A18D008080"; +_T Kana_Supplement = x"A1B0008100"; +_T Sharada = x"A1118060"; +_T Tamil = x"8B808080"; +_T Old_Persian = x"A103A040"; +_T Geometric_Shapes = x"A025A060"; +_T Cherokee = x"93A060"; +_T Superscripts_and_Subscripts = x"A0207030"; +_T CJK_Strokes = x"A031C030"; +_T Letterlike_Symbols = x"A0210050"; +_T CJK_Unified_Ideographs_Extension_D = x"A2B74080E0"; +_T Egyptian_Hieroglyphs_Extended_A = x"A134608FA0"; +_T Yijing_Hexagram_Symbols = x"A04DC040"; +_T Georgian_Extended = x"9C9030"; +_T Khmer_Symbols = x"99E020"; +_T Sora_Sompeng = x"A110D030"; +_T Private_Use_Area = x"A0E0009900"; +_T Kharoshthi = x"A10A0060"; +_T Dives_Akuru = x"A1190060"; +_T Ancient_Symbols = x"A1019040"; +_T Katakana = x"A030A060"; +_T Ideographic_Description_Characters = x"A02FF010"; +_T Cyrillic_Extended_B = x"A0A64060"; +_T Meroitic_Cursive = x"A109A060"; +_T Mende_Kikakui = x"A1E80080E0"; +_T Rumi_Numeral_Symbols = x"A10E6020"; +_T Combining_Diacritical_Marks_Extended = x"9AB050"; +_T Telugu = x"8C008080"; +_T Cyrillic_Supplement = x"850030"; +_T Ethiopic = x"92008180"; +_T Old_North_Arabian = x"A10A8020"; +_T IPA_Extensions = x"825060"; +_T Vai = x"A0A5008140"; +_T Latin_Extended_C = x"A02C6020"; +_T Bamum = x"A0A6A060"; +_T Control_Pictures = x"A0240040"; +_T Mongolian = x"980080B0"; +_T Warang_Citi = x"A118A060"; +_T Katakana_Phonetic_Extensions = x"A031F010"; +_T Mathematical_Operators = x"A022008100"; +_T Early_Dynastic_Cuneiform = x"A1248080D0"; +_T Ol_Chiki = x"9C5030"; +_T Mahajani = x"A1115030"; +_T Myanmar_Extended_B = x"A0A9E020"; +_T Khmer = x"97808080"; +_T Grantha = x"A113008080"; +_T Kannada = x"8C808080"; +_T Phags_pa = x"A0A84040"; +_T Mathematical_Alphanumeric_Symbols = x"A1D4008400"; +_T Kawi = x"A11F0060"; +_T Musical_Symbols = x"A1D1008100"; +_T Yezidi = x"A10E8040"; +_T Kangxi_Radicals = x"A02F0080E0"; +_T Phonetic_Extensions_Supplement = x"9D8040"; +_T CJK_Unified_Ideographs_Extension_A = x"A0340099C0"; +_T Mongolian_Supplement = x"A1166020"; +_T Bhaiksuki = x"A11C0070"; +_T Hebrew = x"859070"; +_T Gujarati = x"8A808080"; +_T Tangsa = x"A16A7060"; +_T General_Punctuation = x"A0200070"; +_T CJK_Compatibility = x"A033008100"; +_T Yi_Syllables = x"A0A0008490"; +_T Carian = x"A102A040"; +_T Miscellaneous_Symbols = x"A026008100"; +_T CJK_Unified_Ideographs_Extension_C = x"A2A7009040"; +_T Miscellaneous_Symbols_and_Arrows = x"A02B008100"; +_T Old_Hungarian = x"A10C808080"; +_T Latin_Extended_B = x"818080D0"; +_T Runic = x"96A060"; +_T Tags = x"AE00008080"; +_T Supplemental_Arrows_A = x"A027F010"; +_T Masaram_Gondi = x"A11D0060"; +_T Arabic_Extended_B = x"887030"; +_T Ethiopic_Extended_A = x"A0AB0030"; +_T Duployan = x"A1BC0080A0"; +_T Georgian_Supplement = x"A02D0030"; +_T Gunjala_Gondi = x"A11D6050"; +_T Arabic_Mathematical_Alphabetic_Symbols = x"A1EE008100"; _U[] _tab = [ _U("Adlam", Adlam), _U("Aegean Numbers", Aegean_Numbers), @@ -2213,6 +1488,7 @@ _U("CJK Unified Ideographs Extension E", CJK_Unified_Ideographs_Extension_E), _U("CJK Unified Ideographs Extension F", CJK_Unified_Ideographs_Extension_F), _U("CJK Unified Ideographs Extension G", CJK_Unified_Ideographs_Extension_G), _U("CJK Unified Ideographs Extension H", CJK_Unified_Ideographs_Extension_H), +_U("CJK Unified Ideographs Extension I", CJK_Unified_Ideographs_Extension_I), _U("Combining Diacritical Marks", Combining_Diacritical_Marks), _U("Combining Diacritical Marks Extended", Combining_Diacritical_Marks_Extended), _U("Combining Diacritical Marks for Symbols", Combining_Diacritical_Marks_for_Symbols), @@ -2246,6 +1522,7 @@ _U("Duployan", Duployan), _U("Early Dynastic Cuneiform", Early_Dynastic_Cuneiform), _U("Egyptian Hieroglyph Format Controls", Egyptian_Hieroglyph_Format_Controls), _U("Egyptian Hieroglyphs", Egyptian_Hieroglyphs), +_U("Egyptian Hieroglyphs Extended-A", Egyptian_Hieroglyphs_Extended_A), _U("Elbasan", Elbasan), _U("Elymaic", Elymaic), _U("Emoticons", Emoticons), @@ -2258,6 +1535,7 @@ _U("Ethiopic Extended", Ethiopic_Extended), _U("Ethiopic Extended-A", Ethiopic_Extended_A), _U("Ethiopic Extended-B", Ethiopic_Extended_B), _U("Ethiopic Supplement", Ethiopic_Supplement), +_U("Garay", Garay), _U("General Punctuation", General_Punctuation), _U("Geometric Shapes", Geometric_Shapes), _U("Geometric Shapes Extended", Geometric_Shapes_Extended), @@ -2273,6 +1551,7 @@ _U("Greek Extended", Greek_Extended), _U("Gujarati", Gujarati), _U("Gunjala Gondi", Gunjala_Gondi), _U("Gurmukhi", Gurmukhi), +_U("Gurung Khema", Gurung_Khema), _U("Halfwidth and Fullwidth Forms", Halfwidth_and_Fullwidth_Forms), _U("Hangul Compatibility Jamo", Hangul_Compatibility_Jamo), _U("Hangul Jamo", Hangul_Jamo), @@ -2312,6 +1591,7 @@ _U("Khmer", Khmer), _U("Khmer Symbols", Khmer_Symbols), _U("Khojki", Khojki), _U("Khudawadi", Khudawadi), +_U("Kirat Rai", Kirat_Rai), _U("Lao", Lao), _U("Latin-1 Supplement", Latin_1_Supplement), _U("Latin Extended-A", Latin_Extended_A), @@ -2367,6 +1647,7 @@ _U("Musical Symbols", Musical_Symbols), _U("Myanmar", Myanmar), _U("Myanmar Extended-A", Myanmar_Extended_A), _U("Myanmar Extended-B", Myanmar_Extended_B), +_U("Myanmar Extended-C", Myanmar_Extended_C), _U("Nabataean", Nabataean), _U("Nag Mundari", Nag_Mundari), _U("Nandinagari", Nandinagari), @@ -2387,6 +1668,7 @@ _U("Old Sogdian", Old_Sogdian), _U("Old South Arabian", Old_South_Arabian), _U("Old Turkic", Old_Turkic), _U("Old Uyghur", Old_Uyghur), +_U("Ol Onal", Ol_Onal), _U("Optical Character Recognition", Optical_Character_Recognition), _U("Oriya", Oriya), _U("Ornamental Dingbats", Ornamental_Dingbats), @@ -2424,6 +1706,7 @@ _U("Spacing Modifier Letters", Spacing_Modifier_Letters), _U("Specials", Specials), _U("Sundanese", Sundanese), _U("Sundanese Supplement", Sundanese_Supplement), +_U("Sunuwar", Sunuwar), _U("Superscripts and Subscripts", Superscripts_and_Subscripts), _U("Supplemental Arrows-A", Supplemental_Arrows_A), _U("Supplemental Arrows-B", Supplemental_Arrows_B), @@ -2437,6 +1720,7 @@ _U("Sutton SignWriting", Sutton_SignWriting), _U("Syloti Nagri", Syloti_Nagri), _U("Symbols and Pictographs Extended-A", Symbols_and_Pictographs_Extended_A), _U("Symbols for Legacy Computing", Symbols_for_Legacy_Computing), +_U("Symbols for Legacy Computing Supplement", Symbols_for_Legacy_Computing_Supplement), _U("Syriac", Syriac), _U("Syriac Supplement", Syriac_Supplement), _U("Tagalog", Tagalog), @@ -2459,8 +1743,10 @@ _U("Thai", Thai), _U("Tibetan", Tibetan), _U("Tifinagh", Tifinagh), _U("Tirhuta", Tirhuta), +_U("Todhri", Todhri), _U("Toto", Toto), _U("Transport and Map Symbols", Transport_and_Map_Symbols), +_U("Tulu-Tigalari", Tulu_Tigalari), _U("Ugaritic", Ugaritic), _U("Unified Canadian Aboriginal Syllabics", Unified_Canadian_Aboriginal_Syllabics), _U("Unified Canadian Aboriginal Syllabics Extended", Unified_Canadian_Aboriginal_Syllabics_Extended), @@ -2488,169 +1774,176 @@ private alias _U = immutable(UnicodeProperty); @property static _U[] tab() pure { return _tab; } static immutable: private alias _T = ubyte[]; -_T Old_Hungarian = [0xa1, 0xc, 0x80, 0x33, 0xd, 0x33, 0x7, 0x6]; -_T Coptic = [0x83, 0xe2, 0xe, 0xa0, 0x28, 0x90, 0x74, 0x5, 0x7]; -_T Ol_Chiki = [0x9c, 0x50, 0x30]; -_T Cyrillic = [0x84, 0x0, 0x80, 0x85, 0x2, 0x80, 0xa9, 0x97, 0x50, 0x9, 0x80, 0xa2, 0x1, 0x4c, 0x1, 0x90, 0x67, 0x20, 0xa0, 0x78, 0x40, 0x60, 0xa0, 0x57, 0x8e, 0x2, 0xa0, 0xe2, 0x0, 0x3e, 0x21, 0x1]; -_T Thaana = [0x87, 0x80, 0x32]; -_T Inscriptional_Parthian = [0xa1, 0xb, 0x40, 0x16, 0x2, 0x8]; -_T Nabataean = [0xa1, 0x8, 0x80, 0x1f, 0x8, 0x9]; -_T Ogham = [0x96, 0x80, 0x1d]; -_T Meroitic_Hieroglyphs = [0xa1, 0x9, 0x80, 0x20]; -_T Makasar = [0xa1, 0x1e, 0xe0, 0x19]; -_T Siddham = [0xa1, 0x15, 0x80, 0x36, 0x2, 0x26]; -_T Old_Persian = [0xa1, 0x3, 0xa0, 0x24, 0x4, 0xe]; -_T Imperial_Aramaic = [0xa1, 0x8, 0x40, 0x16, 0x1, 0x9]; -_T Myanmar = [0x90, 0x0, 0x80, 0xa0, 0xa0, 0x99, 0x40, 0x1f, 0x61, 0x20]; -_T Deseret = [0xa1, 0x4, 0x0, 0x50]; -_T Kaithi = [0xa1, 0x10, 0x80, 0x43, 0xa, 0x1]; -_T Medefaidrin = [0xa1, 0x6e, 0x40, 0x5b]; -_T Kayah_Li = [0xa0, 0xa9, 0x0, 0x2e, 0x1, 0x1]; -_T Hiragana = [0xa0, 0x30, 0x41, 0x56, 0x6, 0x3, 0xa1, 0x7f, 0x61, 0x81, 0x1f, 0x12, 0x1, 0x1d, 0x3, 0xa0, 0x40, 0xad, 0x1]; -_T Ahom = [0xa1, 0x17, 0x0, 0x1b, 0x2, 0xf, 0x4, 0x17]; -_T Devanagari = [0x89, 0x0, 0x51, 0x4, 0xf, 0x2, 0x1a, 0xa0, 0x9f, 0x60, 0x20, 0xa0, 0x72, 0x0, 0xa]; -_T Tibetan = [0x8f, 0x0, 0x48, 0x1, 0x24, 0x4, 0x27, 0x1, 0x24, 0x1, 0xf, 0x1, 0x7, 0x4, 0x2]; -_T Nko = [0x87, 0xc0, 0x3b, 0x2, 0x3]; -_T Brahmi = [0xa1, 0x10, 0x0, 0x4e, 0x4, 0x24, 0x9, 0x1]; -_T Osage = [0xa1, 0x4, 0xb0, 0x24, 0x4, 0x24]; -_T Nushu = [0xa1, 0x6f, 0xe1, 0x1, 0xa0, 0x41, 0x8e, 0x81, 0x8c]; -_T Cuneiform = [0xa1, 0x20, 0x0, 0x83, 0x9a, 0x66, 0x6f, 0x1, 0x5, 0xb, 0x80, 0xc4]; -_T Takri = [0xa1, 0x16, 0x80, 0x3a, 0x6, 0xa]; -_T Toto = [0xa1, 0xe2, 0x90, 0x1f]; -_T Latin = [0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xf, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xc1, 0x27, 0x5, 0x9a, 0x1b, 0x26, 0x6, 0x31, 0x5, 0x4, 0x5, 0xd, 0x1, 0x46, 0x41, 0x81, 0x0, 0x81, 0x71, 0x1, 0xd, 0x1, 0x10, 0xd, 0x80, 0x8d, 0x2, 0x6, 0x1, 0x1b, 0x1, 0x11, 0x29, 0x8a, 0xd7, 0x20, 0xa0, 0x7a, 0xa2, 0x66, 0x3, 0x40, 0x5, 0x2, 0x1, 0x1, 0x1, 0x5, 0x18, 0xe, 0x83, 0x30, 0x2b, 0x1, 0x9, 0x1, 0x4, 0xa0, 0x4f, 0x96, 0x7, 0x84, 0x1a, 0x1a, 0x6, 0x1a, 0x88, 0x25, 0x6, 0x1, 0x2a, 0x1, 0x9, 0xa0, 0xd7, 0x45, 0x1f, 0x6, 0x6]; -_T Hanunoo = [0x97, 0x20, 0x15]; -_T Limbu = [0x99, 0x0, 0x1f, 0x1, 0xc, 0x4, 0xc, 0x4, 0x1, 0x3, 0xc]; -_T Saurashtra = [0xa0, 0xa8, 0x80, 0x46, 0x8, 0xc]; -_T Lisu = [0xa0, 0xa4, 0xd0, 0x30, 0xa0, 0x7a, 0xb0, 0x1]; -_T Egyptian_Hieroglyphs = [0xa1, 0x30, 0x0, 0x84, 0x56]; -_T Elbasan = [0xa1, 0x5, 0x0, 0x28]; -_T Palmyrene = [0xa1, 0x8, 0x60, 0x20]; -_T Tagbanwa = [0x97, 0x60, 0xd, 0x1, 0x3, 0x1, 0x2]; -_T Old_Italic = [0xa1, 0x3, 0x0, 0x24, 0x9, 0x3]; -_T Caucasian_Albanian = [0xa1, 0x5, 0x30, 0x34, 0xb, 0x1]; -_T Malayalam = [0x8d, 0x0, 0xd, 0x1, 0x3, 0x1, 0x33, 0x1, 0x3, 0x1, 0x6, 0x4, 0x10, 0x2, 0x1a]; -_T Inherited = [0x83, 0x0, 0x70, 0x81, 0x15, 0x2, 0x81, 0xc4, 0xb, 0x1a, 0x1, 0x82, 0xe0, 0x4, 0x91, 0x5b, 0x1f, 0x82, 0x1, 0x3, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x80, 0xc6, 0x40, 0x82, 0xc, 0x2, 0x80, 0xc2, 0x21, 0x8f, 0x39, 0x4, 0x6b, 0x2, 0xa0, 0xcd, 0x65, 0x10, 0x10, 0xe, 0x83, 0xcf, 0x1, 0x80, 0xe2, 0x1, 0x90, 0x5a, 0x1, 0xa0, 0xbb, 0xc4, 0x2e, 0x2, 0x17, 0x82, 0x20, 0x3, 0x11, 0x8, 0x2, 0x7, 0x1e, 0x4, 0xac, 0x2f, 0x52, 0x80, 0xf0]; -_T Sora_Sompeng = [0xa1, 0x10, 0xd0, 0x19, 0x7, 0xa]; -_T Linear_B = [0xa1, 0x0, 0x0, 0xc, 0x1, 0x1a, 0x1, 0x13, 0x1, 0x2, 0x1, 0xf, 0x2, 0xe, 0x22, 0x7b]; -_T Nyiakeng_Puachue_Hmong = [0xa1, 0xe1, 0x0, 0x2d, 0x3, 0xe, 0x2, 0xa, 0x4, 0x2]; -_T Meroitic_Cursive = [0xa1, 0x9, 0xa0, 0x18, 0x4, 0x14, 0x2, 0x2e]; -_T Thai = [0x8e, 0x1, 0x3a, 0x5, 0x1c]; -_T Mende_Kikakui = [0xa1, 0xe8, 0x0, 0x80, 0xc5, 0x2, 0x10]; -_T Old_Sogdian = [0xa1, 0xf, 0x0, 0x28]; -_T Old_Turkic = [0xa1, 0xc, 0x0, 0x49]; -_T Samaritan = [0x88, 0x0, 0x2e, 0x2, 0xf]; -_T Old_South_Arabian = [0xa1, 0xa, 0x60, 0x20]; -_T Hanifi_Rohingya = [0xa1, 0xd, 0x0, 0x28, 0x8, 0xa]; -_T Balinese = [0x9b, 0x0, 0x4d, 0x3, 0x2f]; -_T Mandaic = [0x88, 0x40, 0x1c, 0x2, 0x1]; -_T SignWriting = [0xa1, 0xd8, 0x0, 0x82, 0x8c, 0xf, 0x5, 0x1, 0xf]; -_T Tifinagh = [0xa0, 0x2d, 0x30, 0x38, 0x7, 0x2, 0xe, 0x1]; -_T Tai_Viet = [0xa0, 0xaa, 0x80, 0x43, 0x18, 0x5]; -_T Syriac = [0x87, 0x0, 0xe, 0x1, 0x3c, 0x2, 0x3, 0x81, 0x10, 0xb]; -_T Soyombo = [0xa1, 0x1a, 0x50, 0x53]; -_T Elymaic = [0xa1, 0xf, 0xe0, 0x17]; -_T Hatran = [0xa1, 0x8, 0xe0, 0x13, 0x1, 0x2, 0x5, 0x5]; -_T Chorasmian = [0xa1, 0xf, 0xb0, 0x1c]; -_T Glagolitic = [0xa0, 0x2c, 0x0, 0x60, 0xa1, 0xb3, 0xa0, 0x7, 0x1, 0x11, 0x2, 0x7, 0x1, 0x2, 0x1, 0x5]; -_T Osmanya = [0xa1, 0x4, 0x80, 0x1e, 0x2, 0xa]; -_T Linear_A = [0xa1, 0x6, 0x0, 0x81, 0x37, 0x9, 0x16, 0xa, 0x8]; -_T Mro = [0xa1, 0x6a, 0x40, 0x1f, 0x1, 0xa, 0x4, 0x2]; -_T Chakma = [0xa1, 0x11, 0x0, 0x35, 0x1, 0x12]; -_T Modi = [0xa1, 0x16, 0x0, 0x45, 0xb, 0xa]; -_T Bassa_Vah = [0xa1, 0x6a, 0xd0, 0x1e, 0x2, 0x6]; -_T Han = [0xa0, 0x2e, 0x80, 0x1a, 0x1, 0x59, 0xc, 0x80, 0xd6, 0x2f, 0x1, 0x1, 0x1, 0x19, 0x9, 0xe, 0x4, 0x83, 0xc4, 0x99, 0xc0, 0x40, 0xa0, 0x52, 0x0, 0xa0, 0x59, 0x0, 0x81, 0x6e, 0x2, 0x6a, 0xa0, 0x75, 0x8, 0x2, 0xc, 0x2, 0xa0, 0x90, 0xe, 0xa0, 0xa6, 0xe0, 0x20, 0x90, 0x3a, 0x6, 0x80, 0xde, 0x2, 0x96, 0x82, 0xe, 0x9d, 0x31, 0x8c, 0x1f, 0x82, 0x1e, 0x85, 0xe2, 0x93, 0x4b, 0x5, 0x90, 0x60]; -_T Multani = [0xa1, 0x12, 0x80, 0x7, 0x1, 0x1, 0x1, 0x4, 0x1, 0xf, 0x1, 0xb]; -_T Bopomofo = [0x82, 0xea, 0x2, 0xa0, 0x2e, 0x19, 0x2b, 0x70, 0x20]; -_T Adlam = [0xa1, 0xe9, 0x0, 0x4c, 0x4, 0xa, 0x4, 0x2]; -_T Khitan_Small_Script = [0xa1, 0x6f, 0xe4, 0x1, 0x9b, 0x1b, 0x81, 0xd6]; -_T Lao = [0x8e, 0x81, 0x2, 0x1, 0x1, 0x1, 0x5, 0x1, 0x18, 0x1, 0x1, 0x1, 0x17, 0x2, 0x5, 0x1, 0x1, 0x1, 0x7, 0x1, 0xa, 0x2, 0x4]; -_T Psalter_Pahlavi = [0xa1, 0xb, 0x80, 0x12, 0x7, 0x4, 0xc, 0x7]; -_T Anatolian_Hieroglyphs = [0xa1, 0x44, 0x0, 0x82, 0x47]; -_T Canadian_Aboriginal = [0x94, 0x0, 0x82, 0x80, 0x82, 0x30, 0x46, 0xa1, 0x1, 0xba, 0x10]; -_T Common = [0x0, 0x41, 0x1a, 0x6, 0x1a, 0x2f, 0x1, 0xf, 0x1, 0x5, 0x17, 0x1, 0x1f, 0x1, 0x81, 0xc1, 0x27, 0x5, 0x5, 0x2, 0x14, 0x74, 0x1, 0x9, 0x1, 0x6, 0x1, 0x1, 0x1, 0x82, 0x7d, 0x1, 0x6, 0x1, 0xe, 0x1, 0x3, 0x1, 0x20, 0x1, 0x80, 0x9c, 0x1, 0x82, 0x4, 0x1, 0x80, 0x81, 0x2, 0x84, 0xd9, 0x1, 0x81, 0x95, 0x4, 0x81, 0x22, 0x1, 0x85, 0xef, 0x3, 0x47, 0x2, 0x80, 0xcb, 0x2, 0x1, 0x1, 0x84, 0xcd, 0x1, 0xd, 0x1, 0x7, 0x4, 0x1, 0x6, 0x1, 0x3, 0x2, 0x1, 0x83, 0x5, 0xc, 0x2, 0x57, 0x1, 0xb, 0x3, 0xb, 0x1, 0xf, 0x11, 0x21, 0x3f, 0x26, 0x1, 0x3, 0x2, 0x6, 0x1, 0x1b, 0x1, 0x11, 0x29, 0x3, 0x4, 0x82, 0x97, 0x19, 0xb, 0x15, 0x83, 0xa0, 0x81, 0x0, 0x82, 0x74, 0x2, 0x20, 0x1, 0x69, 0x82, 0x0, 0x5e, 0x81, 0x92, 0xc, 0x4, 0x5, 0x1, 0x1, 0x1, 0x19, 0xf, 0x8, 0x4, 0x4, 0x5b, 0x2, 0x3, 0x1, 0x5a, 0x2, 0x80, 0x93, 0x10, 0x20, 0x24, 0x3c, 0x40, 0x1f, 0x51, 0x2f, 0x1, 0x58, 0x80, 0xa8, 0x99, 0xc0, 0x40, 0xa0, 0x59, 0x0, 0x22, 0x66, 0x3, 0x80, 0xa5, 0xa, 0x80, 0xf4, 0x1, 0x80, 0xa0, 0x1, 0x81, 0x8b, 0x1, 0xe, 0x2, 0xa0, 0x51, 0xd2, 0x2, 0x80, 0xd0, 0xa, 0x16, 0x23, 0x1, 0x13, 0x1, 0x4, 0x80, 0x93, 0x1, 0x1, 0x20, 0x1a, 0x6, 0x1a, 0xb, 0xa, 0x1, 0x2d, 0x2, 0x40, 0x7, 0x1, 0x7, 0xa, 0x5, 0x81, 0x2, 0x3, 0x4, 0x2d, 0x3, 0x9, 0x50, 0xd, 0x33, 0x2d, 0x80, 0xe4, 0x1b, 0xa0, 0xb9, 0xa4, 0x4, 0x92, 0xac, 0x74, 0x3c, 0x80, 0xf6, 0xa, 0x27, 0x2, 0x3e, 0x3, 0x11, 0x8, 0x2, 0x7, 0x1e, 0x4, 0x3d, 0x80, 0xd5, 0x14, 0xc, 0x14, 0xc, 0x57, 0x9, 0x19, 0x80, 0x87, 0x55, 0x1, 0x47, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x4, 0x1, 0xc, 0x1, 0x1, 0x1, 0x7, 0x1, 0x41, 0x1, 0x4, 0x2, 0x8, 0x1, 0x7, 0x1, 0x1c, 0x1, 0x4, 0x1, 0x5, 0x1, 0x1, 0x3, 0x7, 0x1, 0x81, 0x54, 0x2, 0x81, 0x24, 0x2, 0x32, 0x94, 0x71, 0x44, 0x4c, 0x3d, 0x82, 0xc2, 0x2c, 0x4, 0x64, 0xc, 0xf, 0x2, 0xf, 0x1, 0xf, 0x1, 0x25, 0xa, 0x80, 0xae, 0x38, 0x1a, 0x1, 0x2, 0xd, 0x2c, 0x4, 0x9, 0x7, 0x2, 0xe, 0x6, 0x80, 0x9a, 0x83, 0xd8, 0x4, 0x11, 0x3, 0xd, 0x3, 0x77, 0x4, 0x5f, 0x6, 0xc, 0x4, 0x1, 0xf, 0xc, 0x4, 0x38, 0x8, 0xa, 0x6, 0x28, 0x8, 0x1e, 0x2, 0x2, 0x4e, 0x81, 0x54, 0xc, 0xe, 0x2, 0xd, 0x3, 0x9, 0x7, 0x2e, 0x1, 0x7, 0x8, 0xe, 0x4, 0x9, 0x7, 0x9, 0x7, 0x80, 0x93, 0x1, 0x37, 0x25, 0xa, 0xac, 0x4, 0x7, 0x1, 0x1e, 0x60]; -_T Gothic = [0xa1, 0x3, 0x30, 0x1b]; -_T Yi = [0xa0, 0xa0, 0x0, 0x84, 0x8d, 0x3, 0x37]; -_T Sinhala = [0x8d, 0x81, 0x3, 0x1, 0x12, 0x3, 0x18, 0x1, 0x9, 0x1, 0x1, 0x2, 0x7, 0x3, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x8, 0x6, 0xa, 0x2, 0x3, 0xa1, 0x3, 0xec, 0x14]; -_T Rejang = [0xa0, 0xa9, 0x30, 0x24, 0xb, 0x1]; -_T Lepcha = [0x9c, 0x0, 0x38, 0x3, 0xf, 0x3, 0x3]; -_T Tai_Tham = [0x9a, 0x20, 0x3f, 0x1, 0x1d, 0x2, 0xb, 0x6, 0xa, 0x6, 0xe]; -_T Dives_Akuru = [0xa1, 0x19, 0x0, 0x7, 0x2, 0x1, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1e, 0x1, 0x2, 0x2, 0xc, 0x9, 0xa]; -_T Meetei_Mayek = [0xa0, 0xaa, 0xe0, 0x17, 0x80, 0xc9, 0x2e, 0x2, 0xa]; -_T Tirhuta = [0xa1, 0x14, 0x80, 0x48, 0x8, 0xa]; -_T Marchen = [0xa1, 0x1c, 0x70, 0x20, 0x2, 0x16, 0x1, 0xe]; -_T Wancho = [0xa1, 0xe2, 0xc0, 0x3a, 0x5, 0x1]; -_T Phoenician = [0xa1, 0x9, 0x0, 0x1c, 0x3, 0x1]; -_T Gurmukhi = [0x8a, 0x1, 0x3, 0x1, 0x6, 0x4, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x1, 0x5, 0x4, 0x2, 0x2, 0x3, 0x3, 0x1, 0x7, 0x4, 0x1, 0x1, 0x7, 0x11]; -_T Khudawadi = [0xa1, 0x12, 0xb0, 0x3b, 0x5, 0xa]; -_T Khojki = [0xa1, 0x12, 0x0, 0x12, 0x1, 0x2f]; -_T Newa = [0xa1, 0x14, 0x0, 0x5c, 0x1, 0x5]; -_T Dogra = [0xa1, 0x18, 0x0, 0x3c]; -_T Oriya = [0x8b, 0x1, 0x3, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0x9, 0x2, 0x2, 0x2, 0x3, 0x7, 0x3, 0x4, 0x2, 0x1, 0x5, 0x2, 0x12]; -_T Tagalog = [0x97, 0x0, 0x16, 0x9, 0x1]; -_T Sundanese = [0x9b, 0x80, 0x40, 0x81, 0x0, 0x8]; -_T Old_Permic = [0xa1, 0x3, 0x50, 0x2b]; -_T Shavian = [0xa1, 0x4, 0x50, 0x30]; -_T Lycian = [0xa1, 0x2, 0x80, 0x1d]; -_T Miao = [0xa1, 0x6f, 0x0, 0x4b, 0x4, 0x39, 0x7, 0x11]; -_T Tangut = [0xa1, 0x6f, 0xe0, 0x1, 0x1f, 0x97, 0xf8, 0x8, 0x83, 0x0, 0x82, 0x0, 0x9]; -_T Bengali = [0x89, 0x80, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x1, 0x3, 0x4, 0x2, 0x9, 0x2, 0x2, 0x2, 0x4, 0x8, 0x1, 0x4, 0x2, 0x1, 0x5, 0x2, 0x19]; -_T Inscriptional_Pahlavi = [0xa1, 0xb, 0x60, 0x13, 0x5, 0x8]; -_T Vithkuqi = [0xa1, 0x5, 0x70, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2, 0x1, 0xb, 0x1, 0xf, 0x1, 0x7, 0x1, 0x2]; -_T Armenian = [0x85, 0x31, 0x26, 0x2, 0x32, 0x2, 0x3, 0xa0, 0xf5, 0x83, 0x5]; -_T New_Tai_Lue = [0x99, 0x80, 0x2c, 0x4, 0x1a, 0x6, 0xb, 0x3, 0x2]; -_T Sogdian = [0xa1, 0xf, 0x30, 0x2a]; -_T Buhid = [0x97, 0x40, 0x14]; -_T Manichaean = [0xa1, 0xa, 0xc0, 0x27, 0x4, 0xc]; -_T Greek = [0x83, 0x70, 0x4, 0x1, 0x3, 0x2, 0x4, 0x1, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x14, 0x1, 0x3f, 0xe, 0x10, 0x99, 0x26, 0x5, 0x32, 0x5, 0x4, 0x5, 0x54, 0x1, 0x81, 0x40, 0x16, 0x2, 0x6, 0x2, 0x26, 0x2, 0x6, 0x2, 0x8, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1f, 0x2, 0x35, 0x1, 0xf, 0x1, 0xe, 0x2, 0x6, 0x1, 0x13, 0x2, 0x3, 0x1, 0x9, 0x81, 0x27, 0x1, 0xa0, 0x8a, 0x3e, 0x1, 0xa0, 0x55, 0xda, 0x4f, 0x11, 0x1, 0xa0, 0xd0, 0x5f, 0x46]; -_T Braille = [0xa0, 0x28, 0x0, 0x81, 0x0]; -_T Avestan = [0xa1, 0xb, 0x0, 0x36, 0x3, 0x7]; -_T Arabic = [0x86, 0x0, 0x5, 0x1, 0x6, 0x1, 0xe, 0x1, 0x3, 0x1, 0x20, 0x1, 0xa, 0xb, 0x1a, 0x1, 0x6c, 0x1, 0x22, 0x50, 0x30, 0x80, 0xf0, 0x1f, 0x1, 0x2, 0x6, 0x4a, 0x1, 0x1d, 0xa0, 0xf2, 0x50, 0x73, 0x10, 0x81, 0x6b, 0x2, 0x50, 0x2, 0x36, 0x7, 0x1, 0x20, 0x10, 0x70, 0x5, 0x1, 0x80, 0x87, 0x8f, 0x63, 0x1f, 0x7e, 0x3, 0xa0, 0xdf, 0x0, 0x4, 0x1, 0x1b, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0xa, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x6, 0x1, 0x4, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x4, 0x1, 0x7, 0x1, 0x4, 0x1, 0x4, 0x1, 0x1, 0x1, 0xa, 0x1, 0x11, 0x5, 0x3, 0x1, 0x5, 0x1, 0x11, 0x34, 0x2]; -_T Javanese = [0xa0, 0xa9, 0x80, 0x4e, 0x2, 0xa, 0x4, 0x2]; -_T Lydian = [0xa1, 0x9, 0x20, 0x1a, 0x5, 0x1]; -_T Pau_Cin_Hau = [0xa1, 0x1a, 0xc0, 0x39]; -_T Cypro_Minoan = [0xa1, 0x2f, 0x90, 0x63]; -_T Buginese = [0x9a, 0x0, 0x1c, 0x2, 0x2]; -_T Batak = [0x9b, 0xc0, 0x34, 0x8, 0x4]; -_T Nandinagari = [0xa1, 0x19, 0xa0, 0x8, 0x2, 0x2e, 0x2, 0xb]; -_T Cham = [0xa0, 0xaa, 0x0, 0x37, 0x9, 0xe, 0x2, 0xa, 0x2, 0x4]; -_T Gunjala_Gondi = [0xa1, 0x1d, 0x60, 0x6, 0x1, 0x2, 0x1, 0x25, 0x1, 0x2, 0x1, 0x6, 0x7, 0xa]; -_T Cypriot = [0xa1, 0x8, 0x0, 0x6, 0x2, 0x1, 0x1, 0x2c, 0x1, 0x2, 0x3, 0x1, 0x2, 0x1]; -_T Ugaritic = [0xa1, 0x3, 0x80, 0x1e, 0x1, 0x1]; -_T Georgian = [0x90, 0xa0, 0x26, 0x1, 0x1, 0x5, 0x1, 0x2, 0x2b, 0x1, 0x4, 0x8b, 0x90, 0x2b, 0x2, 0x3, 0x90, 0x40, 0x26, 0x1, 0x1, 0x5, 0x1]; -_T Sharada = [0xa1, 0x11, 0x80, 0x60]; -_T Tamil = [0x8b, 0x82, 0x2, 0x1, 0x6, 0x3, 0x3, 0x1, 0x4, 0x3, 0x2, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x3, 0x3, 0x3, 0xc, 0x4, 0x5, 0x3, 0x3, 0x1, 0x4, 0x2, 0x1, 0x6, 0x1, 0xe, 0x15, 0xa1, 0x13, 0xc5, 0x32, 0xd, 0x1]; -_T Cherokee = [0x93, 0xa0, 0x56, 0x2, 0x6, 0xa0, 0x97, 0x72, 0x50]; -_T Pahawh_Hmong = [0xa1, 0x6b, 0x0, 0x46, 0xa, 0xa, 0x1, 0x7, 0x1, 0x15, 0x5, 0x13]; -_T Syloti_Nagri = [0xa0, 0xa8, 0x0, 0x2d]; -_T Kharoshthi = [0xa1, 0xa, 0x0, 0x4, 0x1, 0x2, 0x5, 0x8, 0x1, 0x3, 0x1, 0x1d, 0x2, 0x3, 0x4, 0xa, 0x7, 0x9]; -_T Zanabazar_Square = [0xa1, 0x1a, 0x0, 0x48]; -_T Katakana = [0xa0, 0x30, 0xa1, 0x5a, 0x2, 0x3, 0x80, 0xf0, 0x10, 0x80, 0xd0, 0x2f, 0x1, 0x58, 0xa0, 0xcc, 0xe, 0xa, 0x1, 0x2d, 0xa0, 0xb0, 0x52, 0x4, 0x1, 0x7, 0x1, 0x2, 0x1, 0x1, 0x81, 0x1f, 0x3, 0x32, 0x1, 0xe, 0x4]; -_T Telugu = [0x8c, 0x0, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0x10, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x1, 0x3, 0x2, 0x1, 0x2, 0x4, 0x2, 0xa, 0x7, 0x9]; -_T Ethiopic = [0x92, 0x0, 0x49, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0x29, 0x1, 0x4, 0x2, 0x21, 0x1, 0x4, 0x2, 0x7, 0x1, 0x1, 0x1, 0x4, 0x2, 0xf, 0x1, 0x39, 0x1, 0x4, 0x2, 0x43, 0x2, 0x20, 0x3, 0x1a, 0x99, 0xe6, 0x17, 0x9, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0x1, 0x7, 0xa0, 0x7d, 0x22, 0x6, 0x2, 0x6, 0x2, 0x6, 0x9, 0x7, 0x1, 0x7, 0xa1, 0x3c, 0xb1, 0x7, 0x1, 0x4, 0x1, 0x2, 0x1, 0xf]; -_T Vai = [0xa0, 0xa5, 0x0, 0x81, 0x2c]; -_T Bamum = [0xa0, 0xa6, 0xa0, 0x58, 0xa0, 0xc1, 0x8, 0x82, 0x39]; -_T Hangul = [0x91, 0x0, 0x81, 0x0, 0x9e, 0x2e, 0x2, 0x81, 0x1, 0x5e, 0x71, 0x1f, 0x41, 0x1f, 0xa0, 0x76, 0xe1, 0x1d, 0x82, 0x83, 0xa0, 0x2b, 0xa4, 0xc, 0x17, 0x4, 0x31, 0xa0, 0x27, 0xa4, 0x1f, 0x3, 0x6, 0x2, 0x6, 0x2, 0x6, 0x2, 0x3]; -_T Mongolian = [0x98, 0x0, 0x2, 0x2, 0x1, 0x1, 0x14, 0x6, 0x59, 0x7, 0x2b, 0xa0, 0xfd, 0xb5, 0xd]; -_T Nag_Mundari = [0xa1, 0xe4, 0xd0, 0x2a]; -_T Old_Uyghur = [0xa1, 0xf, 0x70, 0x1a]; -_T Mahajani = [0xa1, 0x11, 0x50, 0x27]; -_T Khmer = [0x97, 0x80, 0x5e, 0x2, 0xa, 0x6, 0xa, 0x81, 0xe6, 0x20]; -_T Grantha = [0xa1, 0x13, 0x0, 0x4, 0x1, 0x8, 0x2, 0x2, 0x2, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0x9, 0x2, 0x2, 0x2, 0x3, 0x2, 0x1, 0x6, 0x1, 0x5, 0x7, 0x2, 0x7, 0x3, 0x5]; -_T Kannada = [0x8c, 0x80, 0xd, 0x1, 0x3, 0x1, 0x17, 0x1, 0xa, 0x1, 0x5, 0x2, 0x9, 0x1, 0x3, 0x1, 0x4, 0x7, 0x2, 0x6, 0x2, 0x1, 0x4, 0x2, 0xa, 0x1, 0x3]; -_T Kawi = [0xa1, 0x1f, 0x0, 0x11, 0x1, 0x29, 0x3, 0x1c]; -_T Yezidi = [0xa1, 0xe, 0x80, 0x2a, 0x1, 0x3, 0x2, 0x2]; -_T Old_North_Arabian = [0xa1, 0xa, 0x80, 0x20]; -_T Tai_Le = [0x99, 0x50, 0x1e, 0x2, 0x5]; -_T Hebrew = [0x85, 0x91, 0x37, 0x8, 0x1b, 0x4, 0x6, 0xa0, 0xf5, 0x28, 0x1a, 0x1, 0x5, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0xa]; -_T Gujarati = [0x8a, 0x81, 0x3, 0x1, 0x9, 0x1, 0x3, 0x1, 0x16, 0x1, 0x7, 0x1, 0x2, 0x1, 0x5, 0x2, 0xa, 0x1, 0x3, 0x1, 0x3, 0x2, 0x1, 0xf, 0x4, 0x2, 0xc, 0x7, 0x7]; -_T Tangsa = [0xa1, 0x6a, 0x70, 0x4f, 0x1, 0xa]; -_T Carian = [0xa1, 0x2, 0xa0, 0x31]; -_T Bhaiksuki = [0xa1, 0x1c, 0x0, 0x9, 0x1, 0x2d, 0x1, 0xe, 0xa, 0x1d]; -_T Masaram_Gondi = [0xa1, 0x1d, 0x0, 0x7, 0x1, 0x2, 0x1, 0x2c, 0x3, 0x1, 0x1, 0x2, 0x1, 0x9, 0x8, 0xa]; -_T Runic = [0x96, 0xa0, 0x4b, 0x3, 0xb]; -_T Duployan = [0xa1, 0xbc, 0x0, 0x6b, 0x5, 0xd, 0x3, 0x9, 0x7, 0xa, 0x2, 0x4]; -_T Warang_Citi = [0xa1, 0x18, 0xa0, 0x53, 0xc, 0x1]; -_T Phags_Pa = [0xa0, 0xa8, 0x40, 0x38]; +_T Old_Hungarian = x"A10C80330D330706"; +_T Coptic = x"83E20EA02890740507"; +_T Ol_Chiki = x"9C5030"; +_T Cyrillic = x"840080850280A997500B80A0014C01906720A0784060A0578E02A0E2003E2101"; +_T Thaana = x"878032"; +_T Inscriptional_Parthian = x"A10B40160208"; +_T Nabataean = x"A108801F0809"; +_T Ogham = x"96801D"; +_T Meroitic_Hieroglyphs = x"A1098020"; +_T Makasar = x"A11EE019"; +_T Siddham = x"A11580360226"; +_T Gurung_Khema = x"A161003A"; +_T Old_Persian = x"A103A024040E"; +_T Imperial_Aramaic = x"A10840160109"; +_T Myanmar = x"900080A0A099401F6120A06C5014"; +_T Deseret = x"A1040050"; +_T Kaithi = x"A11080430A01"; +_T Medefaidrin = x"A16E405B"; +_T Kayah_Li = x"A0A9002E0101"; +_T Hiragana = x"A03041560603A17F61811F12011D03A040AD01"; +_T Ahom = x"A117001B020F0417"; +_T Devanagari = x"890051040F021AA09F6020A072000A"; +_T Tibetan = x"8F0048012404270124010F01070402"; +_T Nko = x"87C03B0203"; +_T Brahmi = x"A110004E04240901"; +_T Todhri = x"A105C034"; +_T Osage = x"A104B0240424"; +_T Nushu = x"A16FE101A0418E818C"; +_T Cuneiform = x"A12000839A666F01050B80C4"; +_T Takri = x"A116803A060A"; +_T Toto = x"A1E2901F"; +_T Latin = x"411A061A2F010F010517011F0181C127059A1B2606310504050D01464181008171010D01100D808D0206011B0111298AD720A07AA2660343020201010108150E83302B01090104A04F9607841A1A061A882506012A0109A0D7451F0606"; +_T Hanunoo = x"972015"; +_T Limbu = x"99001F010C040C0401030C"; +_T Saurashtra = x"A0A88046080C"; +_T Lisu = x"A0A4D030A07AB001"; +_T Egyptian_Hieroglyphs = x"A1300084560A8F9B"; +_T Elbasan = x"A1050028"; +_T Palmyrene = x"A1086020"; +_T Tagbanwa = x"97600D01030102"; +_T Old_Italic = x"A10300240903"; +_T Caucasian_Albanian = x"A10530340B01"; +_T Malayalam = x"8D000D01030133010301060410021A"; +_T Inherited = x"83007081150281C40B1A0182E004915B1F820103010D010704010601030280C640820C0280C2218F39046B02A0CD6510100E83CF0180E201905A01A0BBC42E0217822003110802071E04AC2F5280F0"; +_T Sora_Sompeng = x"A110D019070A"; +_T Linear_B = x"A100000C011A01130102010F020E227B"; +_T Nyiakeng_Puachue_Hmong = x"A1E1002D030E020A0402"; +_T Meroitic_Cursive = x"A109A0180414022E"; +_T Thai = x"8E013A051C"; +_T Mende_Kikakui = x"A1E80080C50210"; +_T Old_Sogdian = x"A10F0028"; +_T Old_Turkic = x"A10C0049"; +_T Samaritan = x"88002E020F"; +_T Old_South_Arabian = x"A10A6020"; +_T Hanifi_Rohingya = x"A10D0028080A"; +_T Balinese = x"9B004D0132"; +_T Mandaic = x"88401C0201"; +_T SignWriting = x"A1D800828C0F05010F"; +_T Tifinagh = x"A02D303807020E01"; +_T Tai_Viet = x"A0AA80431805"; +_T Syriac = x"87000E013C020381100B"; +_T Soyombo = x"A11A5053"; +_T Elymaic = x"A10FE017"; +_T Ol_Onal = x"A1E5D02B0401"; +_T Hatran = x"A108E01301020505"; +_T Chorasmian = x"A10FB01C"; +_T Glagolitic = x"A02C0060A1B3A0070111020701020105"; +_T Osmanya = x"A104801E020A"; +_T Linear_A = x"A10600813709160A08"; +_T Kirat_Rai = x"A16D403A"; +_T Mro = x"A16A401F010A0402"; +_T Chakma = x"A11100350112"; +_T Modi = x"A11600450B0A"; +_T Bassa_Vah = x"A16AD01E0206"; +_T Tulu_Tigalari = x"A113800A010102010126010A010102010104010A01020802"; +_T Han = x"A02E801A01590C80D62F01010119090E0483C499C040A05200A05900816E026AA07508020C02A0900EA0A6E020903A0680DE0296820E9D310F826E89A2821E85E2934B059060"; +_T Multani = x"A112800701010104010F010B"; +_T Sunuwar = x"A11BC0220E0A"; +_T Bopomofo = x"82EA02A02E192B7020"; +_T Adlam = x"A1E9004C040A0402"; +_T Khitan_Small_Script = x"A16FE4019B1B81D62901"; +_T Lao = x"8E810201010105011801010117020501010107010A0204"; +_T Psalter_Pahlavi = x"A10B801207040C07"; +_T Anatolian_Hieroglyphs = x"A144008247"; +_T Canadian_Aboriginal = x"94008280823046A101BA10"; +_T Common = x"00411A061A2F010F010517011F0181C127050502147401090106010101827D0106010E0103012001809C0182040180810284D90181950481220185EF03470280CB02010184CD010D01070401060103020183050C0257010B030B010F11213F2601030206011B0111290304829A160B1583A0810082740220016982005E819215010101190F0804045B0203015A028093102026090130401F512F015880A899C040A0590022660380A50A80F40180A001818B010E02A051D20280D00A16230113010480930101201A061A0B0A012D02400701070A05810203042D0309500D332D80E41BA0B9A4048F5C80FA0681B4809C743C80F60A27023E03110802071E043D80D5140C140C57091980875501470102020102020204010C010101070141010402080107011C010401050101030701815402812402329471444C3D82C22C04640C0F020F010F01250A80AE381A01020D2C040907020E06809A83D80411030D0377045F060C04010F0C0438080A0628081E020C04023E81540C0E020D030A0538070F020B06090780930166AC0407011E60"; +_T Gothic = x"A103301B"; +_T Yi = x"A0A000848D0337"; +_T Sinhala = x"8D8103011203180109010102070301040601010108060A0203A103EC14"; +_T Rejang = x"A0A930240B01"; +_T Lepcha = x"9C0038030F0303"; +_T Tai_Tham = x"9A203F011D020B060A060E"; +_T Dives_Akuru = x"A1190007020102080102011E0102020C090A"; +_T Meetei_Mayek = x"A0AAE01780C92E020A"; +_T Tirhuta = x"A1148048080A"; +_T Marchen = x"A11C70200216010E"; +_T Wancho = x"A1E2C03A0501"; +_T Phoenician = x"A109001C0301"; +_T Gurmukhi = x"8A0103010604020216010701020102010202010105040202030301070401010711"; +_T Khudawadi = x"A112B03B050A"; +_T Khojki = x"A1120012012F"; +_T Newa = x"A114005C0105"; +_T Dogra = x"A118003C"; +_T Oriya = x"8B01030108020202160107010201050209020202030703040201050212"; +_T Tagalog = x"9700160901"; +_T Sundanese = x"9B8040810008"; +_T Old_Permic = x"A103502B"; +_T Shavian = x"A1045030"; +_T Lycian = x"A102801D"; +_T Miao = x"A16F004B04390711"; +_T Tangut = x"A16FE0011F97F8088300820009"; +_T Bengali = x"8980040108020202160107010103040209020202040801040201050219"; +_T Inscriptional_Pahlavi = x"A10B60130508"; +_T Vithkuqi = x"A105700B010F01070102010B010F01070102"; +_T Armenian = x"85312602320203A0F58305"; +_T New_Tai_Lue = x"99802C041A060B0302"; +_T Sogdian = x"A10F302A"; +_T Buhid = x"974014"; +_T Manichaean = x"A10AC027040C"; +_T Garay = x"A10D4026031D0802"; +_T Greek = x"83700401030204010104010101010301010114013F0E109926053205040554018140160206022602060208010101010101011F0235010F010E0206011302030109812701A08A3E01A055DA4F1101A0D05F46"; +_T Braille = x"A028008100"; +_T Avestan = x"A10B00360307"; +_T Arabic = x"8600050106010E01030120010A0B1A016C0122503080F01F0102054B011DA0F2507310816B025002360701201070050180878F631F43033704A0DF0004011B010201010201010A0104010101010601040101010101010301020101020101010101010101010102010102040107010401040101010A01110503010501113402"; +_T Javanese = x"A0A9804E020A0402"; +_T Lydian = x"A109201A0501"; +_T Pau_Cin_Hau = x"A11AC039"; +_T Cypro_Minoan = x"A12F9063"; +_T Buginese = x"9A001C0202"; +_T Batak = x"9BC0340804"; +_T Nandinagari = x"A119A008022E020B"; +_T Cham = x"A0AA0037090E020A0204"; +_T Gunjala_Gondi = x"A11D60060102012501020106070A"; +_T Cypriot = x"A10800060201012C010203010201"; +_T Ugaritic = x"A103801E0101"; +_T Georgian = x"90A02601010501022B01048B902B020390402601010501"; +_T Sharada = x"A1118060"; +_T Tamil = x"8B820201060303010403020101010203020303030C040503030104020106010E15A113C5320D01"; +_T Cherokee = x"93A0560206A0977250"; +_T Pahawh_Hmong = x"A16B00460A0A010701150513"; +_T Syloti_Nagri = x"A0A8002D"; +_T Kharoshthi = x"A10A0004010205080103011D0203040A0709"; +_T Zanabazar_Square = x"A11A0048"; +_T Katakana = x"A030A15A020380F01080D02F0158A0CC0E0A012DA0B05204010701020101811F0332010E04"; +_T Telugu = x"8C000D0103011701100209010301040702010302010204020A0709"; +_T Ethiopic = x"92004901040207010101040229010402210104020701010104020F0139010402430220031A99E61709070107010701070107010701070107A07D22060206020609070107A13CB10701040102010F"; +_T Vai = x"A0A500812C"; +_T Bamum = x"A0A6A058A0C1088239"; +_T Hangul = x"910081009E2E0281015E711F411FA076E11D8283A02BA40C170431A027A41F0306020602060203"; +_T Mongolian = x"980002020101140659072BA0FDB50D"; +_T Nag_Mundari = x"A1E4D02A"; +_T Old_Uyghur = x"A10F701A"; +_T Mahajani = x"A1115027"; +_T Khmer = x"97805E020A060A81E620"; +_T Grantha = x"A113000401080202021601070102010502090202020302010601050702070305"; +_T Kannada = x"8C800D01030117010A0105020901030104070206020104020A0103"; +_T Kawi = x"A11F00110129031D"; +_T Yezidi = x"A10E802A01030202"; +_T Old_North_Arabian = x"A10A8020"; +_T Tai_Le = x"99501E0205"; +_T Hebrew = x"859137081B0406A0F5281A0105010101020102010A"; +_T Gujarati = x"8A8103010901030116010701020105020A0103010302010F04020C0707"; +_T Tangsa = x"A16A704F010A"; +_T Carian = x"A102A031"; +_T Bhaiksuki = x"A11C0009012D010E0A1D"; +_T Masaram_Gondi = x"A11D00070102012C030101020109080A"; +_T Runic = x"96A04B030B"; +_T Duployan = x"A1BC006B050D0309070A0204"; +_T Warang_Citi = x"A118A0530C01"; +_T Phags_Pa = x"A0A84038"; _U[] _tab = [ _U("Adlam", Adlam), _U("Ahom", Ahom), @@ -2691,6 +1984,7 @@ _U("Egyptian_Hieroglyphs", Egyptian_Hieroglyphs), _U("Elbasan", Elbasan), _U("Elymaic", Elymaic), _U("Ethiopic", Ethiopic), +_U("Garay", Garay), _U("Georgian", Georgian), _U("Glagolitic", Glagolitic), _U("Gothic", Gothic), @@ -2699,6 +1993,7 @@ _U("Greek", Greek), _U("Gujarati", Gujarati), _U("Gunjala_Gondi", Gunjala_Gondi), _U("Gurmukhi", Gurmukhi), +_U("Gurung_Khema", Gurung_Khema), _U("Han", Han), _U("Hangul", Hangul), _U("Hanifi_Rohingya", Hanifi_Rohingya), @@ -2721,6 +2016,7 @@ _U("Khitan_Small_Script", Khitan_Small_Script), _U("Khmer", Khmer), _U("Khojki", Khojki), _U("Khudawadi", Khudawadi), +_U("Kirat_Rai", Kirat_Rai), _U("Lao", Lao), _U("Latin", Latin), _U("Lepcha", Lepcha), @@ -2767,6 +2063,7 @@ _U("Old_Sogdian", Old_Sogdian), _U("Old_South_Arabian", Old_South_Arabian), _U("Old_Turkic", Old_Turkic), _U("Old_Uyghur", Old_Uyghur), +_U("Ol_Onal", Ol_Onal), _U("Oriya", Oriya), _U("Osage", Osage), _U("Osmanya", Osmanya), @@ -2789,6 +2086,7 @@ _U("Sogdian", Sogdian), _U("Sora_Sompeng", Sora_Sompeng), _U("Soyombo", Soyombo), _U("Sundanese", Sundanese), +_U("Sunuwar", Sunuwar), _U("Syloti_Nagri", Syloti_Nagri), _U("Syriac", Syriac), _U("Tagalog", Tagalog), @@ -2806,7 +2104,9 @@ _U("Thai", Thai), _U("Tibetan", Tibetan), _U("Tifinagh", Tifinagh), _U("Tirhuta", Tirhuta), +_U("Todhri", Todhri), _U("Toto", Toto), +_U("Tulu_Tigalari", Tulu_Tigalari), _U("Ugaritic", Ugaritic), _U("Vai", Vai), _U("Vithkuqi", Vithkuqi), @@ -2824,11 +2124,11 @@ private alias _U = immutable(UnicodeProperty); @property static _U[] tab() pure { return _tab; } static immutable: private alias _T = ubyte[]; -_T V = [0x91, 0x60, 0x48, 0xa0, 0xc6, 0x8, 0x17]; -_T T = [0x91, 0xa8, 0x58, 0xa0, 0xc5, 0xcb, 0x31]; -_T LVT = [0xa0, 0xac, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b]; -_T L = [0x91, 0x0, 0x60, 0xa0, 0x98, 0x0, 0x1d]; -_T LV = [0xa0, 0xac, 0x0, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1, 0x1b, 0x1]; +_T V = x"916048A0C60817"; +_T T = x"91A858A0C5CB31"; +_T LVT = x"A0AC011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B"; +_T L = x"910060A098001D"; +_T LV = x"A0AC00011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B011B01"; _U[] _tab = [ _U("L", L), _U("Leading_Jamo", L), @@ -3033,49 +2333,3080 @@ bool isHangT(dchar ch) @safe pure nothrow @nogc static if (size_t.sizeof == 4) { -//2080 bytes -enum lowerCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xe0], [ 0x100, 0x140, 0x2500], [ 0x2020100, 0x4020302, 0x6020205, 0x8070202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60007, 0x80006, 0x60006, 0x60006, 0x60006, 0x60006, 0xa0009, 0xc000b, 0xe000d, 0x60006, 0x6000f, 0x60006, 0x60006, 0x60006, 0x110010, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x130012, 0x60006, 0x140006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x150006, 0x60006, 0x160006, 0x60006, 0x60006, 0x180017, 0x190006, 0x60006, 0x60006, 0x6001a, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x6001b, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x6001c, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x1e001d, 0x20001f, 0x60006, 0x60006, 0x60006, 0x210006, 0x60022, 0x60006, 0x60006, 0x60006, 0x230006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x0, 0x0, 0x0, 0x7fffffe, 0x0, 0x4200400, 0x80000000, 0xff7fffff, 0xaaaaaaaa, 0x55aaaaaa, 0xaaaaab55, 0xd4aaaaaa, 0x4e243129, 0xe6512d2a, 0xb5555240, 0xaa29aaaa, 0xaaaaaaaa, 0x93faaaaa, 0xffffaa85, 0xffffffff, 0xffefffff, 0x1ffffff, 0x3, 0x1f, 0x0, 0x0, 0x20, 0x3c8a0000, 0x10000, 0xfffff000, 0xaae37fff, 0x192faaaa, 0x0, 0xffff0000, 0xffffffff, 0xaaaaaaaa, 0xaaaaa802, 0xaaaaaaaa, 0xaaaad554, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaa, 0x0, 0xffffffff, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xf7ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f000000, 0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xbfeaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0x3f00ff, 0xff00ff, 0xff003f, 0x3fff00ff, 0xff00ff, 0x40df00ff, 0xcf00dc, 0xdc00ff, 0x0, 0x0, 0x0, 0x80020000, 0x1fff0000, 0x0, 0x0, 0x0, 0x8c400, 0x32108000, 0x43c0, 0xffff0000, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x3ff, 0x0, 0xffff0000, 0xffffffff, 0x3fda1562, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0x8501a, 0xffffffff, 0x20bf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaaaaaaaa, 0x2aaa, 0x3aaaaaaa, 0x0, 0x0, 0x0, 0x0, 0xaaabaaa8, 0xaaaaaaaa, 0x95ffaaaa, 0xaaba50aa, 0xaaa082aa, 0x2aa050a, 0x75c0000, 0x0, 0xffff0000, 0xf7ffffff, 0xffff03ff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0xf8007f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff00, 0xffff, 0x0, 0x0, 0x0, 0xff000000, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0xff800000, 0x1bfbfffb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffb9, 0x7fdffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xfc000000, 0xfffff, 0xffdfc000, 0xff, 0xffffffc, 0xebc00000, 0xffef, 0xfffffc00, 0xc000000f, 0xffffff, 0xfffc0000, 0xfff, 0xffffffc0, 0xfc000000, 0xfffff, 0xffffc000, 0xff, 0xffffffc, 0xffc00000, 0xffff, 0xfffffc00, 0x3f, 0xf7fffffc, 0xf0000003, 0xfdfffff, 0xffc00000, 0x3f7fff, 0xffff0000, 0xfdff, 0xfffffc00, 0xbf7, 0x0, 0x7ffffbff, 0x7e0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffffc, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//1856 bytes -enum upperCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0xe0], [ 0x100, 0x140, 0x1e00], [ 0x2020100, 0x4020302, 0x6020205, 0x8070202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60007, 0x80006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60009, 0xb000a, 0xc0006, 0x60006, 0x6000d, 0x60006, 0x60006, 0x60006, 0x6000e, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x10000f, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x110006, 0x60006, 0x60006, 0x130012, 0x60006, 0x60006, 0x60006, 0x60014, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60015, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60016, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x180017, 0x1a0019, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x1b0006, 0x60006, 0x60006, 0x60006, 0x1c0006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x60006, 0x0, 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x7f7fffff, 0x0, 0x55555555, 0xaa555555, 0x555554aa, 0x2b555555, 0xb1dbced6, 0x11aed2d5, 0x4aaaa490, 0x55d25555, 0x55555555, 0x6c055555, 0x557a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80450000, 0xfffed740, 0xffb, 0x551c8000, 0xe6905555, 0xffffffff, 0xffff, 0x0, 0x55555555, 0x55555401, 0x55555555, 0x55552aab, 0x55555555, 0x55555555, 0xfffe5555, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x20bf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xe7ffffff, 0x0, 0x0, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x40155555, 0x55555555, 0x55555555, 0x55555555, 0x3f00ff00, 0xff00ff00, 0xaa003f00, 0xff00, 0x0, 0xf000000, 0xf000f00, 0xf001f00, 0x3e273884, 0xc00f3d50, 0x20, 0xffff, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffc00000, 0xffff, 0x0, 0xffffffff, 0xffff, 0x0, 0xc025ea9d, 0x55555555, 0x55555555, 0x55555555, 0x42805, 0x0, 0x0, 0x55555555, 0x1555, 0x5555555, 0x0, 0x0, 0x0, 0x0, 0x55545554, 0x55555555, 0x6a005555, 0x55452855, 0x555f7d55, 0x14102f5, 0x200000, 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xff, 0x0, 0x0, 0x0, 0xffff0000, 0xfffff, 0x0, 0x0, 0x0, 0x0, 0xf7ff0000, 0x37f7ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ffffff, 0xfff00000, 0x3fff, 0xffffff00, 0xd0000003, 0x3fde64, 0xffff0000, 0x3ff, 0x1fdfe7b0, 0x7b000000, 0x1fc5f, 0xfffff000, 0x3f, 0x3ffffff, 0xfff00000, 0x3fff, 0xffffff00, 0xf0000003, 0x3fffff, 0xffff0000, 0x3ff, 0xffffff00, 0x1, 0x7fffffc, 0xf0000000, 0x1fffff, 0xffc00000, 0x7fff, 0xffff0000, 0x1ff, 0x400, 0x0, 0xffffffff, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//11520 bytes -enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0x1180], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160015, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180017, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0x1a0000, 0x1b, 0x1d001c, 0x1f001e, 0x210020, 0x230022, 0x0, 0x0, 0x250024, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x280027, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0029, 0x2c002b, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e0000, 0x2f, 0x310030, 0x330032, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x340000, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x370036, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390038, 0x3b003a, 0x3c0000, 0x3d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f003e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x410040, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x420000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x440043, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x919ffff, 0x8e10080, 0x31905f9, 0x90700bd, 0x9cc0b94, 0xb25006b, 0x82206c5, 0xacc00e0, 0x4650834, 0x5cf0592, 0xa2d0783, 0x1930180, 0x4d7051c, 0xffff02f9, 0xffffffff, 0xffffffff, 0x91affff, 0x8e20081, 0x31a05fa, 0x90800be, 0x9cd0b95, 0xb26006c, 0x82306c6, 0xacd00e1, 0x4660835, 0x5d00593, 0xa2e0784, 0x1940181, 0x4d8051d, 0xffff02fa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x961ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5ac0779, 0x8520118, 0x9b70ad2, 0x3d90257, 0x38d0557, 0xb470128, 0x3950629, 0x3150047, 0x8d905f1, 0x29f0086, 0x589070f, 0xffff00cb, 0x97e0adc, 0x4f90213, 0x87c06ff, 0x8eb0a3f, 0x5ad077a, 0x8530119, 0x9b80ad3, 0x3da0258, 0x38e0558, 0xb480129, 0x396062a, 0x3160048, 0x8da05f2, 0x2a00087, 0x58a0710, 0xffff00cc, 0x97f0add, 0x4fa0214, 0x87d0700, 0x36a0a40, 0x9d909d8, 0x4ca04c9, 0x1cd01cc, 0xb520b51, 0x20001ff, 0x730072f, 0xce00cd, 0x8ab08aa, 0x5c005b, 0x6120611, 0x520051, 0x61e061d, 0x2b202b1, 0x6610660, 0x15a0159, 0x7ff07fe, 0xb830b82, 0x7e507e4, 0x4bc04bb, 0xa5c0a5b, 0x1b401b3, 0x5910590, 0x21c021b, 0x9690968, 0xffffffff, 0x8750874, 0x9350934, 0x31c031b, 0x94ffff, 0x6fb0095, 0x8e06fc, 0x818008f, 0xb2a0819, 0x7c80b2b, 0x12007c9, 0xa1d0121, 0xffff0a1e, 0x4da04d9, 0x7c307c2, 0xb600b5f, 0x6bb06ba, 0x1620161, 0x6810680, 0x2aa02a9, 0x6080607, 0xd000c, 0x63f063e, 0x70006f, 0x8370836, 0xd200d1, 0x7260725, 0x1df01de, 0xb7b0b7a, 0x1a201a1, 0x4c404c3, 0xa4c0a4b, 0x7cd07cc, 0x5640563, 0x9730972, 0x9f509f4, 0x623036b, 0x210624, 0x5fb0022, 0x5d105fc, 0x686068f, 0xb120b11, 0x26a0269, 0x2750524, 0xb330276, 0x1af07f8, 0xffff01b0, 0xabc0767, 0x8b00a41, 0x51e08b1, 0x229027b, 0x98c0b03, 0x970096, 0xffff04c7, 0x8e700aa, 0x32b00d3, 0x190018, 0x62c062b, 0x1050104, 0x3cd0551, 0x9a203ce, 0xffffffff, 0x1690168, 0x75707ec, 0x1a70758, 0x52a077d, 0x301052b, 0xaba0302, 0x2560255, 0xffffffff, 0x91c091b, 0x1adffff, 0xffffffff, 0xffffffff, 0x9260925, 0x5de0927, 0x5e005df, 0xadf0ade, 0x4fb0ae0, 0x79604fc, 0xa570797, 0x7690a58, 0x43f076a, 0xa7a0440, 0x2fd0a7b, 0x54f02fe, 0x7680550, 0xb4e0b4d, 0x6530652, 0x16b016a, 0x5f805f7, 0x2c002bf, 0x6450644, 0xf200f1, 0x6a706a6, 0x56e056d, 0xab4ffff, 0xab60ab5, 0x7460745, 0x1ae022a, 0xb680b67, 0x1eb01ea, 0x4180417, 0x96d096c, 0x83d083c, 0x59d059c, 0x93c093b, 0x8ba08b9, 0x3ac03ab, 0x8940893, 0xb0c0b0b, 0x41a0419, 0x4090408, 0xa890a88, 0x2b402b3, 0x52f052e, 0x16d016c, 0x7ef07ee, 0x5b505b4, 0x8470846, 0xffff00d4, 0x6cc06cb, 0x640063, 0xb7d0b7c, 0xc200c1, 0x73c073b, 0x790078, 0x8860885, 0x5780577, 0x6f306f2, 0xffffffff, 0xffffffff, 0xffffffff, 0x7940a08, 0x4c80795, 0x95907bc, 0x14b028b, 0x690014c, 0x2d3041b, 0x9d109d0, 0x9220921, 0x3240323, 0x950094f, 0x9f109f0, 0xb190400, 0x687021d, 0xffff0525, 0x7f90b34, 0xabdffff, 0xa42ffff, 0xffff093d, 0xffffffff, 0xb28051f, 0x27cffff, 0xb70ffff, 0xffff00b5, 0xb04098d, 0x63a00f9, 0xffff0986, 0xabffff, 0x59effff, 0xffff08e8, 0x32cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x31ffff, 0xffffffff, 0xffff0552, 0x9a30514, 0xffffffff, 0x350ffff, 0x41c07ed, 0x77e01a8, 0xffff02d4, 0xffffffff, 0xffffffff, 0xffff0abb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x92ffff, 0xffff070d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x96effff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4a304a2, 0x1cf01ce, 0xffffffff, 0x1f601f5, 0xffffffff, 0xa31ffff, 0x86a0122, 0x382ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0299, 0x82406d5, 0xffff00eb, 0xffff07f0, 0x9c60b9a, 0x4b1ffff, 0x17c04ac, 0xab70a11, 0x16601d2, 0x96f0598, 0xb010b2c, 0x81a0962, 0x1060399, 0x62d0b6d, 0x688ffff, 0x605032d, 0xac0345, 0x6f808f9, 0x9a0848, 0x6d6029a, 0xec0825, 0x4b2ffff, 0x17d04ad, 0xab80a12, 0x16701d3, 0x9700599, 0xb020b2d, 0x81b0963, 0x107039a, 0x62e0b6e, 0x68a0689, 0x606032e, 0xad0346, 0x6f908fa, 0x9b0849, 0xb9b07f1, 0x97409c7, 0x59a04ae, 0xffffffff, 0x347ffff, 0x9750b6f, 0x18c018b, 0x4a704a6, 0xa830a82, 0x85b085a, 0x580057f, 0x9850984, 0x9db09da, 0x3ba03b9, 0x2f602f5, 0x8be08bd, 0x4480447, 0x3630362, 0x62f0b2e, 0x38301d6, 0xab9059b, 0xa7effff, 0x1d70a7f, 0x5d905d8, 0xa32ffff, 0x86b0123, 0x51804ef, 0x96a0291, 0x98a0aef, 0x5aa0090, 0x8f506fd, 0x8f300a0, 0x31d05ed, 0x38f009c, 0xb3f071d, 0x3bf053e, 0x3d106e5, 0xab0027d, 0x8660a86, 0x4b50126, 0x7a80808, 0x1b90a0e, 0x50f07ea, 0x2df0a6d, 0xac809a0, 0x15b0245, 0x6620579, 0xb550936, 0x61f09ea, 0x5303c1, 0xb40071e, 0x3c0053f, 0x3d206e6, 0xab1027e, 0x8670a87, 0x4b60127, 0x7a90809, 0x1ba0a0f, 0x51007eb, 0x2e00a6e, 0xac909a1, 0x15c0246, 0x663057a, 0xb560937, 0x62009eb, 0x5403c2, 0x51904f0, 0x96b0292, 0x98b0af0, 0x5ab0091, 0x8f606fe, 0x8f400a1, 0x31e05ee, 0x390009d, 0xa9d0a9c, 0x5cb05ca, 0x2440243, 0xb440b43, 0x1fa01f9, 0x3e403e3, 0x9b209b1, 0x8550854, 0x5a105a0, 0x8dc08db, 0x8c208c1, 0x3980397, 0x8840883, 0x9330932, 0x3dc03db, 0x4160415, 0xb1c0b1b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5a505a4, 0x8270826, 0xe600e5, 0x6ce06cd, 0x5e005d, 0x61a0619, 0x50004, 0x72e072d, 0xca00c9, 0x8a908a8, 0x5660565, 0x6b306b2, 0x10b010a, 0x4ee04ed, 0x1a0019f, 0xa0b0a0a, 0x4560455, 0x7b907b8, 0xb6a0b69, 0x82d082c, 0x4050404, 0x9bb09ba, 0x8ea08e9, 0x3260325, 0x8d608d5, 0x9f309f2, 0x3b603b5, 0x6c002db, 0x21f06c1, 0x5d60220, 0x23705d7, 0xa1b0238, 0x49e0a1c, 0x790049f, 0x2dc0791, 0x23c023b, 0x55a0559, 0x2620261, 0x6e206e1, 0x580057, 0x6260625, 0x1e001d, 0x6770676, 0x1130112, 0x6750674, 0x2480247, 0x5680567, 0x11b011a, 0x7a707a6, 0x4990498, 0x7760775, 0xa8b0a8a, 0x4680467, 0x2360235, 0xafa0af9, 0x38a0389, 0x42a0429, 0x90a0909, 0x8c608c5, 0x3380337, 0x920091f, 0x9fb09fa, 0x3d603d5, 0x8210820, 0xa8f0a8e, 0x7990798, 0x1cb01ca, 0xa160a15, 0x2c402c3, 0x4ea04e9, 0x1710170, 0x6a306a2, 0x5b905b8, 0x64b064a, 0x2c002b, 0x6370636, 0x380037, 0xb640b63, 0xb400b3, 0x7360735, 0xac70ac6, 0x88a0889, 0x4ec04eb, 0xb9cffff, 0x227017e, 0x71704b3, 0xa940293, 0x84e0abe, 0x587047b, 0x6d303a5, 0x1330b5d, 0x67a0384, 0x3030352, 0x67c08ff, 0x1350928, 0x6d705b2, 0xb210945, 0x8560a00, 0x4ff0522, 0x7130295, 0x22f0a37, 0x5da0184, 0xffff0785, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb9dffff, 0x228017f, 0x71804b4, 0xa950294, 0x84f0abf, 0x588047c, 0x6d403a6, 0x1340b5e, 0x67b0385, 0x3040353, 0x67d0900, 0x1360929, 0x6d805b3, 0xb220946, 0x8570a01, 0x5000523, 0x7140296, 0x2300a38, 0x5db0185, 0xffff0786, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x81e09b3, 0x50b03e9, 0x6f401f0, 0x1b10b88, 0x4830241, 0x1b70496, 0xa980a96, 0x46b0878, 0x7fc0569, 0xaf1069e, 0x39100f7, 0x42f0646, 0x90502d9, 0x8bf068d, 0x33b014f, 0x9130670, 0x9e40b49, 0x3cf084a, 0x2e10108, 0xaa2ffff, 0xffffffff, 0xffffffff, 0xa4fffff, 0xffffffff, 0xae10153, 0x3fa0697, 0x42b05c2, 0x92e0666, 0x317002d, 0x3c705ef, 0x9ec0025, 0x9230b35, 0x55b008c, 0x85806ae, 0x9a70ada, 0x427087e, 0x21504fd, 0xa04075f, 0x24901da, 0x71104d1, 0xaa802a1, 0x8140994, 0x58503df, 0x6ea03c9, 0x11e0b2f, 0xffff039d, 0xeffff, 0x6930901, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43105d4, 0x36000c3, 0x81206be, 0x930006d, 0x374088f, 0x9f60b23, 0x8b70601, 0x335007e, 0x1f70a67, 0xa5502cd, 0x95106b6, 0x55d0137, 0xb7807d8, 0x7c60573, 0x4dd0489, 0x75b09e8, 0x2e7044d, 0x64c0378, 0x141084c, 0x6a0099c, 0x41045b, 0x8970915, 0x450b96, 0x6320313, 0x23309ad, 0xb6109dc, 0x820271, 0x7370541, 0xa060ad8, 0x77b0715, 0x1e40526, 0x4b708b2, 0x9f80289, 0x3ad06d9, 0x5b601fb, 0x8040b1d, 0x34c05dc, 0x35a0678, 0x2ad0139, 0x92a0684, 0xb7e004b, 0x38b0621, 0x4370061, 0xffffffff, 0xb7f004c, 0x38c0622, 0x4380062, 0xffffffff, 0x6e70540, 0x5110a10, 0xa700a6f, 0x5cc0938, 0xffff069b, 0xffffffff, 0xffffffff, 0xffffffff, 0xae20154, 0x3fb0698, 0x42c05c3, 0x92f0667, 0x318002e, 0x3c805f0, 0x9ed0026, 0x9240b36, 0x55c008d, 0x85906af, 0x9a80adb, 0x428087f, 0x21604fe, 0xa050760, 0x24a01db, 0x71204d2, 0xaa902a2, 0x8150995, 0x58603e0, 0x6eb03ca, 0x11f0b30, 0xffff039e, 0xfffff, 0x6940902, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x505ffff, 0xffffffff, 0x30dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0b8c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f106f0, 0x4c604c5, 0x7740773, 0xb810b80, 0x8010800, 0x4720471, 0x9810980, 0x260025f, 0x5760575, 0x9040903, 0x8f008ef, 0x3340333, 0x2cc02cb, 0x910090f, 0x45a0459, 0x3d403d3, 0xafe0afd, 0x7c507c4, 0x4dc04db, 0xa180a17, 0x1ac01ab, 0x5c905c8, 0x240023f, 0x72a0729, 0xdb00da, 0x83b083a, 0x60005f, 0x6140613, 0x130012, 0x60c060b, 0x2a402a3, 0x6920691, 0x15e015d, 0x6b506b4, 0x5af05ae, 0x79d079c, 0xa5e0a5d, 0x4910490, 0x2080207, 0xb540b53, 0x20e020d, 0x3de03dd, 0x9420941, 0x8770876, 0x3550354, 0x8fc08fb, 0x8ce08cd, 0x37d037c, 0x8810880, 0x95e095d, 0x3d803d7, 0x2040203, 0xb380b37, 0x1b601b5, 0x47e047d, 0xa3c0a3b, 0x7db07da, 0x5c105c0, 0x80d080c, 0x14e014d, 0x65b065a, 0x2ac02ab, 0x6310630, 0x4a0049, 0x61c061b, 0x890088, 0x89f089e, 0x53d053c, 0x7340733, 0x2060205, 0x4c004bf, 0x1d101d0, 0xa540a53, 0x43e043d, 0x7cf07ce, 0xffffffff, 0xffffffff, 0x882ffff, 0xffffffff, 0xffff08ec, 0x3080307, 0x8e408e3, 0x9c509c4, 0x3a203a1, 0x2540253, 0xad70ad6, 0x42e042d, 0x7e307e2, 0xa200a1f, 0x7af07ae, 0x4c204c1, 0x720071f, 0x21a0219, 0x5440543, 0x990098, 0x7020701, 0xa300a2, 0x5f605f5, 0x4e004d, 0x6510650, 0x1250124, 0xaf40af3, 0x2f402f3, 0x5310530, 0x1170116, 0x770076f, 0x4950494, 0x7b307b2, 0xa6a0a69, 0x3f503f4, 0x24e024d, 0xb770b76, 0x3bc03bb, 0x43a0439, 0x8d008cf, 0x8f208f1, 0x35f035e, 0x91e091d, 0x9910990, 0x54a0549, 0x8a108a0, 0xa720a71, 0x450044f, 0x19a0199, 0xa440a43, 0x1d501d4, 0x6de06dd, 0xee00ed, 0x3a70603, 0x9fc0035, 0x94b0b3b, 0x55300f3, 0x3a80604, 0x9fd0036, 0x94c0b3c, 0x55400f4, 0xa2f076b, 0x22b019d, 0x6f604cb, 0xffffffff, 0xa30076c, 0x22c019e, 0x6f704cc, 0xffffffff, 0x5fd039b, 0x160305, 0x67e08e5, 0x172086c, 0x5fe039c, 0x170306, 0x67f08e6, 0x173086d, 0xa3302e5, 0x1820ac2, 0x4a801a3, 0x1e0078c, 0xa3402e6, 0x1830ac3, 0x4a901a4, 0x1e1078d, 0x34e0074, 0x35605e1, 0x8bb000a, 0xffffffff, 0x34f0075, 0x35705e2, 0x8bc000b, 0xffffffff, 0x1e6ffff, 0xa59ffff, 0x4d3ffff, 0x76dffff, 0x1e7ffff, 0xa5affff, 0x4d4ffff, 0x76effff, 0x2c5098e, 0x654043b, 0x2903b1, 0x5e30b86, 0x2c6098f, 0x655043c, 0x2a03b2, 0x5e40b87, 0x2ed0445, 0x9d202d5, 0x2090a6b, 0x41d05cd, 0x808df, 0xa510aaa, 0x6170321, 0xffffffff, 0x9640b15, 0x3a30285, 0x2c10664, 0x8ed012a, 0x9650b16, 0x3a40286, 0x2c20665, 0x8ee012b, 0x3b706df, 0x9ee028f, 0x7f20b0d, 0x5b001fd, 0x3b806e0, 0x9ef0290, 0x7f30b0e, 0x5b101fe, 0xb7409de, 0xdc09af, 0x73d058e, 0x7c0281, 0xb7509df, 0xdd09b0, 0x73e058f, 0x7d0282, 0x6680370, 0x978ffff, 0xffffffff, 0xffffffff, 0x6690371, 0x2ee0446, 0xffff0979, 0xffff0971, 0xffffffff, 0xf5ffff, 0xffffffff, 0xffffffff, 0x9d302d6, 0x20a0a6c, 0xffff00f6, 0xffffffff, 0x35c00bb, 0xffffffff, 0xffffffff, 0xffffffff, 0x35d00bc, 0x41e05ce, 0xffffffff, 0xffffffff, 0x1c30176, 0xffffffff, 0x29bffff, 0xffffffff, 0x1c40177, 0xa520aab, 0xffff029c, 0xffffffff, 0xffffffff, 0x3bdffff, 0xffffffff, 0xffffffff, 0x908e0, 0x6180322, 0xffff03be, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff06fa, 0xffffffff, 0x9b90b27, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff094d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff094e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa7307b0, 0x4570492, 0x1780765, 0xa3d09d6, 0x1ec0532, 0x70702f1, 0xde0ae5, 0x82a044b, 0xa7407b1, 0x4580493, 0x1790766, 0xa3e09d7, 0x1ed0533, 0x70802f2, 0xdf0ae6, 0x82b044c, 0xffffffff, 0x870ffff, 0xffff0871, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x594037a, 0xa60b1f, 0x7430816, 0x52803fc, 0x89509c8, 0xa8c020f, 0x7b40485, 0x18d0221, 0xa9a071b, 0x29d0102, 0x516085c, 0x9760b17, 0x93f065c, 0x595037b, 0xa70b20, 0x7440817, 0x52903fd, 0x89609c9, 0xa8d0210, 0x7b50486, 0x18e0222, 0xa9b071c, 0x29e0103, 0x517085d, 0x9770b18, 0x940065d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x65603c5, 0x10c0ae7, 0x6b00828, 0x5090441, 0x8680a49, 0xaac01c8, 0x751049a, 0x225020b, 0xb590709, 0x2770536, 0x40a080e, 0x98200a8, 0x9390703, 0x5a2002f, 0x9570638, 0x8cb003b, 0x39f066e, 0x8720151, 0xb050682, 0x3e505d2, 0x40207d0, 0xa9e0114, 0x2e304b9, 0x53801bb, 0x65703c6, 0x10d0ae8, 0x6b10829, 0x50a0442, 0x8690a4a, 0xaad01c9, 0x752049b, 0x226020c, 0xb5a070a, 0x2780537, 0x40b080f, 0x98300a9, 0x93a0704, 0x5a30030, 0x9580639, 0x8cc003c, 0x3a0066f, 0x8730152, 0xb060683, 0x3e605d3, 0x40307d1, 0xa9f0115, 0x2e404ba, 0x53901bc, 0x3a0039, 0x30e063b, 0xa090032, 0x9d407bd, 0x37e09d5, 0x265037f, 0xb1a0266, 0x401059f, 0xffff021e, 0xa140a13, 0x74bffff, 0xffff074c, 0xffffffff, 0xffffffff, 0xffffffff, 0x28c095a, 0x2a602a5, 0x33a0339, 0x8c808c7, 0x90e090d, 0x3730372, 0x2b902b8, 0x9930992, 0x46e046d, 0x7fb07fa, 0xb500b4f, 0x7780777, 0x4b004af, 0xa600a5f, 0x1e901e8, 0x56c056b, 0xd600d5, 0x7280727, 0x660065, 0x8a508a4, 0x20001f, 0x6280627, 0x5a0059, 0xb140b13, 0x2640263, 0x6bd06bc, 0x190018f, 0x7bf07be, 0x5bb05ba, 0x74e074d, 0xa360a35, 0x4e004df, 0x280027f, 0xafc0afb, 0x3aa03a9, 0x470046f, 0x9540953, 0x8d208d1, 0x3280327, 0x92d092c, 0x9bd09bc, 0x57c057b, 0x82f082e, 0xaa70aa6, 0x420041f, 0x2180217, 0xa0d0a0c, 0x1a601a5, 0x70c070b, 0x10f010e, 0x81d081c, 0xffffffff, 0xffffffff, 0xffffffff, 0x358ffff, 0x3290359, 0xffff032a, 0xffffffff, 0x6d006cf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x81f09b4, 0x50c03ea, 0x6f501f1, 0x1b20b89, 0x4840242, 0x1b80497, 0xa990a97, 0x46c0879, 0x7fd056a, 0xaf2069f, 0x39200f8, 0x4300647, 0x90602da, 0x8c0068e, 0x33c0150, 0x9140671, 0x9e50b4a, 0x3d0084b, 0x2e20109, 0xaa3ffff, 0xffffffff, 0xffffffff, 0xa50ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1d901d8, 0xa1a0a19, 0xa930a92, 0x79b079a, 0x140013f, 0x69d069c, 0x2bb02ba, 0x4f404f3, 0x3e003d, 0x6410640, 0x5bd05bc, 0x6490648, 0x770076, 0x73a0739, 0x40003f, 0xb660b65, 0x4e804e7, 0x7820781, 0xacf0ace, 0x88e088d, 0x2c802c7, 0xac10ac0, 0x17b017a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5130512, 0x2980297, 0x9480947, 0x9ff09fe, 0x7ad07ac, 0xa7d0a7c, 0xa3a0a39, 0x18a0189, 0x7480747, 0xaf00ae, 0x8880887, 0x52d052c, 0x5ea05e9, 0x340033, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x70006, 0x8a708a6, 0xc600c5, 0x6ef06ee, 0xe800e7, 0x60e060d, 0x680067, 0xffffffff, 0x1580157, 0x8310830, 0xb460b45, 0x5020501, 0x9bf09be, 0xa260a25, 0x2b002af, 0x87b087a, 0x95c095b, 0x97d097c, 0x3940393, 0xb580b57, 0x8510850, 0x3120311, 0x330032f, 0x2120211, 0x5a705a6, 0x40f040e, 0x9890988, 0x51b051a, 0x8650864, 0x23e023d, 0xa220a21, 0xff00fe, 0x66b066a, 0xb0a0b09, 0x6a506a4, 0x1560155, 0x65f065e, 0x2ea02e9, 0x69a0699, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7a0ffff, 0x4d507a1, 0x50604d6, 0xb6c0b6b, 0x5840583, 0x9b609b5, 0xacb0aca, 0x8410840, 0xffffffff, 0x4fffff, 0xb710050, 0xffffffff, 0xb080b07, 0x24c024b, 0xffff078e, 0x3b003af, 0x7d707d6, 0x49d049c, 0x3f903f8, 0x9cb09ca, 0x50e050d, 0x27a0279, 0x80b080a, 0x11d011c, 0x7060705, 0x93e00b6, 0x9870b29, 0xffff00fa, 0x351070e, 0xb5b0093, 0x5e805e7, 0x9f009e, 0x6e406e3, 0x13e013d, 0x54e054d, 0x28e028d, 0x8030802, 0x4340433, 0x515078f, 0x7590b8d, 0x174075a, 0xffff0175, 0xffffffff, 0xffffffff, 0x2f802f7, 0xffffffff, 0xffffffff, 0x310030f, 0xaec0aeb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9e6ffff, 0xffff09e7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb5cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43205d5, 0x36100c4, 0x81306bf, 0x931006e, 0x3750890, 0x9f70b24, 0x8b80602, 0x336007f, 0x1f80a68, 0xa5602ce, 0x95206b7, 0x55e0138, 0xb7907d9, 0x7c70574, 0x4de048a, 0x75c09e9, 0x2e8044e, 0x64d0379, 0x142084d, 0x6a1099d, 0x42045c, 0x8980916, 0x460b97, 0x6330314, 0x23409ae, 0xb6209dd, 0x830272, 0x7380542, 0xa070ad9, 0x77c0716, 0x1e50527, 0x4b808b3, 0x9f9028a, 0x3ae06da, 0x5b701fc, 0x8050b1e, 0x34d05dd, 0x35b0679, 0x2ae013a, 0x92b0685, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9c0ffff, 0x2670aed, 0x5a80143, 0x9490642, 0x74904cd, 0xb720771, 0x7c0013b, 0x3fe04f5, 0x54b0259, 0x2ef03eb, 0xa800aae, 0x19707a2, 0x5ff08c3, 0xffff0451, 0xffffffff, 0xffffffff, 0x9c1ffff, 0x2680aee, 0x5a90144, 0x94a0643, 0x74a04ce, 0xb730772, 0x7c1013c, 0x3ff04f6, 0x54c025a, 0x2f003ec, 0xa810aaf, 0x19807a3, 0x60008c4, 0xffff0452, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x74f0a61, 0x5be075d, 0x7e8012f, 0x9ab0aa4, 0xaf50955, 0x2dd099a, 0x4e104f7, 0x14507d2, 0x47700e9, 0x8c90634, 0x2cf0043, 0x36c0721, 0x40602d1, 0x25d0547, 0xb840147, 0x3800672, 0xac40a75, 0x479078a, 0x2310481, 0xb4b077f, 0x7500a62, 0x5bf075e, 0x7e90130, 0x9ac0aa5, 0xaf60956, 0x2de099b, 0x4e204f8, 0x14607d3, 0x47800ea, 0x8ca0635, 0x2d00044, 0x36d0722, 0x40702d2, 0x25e0548, 0xb850148, 0x3810673, 0xac50a76, 0x47a078b, 0x2320482, 0xb4c0780, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xad00a45, 0x73f07d4, 0x223056f, 0xaff0996, 0x9c2022d, 0x7920b39, 0x4a0024f, 0x761047f, 0x5c40331, 0x6a80343, 0x1bf0b31, 0x6c70283, 0x28709a9, 0x64e03c3, 0x2702eb, 0x60908d3, 0xa270753, 0x8ac0a29, 0xffffffff, 0xffffffff, 0xad10a46, 0x74007d5, 0x2240570, 0xb000997, 0x9c3022e, 0x7930b3a, 0x4a10250, 0x7620480, 0x5c50332, 0x6a90344, 0x1c00b32, 0x6c80284, 0x28809aa, 0x64f03c4, 0x2802ec, 0x60a08d4, 0xa280754, 0x8ad0a2a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x461088b, 0x26b00a4, 0xae306aa, 0x2510110, 0x9430b3d, 0xffff00b7, 0x8f705e5, 0x8fd00b9, 0x7ca0806, 0x1310b41, 0x55f0832, 0x2ff03e1, 0x4210581, 0xffff02a7, 0x7630a23, 0x4e30475, 0x63c0a2b, 0xffff03b3, 0x6d102c9, 0x88cffff, 0xa50462, 0x6ab026c, 0x1110ae4, 0xb3e0252, 0xb80944, 0x5e6ffff, 0xba08f8, 0x80708fe, 0xb4207cb, 0x8330132, 0x3e20560, 0x5820300, 0x2a80422, 0xa24ffff, 0x4760764, 0xa2c04e4, 0x3b4063d, 0x2caffff, 0xffff06d2, 0xffffffff, 0x48704cf, 0x1490191, 0x7e00b8e, 0x57101e2, 0x3e70695, 0x44305c6, 0xa8407e6, 0x3090a47, 0xb8a0911, 0xc7090b, 0x72b0341, 0x8a0891, 0x862045f, 0x1000966, 0x7190899, 0x7a0366, 0x5200201, 0x33f04bd, 0xad40a63, 0x463079e, 0x838095f, 0x53a0469, 0x6e80239, 0x1bd0b90, 0x9e002fb, 0xffff066c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x48804d0, 0x14a0192, 0x7e10b8f, 0x57201e3, 0x3e80696, 0x44405c7, 0xa8507e7, 0x30a0a48, 0xb8b0912, 0xc8090c, 0x72c0342, 0x8b0892, 0x8630460, 0x1010967, 0x71a089a, 0x7b0367, 0x5210202, 0x34004be, 0xad50a64, 0x464079f, 0x8390960, 0x53b046a, 0x6e9023a, 0x1be0b91, 0x9e102fc, 0xffff066d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1dc057d, 0xb9207a4, 0x1c101a9, 0x4e5048e, 0x36e00cf, 0x83e0731, 0x97a00ef, 0x45d0844, 0x15f0b0f, 0x68b086e, 0x2d7034a, 0x60f08dd, 0xa650364, 0x8420ab2, 0x5550453, 0x6b803cb, 0x1dd057e, 0xb9307a5, 0x1c201aa, 0x4e6048f, 0x36f00d0, 0x83f0732, 0x97b00f0, 0x45e0845, 0x1600b10, 0x68c086f, 0x2d8034b, 0x61008de, 0xa660365, 0x8430ab3, 0x5560454, 0x6b903cc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x99e0084, 0x31f0723, 0x410025b, 0x40c05f3, 0x9170069, 0x56106db, 0x3480010, 0xa020615, 0x4aa0473, 0x19507aa, 0x6ec030b, 0x1ee0aa0, 0x8a204f1, 0xae906c9, 0x9e20a4d, 0x50307b6, 0x99f0085, 0x3200724, 0x411025c, 0x40d05f4, 0x918006a, 0x56206dc, 0x3490011, 0xa030616, 0x4ab0474, 0x19607ab, 0x6ed030c, 0x1ef0aa1, 0x8a304f2, 0xaea06ca, 0x9e30a4e, 0x50407b7, 0x3f60658, 0x8ae0055, 0x8d705eb, 0x4350023, 0x3760596, 0xbf, 0x8100741, 0x5070534, 0x207ba, 0x755019b, 0x44904a4, 0xa90033d, 0x2730af7, 0x545016e, 0x99806ac, 0x9ce0b98, 0x140368, 0x3f70659, 0x8af0056, 0x8d805ec, 0x4360024, 0x3770597, 0x100c0, 0x8110742, 0x5080535, 0x307bb, 0x756019c, 0x44a04a5, 0xa91033e, 0x2740af8, 0x546016f, 0x99906ad, 0x9cf0b99, 0x150369, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//11648 bytes -enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0x11c0], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160015, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180017, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0x1a0000, 0x1b, 0x1d001c, 0x1f001e, 0x210020, 0x230022, 0x0, 0x0, 0x250024, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x280027, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0029, 0x2c002b, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e0000, 0x2f, 0x310030, 0x330032, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x340000, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380037, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0039, 0x3c003b, 0x3d0000, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40003f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x420041, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x430000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x450044, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9beffff, 0x984008a, 0x3440658, 0x9ac00c7, 0xa7c0c6a, 0xbf40074, 0x8b10736, 0xb9100ef, 0x4a608c3, 0x62905e6, 0xae607fe, 0x1ac0199, 0x5210569, 0xffff0320, 0xffffffff, 0xffffffff, 0x9bfffff, 0x985008b, 0x3450659, 0x9ad00c8, 0xa7d0c6b, 0xbf50075, 0x8b20737, 0xb9200f0, 0x4a708c4, 0x62a05e7, 0xae707ff, 0x1ad019a, 0x522056a, 0xffff0321, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa0bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x60507f2, 0x8e3012e, 0xa640b9a, 0x4120277, 0x3c105a6, 0xc18013e, 0x3c9068a, 0x340004e, 0x97c0650, 0x2c20090, 0x5da0781, 0xffff00d5, 0xa2a0ba7, 0x5430230, 0x9110771, 0xba20af9, 0x60607f3, 0x8e4012f, 0xa650b9b, 0x4130278, 0x3c205a7, 0xc19013f, 0x3ca068b, 0x341004f, 0x97d0651, 0x2c30091, 0x5db0782, 0xffff00d6, 0xa2b0ba8, 0x5440231, 0x9120772, 0x39b0afa, 0xa890a88, 0x5120511, 0x1e601e5, 0xc230c22, 0x21d021c, 0x7a607a5, 0xd800d7, 0x9460945, 0x650064, 0x6730672, 0x5b005a, 0x67f067e, 0x2d802d7, 0x6c406c3, 0x1730172, 0x8890888, 0xc550c54, 0x8680867, 0x5040503, 0xb180b17, 0x1cd01cc, 0x5e505e4, 0x2390238, 0xa140a13, 0xffff03f6, 0x90a0909, 0x9dd09dc, 0x3470346, 0x9effff, 0x76d009f, 0x98076e, 0x8a70099, 0xbf908a8, 0x8440bfa, 0x1360845, 0xad60137, 0x31a0ad7, 0x5240523, 0x83f083e, 0xc310c30, 0x72a0729, 0x17b017a, 0x6eb06ea, 0x2d002cf, 0x6690668, 0xf000e, 0x6a0069f, 0x790078, 0x8c608c5, 0xdc00db, 0x79c079b, 0x1fb01fa, 0xc4d0c4c, 0x1bb01ba, 0x50c050b, 0xb080b07, 0x84b084a, 0x5b305b2, 0xa1e0a1d, 0xaab0aaa, 0x684039c, 0x250685, 0x65a0026, 0x62b065b, 0x6f006f9, 0xbe00bdf, 0x28a0289, 0x2950571, 0xc020296, 0x1c80881, 0xffff01c9, 0xb8107e0, 0x94e0afb, 0x56b094f, 0x247029b, 0xa380bd0, 0xa100a0, 0xffff050f, 0x98a00b4, 0x35600dd, 0x1d001c, 0x68d068c, 0x1180117, 0x40605a0, 0xa4e0407, 0xffffffff, 0x1820181, 0x7d00874, 0x1c007d1, 0x57707f8, 0x3280578, 0xb7f0329, 0x2760275, 0xffffffff, 0x9c109c0, 0x1c6ffff, 0xffffffff, 0xffffffff, 0x9ce09cd, 0x63b09cf, 0x63d063c, 0xbaa0ba9, 0x5450bab, 0x8120546, 0xb130813, 0x7e20b14, 0x47c07e3, 0xb39047d, 0x3240b3a, 0x59e0325, 0x7e1059f, 0xc1f0c1e, 0x6b606b5, 0x1840183, 0x6570656, 0x2e602e5, 0x6a606a5, 0x1010100, 0x7140713, 0x5bd05bc, 0xb790928, 0xb7b0b7a, 0x7bf07be, 0x1c70248, 0xc390c38, 0x2070206, 0x4550454, 0xa180a17, 0x8ce08cd, 0x5f105f0, 0x9e409e3, 0x95b095a, 0x3e103e0, 0x92d092c, 0xbd90bd8, 0x4570456, 0x4460445, 0xb480b47, 0x2da02d9, 0x57c057b, 0x1860185, 0x8770876, 0x60f060e, 0x8d808d7, 0xffff00de, 0x73d073c, 0x6d006c, 0xc4f0c4e, 0xcc00cb, 0x7b407b3, 0x820081, 0x91b091a, 0x5c905c8, 0x7650764, 0xffffffff, 0xffffffff, 0xffffffff, 0x8100abe, 0x5100811, 0xa030838, 0x16402ad, 0x6fa0165, 0x2fa0458, 0xa810a80, 0x9c709c6, 0x34f034e, 0x9fa09f9, 0xaa70aa6, 0xbe8043b, 0x6f1023a, 0xffff0572, 0x8820c03, 0xb82ffff, 0xafcffff, 0xffff09e5, 0xffffffff, 0xbf7056c, 0x29cffff, 0xc41ffff, 0xffff00bf, 0xbd10a39, 0x69b0109, 0xffff0a32, 0xb5ffff, 0x5f7ffff, 0xffff098b, 0x357ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x35ffff, 0xffffffff, 0xffff05a1, 0xa4f055f, 0xffffffff, 0x380ffff, 0x4590875, 0x7f901c1, 0xffff02fb, 0xffffffff, 0xffffffff, 0xffff0b80, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9cffff, 0xffff077f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa19ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4e604e5, 0x1e801e7, 0xffffffff, 0x2120211, 0xffffffff, 0xaeaffff, 0x8ff0138, 0x3b3ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff02bc, 0x8b30746, 0xffff00fa, 0xffff0878, 0xa750c70, 0x4f90883, 0x19504f1, 0xb7c0aca, 0x17f01eb, 0xa1a05ec, 0xbce0bfb, 0x8a90a0c, 0x11903cd, 0x68e0c3e, 0x6f2ffff, 0x6660358, 0xb60372, 0x76a099e, 0xa408d9, 0x74702bd, 0xfb08b4, 0x4fa0a79, 0x19604f2, 0xb7d0acb, 0x18001ec, 0xa1b05ed, 0xbcf0bfc, 0x8aa0a0d, 0x11a03ce, 0x68f0c3f, 0x6f406f3, 0x6670359, 0xb70373, 0x76b099f, 0xa508da, 0xc710879, 0xa1f0a76, 0x5ee04f3, 0xffffffff, 0x374ffff, 0xa200c40, 0x1a501a4, 0x4ec04eb, 0xb420b41, 0x8f008ef, 0x5d105d0, 0xa310a30, 0xa8b0a8a, 0x3f003ef, 0x31d031c, 0x95f095e, 0x4850484, 0x3940393, 0x6900bfd, 0x3b401ef, 0xb7e05ef, 0xb3dffff, 0x1f00b3e, 0x6310630, 0xaebffff, 0x9000139, 0x5650539, 0xa1502b4, 0xa360bba, 0x603009a, 0x99a076f, 0x99800aa, 0x348064a, 0x3c300a6, 0xc0e0790, 0x3f8058d, 0x40a0757, 0xb72029d, 0x8fb0b45, 0x4fd013c, 0x8240894, 0x1d20ac4, 0x55a0872, 0x3060b2c, 0xb8d0a4c, 0x1740265, 0x6c505ca, 0xc2609de, 0x6800a9d, 0x5c03fc, 0xc0f0791, 0x3f9058e, 0x40b0758, 0xb73029e, 0x8fc0b46, 0x4fe013d, 0x8250895, 0x1d30ac5, 0x55b0873, 0x3070b2d, 0xb8e0a4d, 0x1750266, 0x6c605cb, 0xc2709df, 0x6810a9e, 0x5d03fd, 0x566053a, 0xa1602b5, 0xa370bbb, 0x604009b, 0x99b0770, 0x99900ab, 0x349064b, 0x3c400a7, 0xb5c0b5b, 0x6250624, 0x2640263, 0xc130c12, 0x2160215, 0x41d041c, 0xa5f0a5e, 0x8e608e5, 0x5f605f5, 0x97f097e, 0x9630962, 0x3cc03cb, 0x9190918, 0x9db09da, 0x4150414, 0x4530452, 0xbeb0bea, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5fe05fd, 0x8b608b5, 0xf500f4, 0x73f073e, 0x670066, 0x67b067a, 0x50004, 0x7a407a3, 0xd400d3, 0x9440943, 0x5b505b4, 0x7220721, 0x11e011d, 0x5380537, 0x1b901b8, 0xac10ac0, 0x4950494, 0x8350834, 0xc3b0c3a, 0x8bc08bb, 0x4420441, 0xa680a67, 0x98d098c, 0x3510350, 0x9770976, 0xaa90aa8, 0x3eb03ea, 0x7310302, 0x23c0732, 0x632023d, 0x2550633, 0xad40256, 0x4e10ad5, 0x80c04e2, 0x303080d, 0x25a0259, 0x5a905a8, 0x2820281, 0x7540753, 0x610060, 0x6870686, 0x220021, 0x6e006df, 0x1290128, 0x6db06da, 0x2680267, 0x5b705b6, 0x1310130, 0x8230822, 0x4dc04db, 0x7ef07ee, 0xb4a0b49, 0x4a904a8, 0x2540253, 0xbc50bc4, 0x3be03bd, 0x4670466, 0x9af09ae, 0x9670966, 0x3650364, 0x9c509c4, 0xab10ab0, 0x40f040e, 0x8b008af, 0xb4e0b4d, 0x8150814, 0x1e401e3, 0xacf0ace, 0x2eb02ea, 0x5340533, 0x18a0189, 0x710070f, 0x6130612, 0x6ac06ab, 0x30002f, 0x6980697, 0x3c003b, 0xc350c34, 0xbe00bd, 0x7ae07ad, 0xb8c0b8b, 0x9230922, 0x5360535, 0xc72ffff, 0x2450197, 0x78904fb, 0xb5302b6, 0x8df0b83, 0x5d804be, 0x74403da, 0x14a0c2e, 0x6e403b5, 0x32a0382, 0x6e609a4, 0x14c09d0, 0x748060c, 0xbf009ed, 0x8e70ab6, 0x549056f, 0x78502b8, 0x24d0af0, 0x637019d, 0xffff0800, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc73ffff, 0x2460198, 0x78a04fc, 0xb5402b7, 0x8e00b84, 0x5d904bf, 0x74503db, 0x14b0c2f, 0x6e503b6, 0x32b0383, 0x6e709a5, 0x14d09d1, 0x749060d, 0xbf109ee, 0x8e80ab7, 0x54a0570, 0x78602b9, 0x24e0af1, 0x638019e, 0x6620801, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8ad0a60, 0x5560422, 0x766020c, 0x1ca0c5e, 0x4c60261, 0x1d004d9, 0xb570b55, 0x4ac090d, 0x88605b8, 0xbbc070b, 0x3c50107, 0x46c06a7, 0x9aa0300, 0x96006f7, 0x3680168, 0x9b806d4, 0xa970c1a, 0x40808db, 0x308011b, 0xb61ffff, 0xffffffff, 0xffffffff, 0xb0bffff, 0xffffffff, 0xbac016c, 0x4350702, 0x468061c, 0x9d606ca, 0x3420031, 0x3fe064c, 0xaa10029, 0x9cb0c04, 0x5aa0096, 0x8eb071d, 0xa530ba5, 0x4640913, 0x2320547, 0xaba07d8, 0x26901f3, 0x7830519, 0xb6802c4, 0x8a30a40, 0x5d60418, 0x75c0400, 0x1340bfe, 0xffff03d1, 0x10ffff, 0x6fd09a6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x46e062e, 0x39100cd, 0x8a1072f, 0x9d80076, 0x3a5093b, 0xaac0bf2, 0x9580660, 0x362008c, 0x2130b24, 0xb1102f4, 0x9fb0725, 0x5ac014e, 0xc4a085b, 0x84205c4, 0x52704cc, 0x7d40a9b, 0x30e048a, 0x6ad03a9, 0x15808dd, 0x70d0a48, 0x4a049a, 0x93009ba, 0x4c0c6c, 0x693033e, 0x2510a59, 0xc320a8c, 0x940291, 0x7af0590, 0xabc0ba0, 0x7f60787, 0x2000573, 0x4ff0953, 0xaae02ab, 0x3e2074a, 0x6100217, 0x8900c08, 0x37a0639, 0x39906ee, 0x2d30150, 0x9d20719, 0xc500054, 0x3bf0682, 0x474006a, 0xffffffff, 0xc510055, 0x3c00683, 0x475006b, 0xffffffff, 0x759058f, 0x55c0ac6, 0xb2f0b2e, 0x62609e0, 0xffff0708, 0xffffffff, 0xffffffff, 0xffffffff, 0xbad016d, 0x4360703, 0x469061d, 0x9d706cb, 0x3430032, 0x3ff064d, 0xaa2002a, 0x9cc0c05, 0x5ab0097, 0x8ec071e, 0xa540ba6, 0x4650914, 0x2330548, 0xabb07d9, 0x26a01f4, 0x784051a, 0xb6902c5, 0x8a40a41, 0x5d70419, 0x75d0401, 0x1350bff, 0xffff03d2, 0x11ffff, 0x6fe09a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x561ffff, 0xffffffff, 0x338ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0c62, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7630762, 0x50e050d, 0x7ed07ec, 0xc530c52, 0x88b088a, 0x4b304b2, 0xa2d0a2c, 0x280027f, 0x5c705c6, 0x9a909a8, 0x9950994, 0x3610360, 0x2f302f2, 0x9b509b4, 0x4990498, 0x40d040c, 0xbc90bc8, 0x8410840, 0x5260525, 0xad10ad0, 0x1c501c4, 0x6230622, 0x260025f, 0x7a0079f, 0xe500e4, 0x8ca08c9, 0x690068, 0x6750674, 0x150014, 0x66d066c, 0x2c702c6, 0x6fc06fb, 0x1770176, 0x7240723, 0x6080607, 0x8190818, 0xb1a0b19, 0x4d404d3, 0x2250224, 0xc250c24, 0x22b022a, 0x4170416, 0x9ea09e9, 0x90c090b, 0x3850384, 0x9a109a0, 0x96f096e, 0x3ae03ad, 0x9160915, 0xa080a07, 0x4110410, 0x2210220, 0xc070c06, 0x1cf01ce, 0x4c104c0, 0xaf60af5, 0x85e085d, 0x61b061a, 0x89c089b, 0x1670166, 0x6be06bd, 0x2d202d1, 0x6920691, 0x510050, 0x67d067c, 0x930092, 0x9380937, 0x58c058b, 0x7ac07ab, 0x2230222, 0x5080507, 0x1ea01e9, 0xb100b0f, 0x47b047a, 0x84d084c, 0xdf0c5c, 0x5ba03fa, 0x917049e, 0xffffffff, 0xffff0ba3, 0x3310330, 0x9870986, 0xa740a73, 0x3d603d5, 0x2740273, 0xb9f0b9e, 0x46b046a, 0x8660865, 0xad90ad8, 0x82b082a, 0x50a0509, 0x7930792, 0x2370236, 0x5930592, 0xa300a2, 0x7740773, 0xad00ac, 0x6550654, 0x570056, 0x6b406b3, 0x13b013a, 0xbbf0bbe, 0x3270326, 0x57e057d, 0x12d012c, 0x7e907e8, 0x4d804d7, 0x82f082e, 0xb270b26, 0x430042f, 0x26e026d, 0xc490c48, 0x3f203f1, 0x4770476, 0x9710970, 0x9970996, 0x390038f, 0x9c309c2, 0xa3d0a3c, 0x5990598, 0x93a0939, 0xb310b30, 0x48d048c, 0x1b301b2, 0xb000aff, 0x1ee01ed, 0x74f074e, 0xfd00fc, 0x3dc0664, 0xab20039, 0x9f30c0a, 0x5a20102, 0x3dd0665, 0xab3003a, 0x9f40c0b, 0x5a30103, 0xae807e4, 0x24901b6, 0x7680513, 0xffffffff, 0xae907e5, 0x24a01b7, 0x7690514, 0xffffffff, 0x65c03cf, 0x1a032c, 0x6e80988, 0x18b0901, 0x65d03d0, 0x1b032d, 0x6e90989, 0x18c0902, 0xaec030c, 0x19b0b87, 0x4ed01bc, 0x1fc0807, 0xaed030d, 0x19c0b88, 0x4ee01bd, 0x1fd0808, 0x37e007d, 0x386063e, 0x95c000c, 0xffffffff, 0x37f007e, 0x387063f, 0x95d000d, 0xffffffff, 0x2020085, 0xb1508ed, 0x51b0bec, 0x7e6072b, 0x203ffff, 0xb16ffff, 0x51cffff, 0x7e7ffff, 0x2ec0a3a, 0x6b70478, 0x2d03e6, 0x6400c5a, 0x2ed0a3b, 0x6b80479, 0x2e03e7, 0x6410c5b, 0x3140482, 0xa8202fc, 0x2260b2a, 0x45a0627, 0xa0982, 0xb0d0b6a, 0x678034c, 0xffffffff, 0xac70be3, 0x8560b76, 0x5f20794, 0x9910140, 0xac80be4, 0x8570b77, 0x5f30795, 0x9920141, 0x3ec0750, 0xaa30634, 0x9c80bda, 0x6090219, 0x3ed0751, 0xaa40635, 0x9c90bdb, 0x60a021a, 0xc450a90, 0xb1f0b95, 0x7b50947, 0x1f7054f, 0xc460a91, 0xb200b96, 0x7b60948, 0x1f80550, 0x6cc03a1, 0xa23048e, 0xffff0336, 0x3f0c43, 0x6cd03a2, 0x3150483, 0xffff0a24, 0xffff0a1c, 0xffffffff, 0xaf2084e, 0xffff0a9f, 0x51f0581, 0xa8302fd, 0x2270b2b, 0xffff0af3, 0xffffffff, 0x38d00c5, 0x884091e, 0xffffffff, 0x96c064e, 0x38e00c6, 0x45b0628, 0xffffffff, 0xffffffff, 0x1dc018f, 0xa7a08e9, 0x2be0c16, 0x4e707f4, 0x1dd0190, 0xb0e0b6b, 0xffff02bf, 0xffffffff, 0xffffffff, 0x6ff0a6b, 0xffff05d2, 0x6d8091c, 0xb0983, 0x679034d, 0xffff0700, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff076c, 0xffffffff, 0xa660bf6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff09f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff09f8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb32082c, 0x49604d5, 0x19107de, 0xaf70a86, 0x208057f, 0x7790318, 0xeb0bb0, 0x8b90488, 0xb33082d, 0x49704d6, 0x19207df, 0xaf80a87, 0x2090580, 0x77a0319, 0xec0bb1, 0x8ba0489, 0xffffffff, 0x905ffff, 0xffff0906, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5e803ab, 0xb00bee, 0x7bc08a5, 0x5750437, 0x92e0a77, 0xb4b022c, 0x83004c8, 0x1a60241, 0xb59078e, 0x2c00115, 0x56308f1, 0xa210be6, 0x9e706bf, 0x5e903ac, 0xb10bef, 0x7bd08a6, 0x5760438, 0x92f0a78, 0xb4c022d, 0x83104c9, 0x1a70242, 0xb5a078f, 0x2c10116, 0x56408f2, 0xa220be7, 0x9e806c0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6b90402, 0x11f0bb2, 0x71f08b7, 0x554047e, 0x8fd0b05, 0xb6c01e1, 0x7ca04dd, 0x2430228, 0xc2a077b, 0x2970583, 0x447089d, 0xa2e00b2, 0x9e10775, 0x5f90033, 0xa010699, 0x9740045, 0x3d306d2, 0x907016a, 0xbd206ec, 0x41e062c, 0x43d0850, 0xb5d012a, 0x30a0501, 0x58501d4, 0x6ba0403, 0x1200bb3, 0x72008b8, 0x555047f, 0x8fe0b06, 0xb6d01e2, 0x7cb04de, 0x2440229, 0xc2b077c, 0x2980584, 0x448089e, 0xa2f00b3, 0x9e20776, 0x5fa0034, 0xa02069a, 0x9750046, 0x3d406d3, 0x908016b, 0xbd306ed, 0x41f062d, 0x43e0851, 0xb5e012b, 0x30b0502, 0x58601d5, 0x3e003d, 0x339069c, 0xabf0036, 0xa840839, 0x3af0a85, 0x28503b0, 0xbe90286, 0x43c05f8, 0xffff023b, 0xacd0acc, 0x7c4ffff, 0xffff07c5, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ae0a04, 0x2c902c8, 0x3670366, 0x9690968, 0x9b309b2, 0x3a403a3, 0x2df02de, 0xa3f0a3e, 0x4af04ae, 0x88d088c, 0xc210c20, 0x7f107f0, 0x4f504f4, 0xb1c0b1b, 0x2050204, 0x5bf05be, 0xee00ed, 0x79e079d, 0x6f006e, 0x940093f, 0x240023, 0x6890688, 0x630062, 0xbe20be1, 0x2840283, 0x72e072d, 0x1a901a8, 0x83b083a, 0x6150614, 0x7c707c6, 0xaef0aee, 0x52a0529, 0x2a0029f, 0xbc70bc6, 0x3df03de, 0x4b104b0, 0x9fe09fd, 0x9730972, 0x3530352, 0x9d509d4, 0xa6a0a69, 0x5cd05cc, 0x8be08bd, 0xb670b66, 0x45d045c, 0x2350234, 0xac30ac2, 0x1bf01be, 0x77e077d, 0x1220121, 0x8ac08ab, 0xffffffff, 0xffffffff, 0xffffffff, 0x38bffff, 0x354038c, 0xffff0355, 0xffffffff, 0x7410740, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8ae0a61, 0x5570423, 0x767020d, 0x1cb0c5f, 0x4c70262, 0x1d104da, 0xb580b56, 0x4ad090e, 0x88705b9, 0xbbd070c, 0x3c60108, 0x46d06a8, 0x9ab0301, 0x96106f8, 0x3690169, 0x9b906d5, 0xa980c1b, 0x40908dc, 0x309011c, 0xb62ffff, 0xffffffff, 0xffffffff, 0xb0cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f201f1, 0xad30ad2, 0xb520b51, 0x8170816, 0x1570156, 0x70a0709, 0x2e102e0, 0x53e053d, 0x420041, 0x6a206a1, 0x6170616, 0x6aa06a9, 0x80007f, 0x7b207b1, 0x440043, 0xc370c36, 0x5320531, 0x7fd07fc, 0xb940b93, 0x9270926, 0x2ef02ee, 0xb860b85, 0x1940193, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x55e055d, 0x2bb02ba, 0x9f009ef, 0xab50ab4, 0x8290828, 0xb3c0b3b, 0xafe0afd, 0x1a301a2, 0x7c107c0, 0xb900b8, 0x9210920, 0x57a0579, 0x6470646, 0x380037, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x90008, 0x9420941, 0xd000cf, 0x7610760, 0xf700f6, 0x66f066e, 0x710070, 0xffffffff, 0x1710170, 0x8c008bf, 0xc150c14, 0x54c054b, 0xa700a6f, 0xadf0ade, 0x2d602d5, 0x910090f, 0xa060a05, 0xa290a28, 0x3c803c7, 0xc290c28, 0x8e208e1, 0x33d033c, 0x35d035c, 0x22f022e, 0x60005ff, 0x44c044b, 0xa350a34, 0x5680567, 0x8fa08f9, 0x25c025b, 0xadb0ada, 0x1140113, 0x6cf06ce, 0xbd70bd6, 0x7120711, 0x16f016e, 0x6c206c1, 0x3110310, 0x7050704, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x81cffff, 0x51d081d, 0x562051e, 0xc3d0c3c, 0x5d505d4, 0xa630a62, 0xb900b8f, 0x8d208d1, 0xffffffff, 0x58ffff, 0xc420059, 0xffffffff, 0xbd50bd4, 0x26c026b, 0xffff0826, 0x3e503e4, 0x85a0859, 0x4e004df, 0x4340433, 0xa8f0a8e, 0x5590558, 0x29a0299, 0x89a0899, 0x1330132, 0x7780777, 0x9e600c0, 0xa330bf8, 0xffff010a, 0x3810780, 0xc2c009d, 0x6450644, 0xa900a8, 0x7560755, 0x1550154, 0x59d059c, 0x2b002af, 0x88f088e, 0x4710470, 0x5600827, 0x7d20c63, 0x18d07d3, 0xffff018e, 0xffffffff, 0xffffffff, 0x31f031e, 0xffffffff, 0xffffffff, 0x33b033a, 0xbb70bb6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa99ffff, 0xffff0a9a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc2dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x46f062f, 0x39200ce, 0x8a20730, 0x9d90077, 0x3a6093c, 0xaad0bf3, 0x9590661, 0x363008d, 0x2140b25, 0xb1202f5, 0x9fc0726, 0x5ad014f, 0xc4b085c, 0x84305c5, 0x52804cd, 0x7d50a9c, 0x30f048b, 0x6ae03aa, 0x15908de, 0x70e0a49, 0x4b049b, 0x93109bb, 0x4d0c6d, 0x694033f, 0x2520a5a, 0xc330a8d, 0x950292, 0x7b00591, 0xabd0ba1, 0x7f70788, 0x2010574, 0x5000954, 0xaaf02ac, 0x3e3074b, 0x6110218, 0x8910c09, 0x37b063a, 0x39a06ef, 0x2d40151, 0x9d3071a, 0x8c10bca, 0x5fb0148, 0xb630846, 0xffff0b64, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x9f5ffff, 0x4b4069d, 0x35a0016, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa6dffff, 0x2870bb8, 0x601015a, 0x9f106a3, 0x7c20515, 0xc6607ea, 0x83c0152, 0x439053f, 0x59a0279, 0x3160426, 0xb3f0b6e, 0x1b0081e, 0x65e0964, 0xffff0490, 0xffffffff, 0xffffffff, 0xa6effff, 0x2880bb9, 0x602015b, 0x9f206a4, 0x7c30516, 0xc6707eb, 0x83d0153, 0x43a0540, 0x59b027a, 0x3170427, 0xb400b6f, 0x1b1081f, 0x65f0965, 0xffff0491, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7c80b1d, 0x61807d6, 0x86d0146, 0xa570b70, 0xbc009ff, 0x3040a46, 0x52b0541, 0x15c0854, 0x4ba00f8, 0x96a0695, 0x2f60052, 0x39d0797, 0x44302f8, 0x27d0596, 0xc56015e, 0x3b106d6, 0xb890b34, 0x4bc0805, 0x24f04c4, 0xc1c07fa, 0x7c90b1e, 0x61907d7, 0x86e0147, 0xa580b71, 0xbc10a00, 0x3050a47, 0x52c0542, 0x15d0855, 0x4bb00f9, 0x96b0696, 0x2f70053, 0x39e0798, 0x44402f9, 0x27e0597, 0xc57015f, 0x3b206d7, 0xb8a0b35, 0x4bd0806, 0x25004c5, 0xc1d07fb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xb980b01, 0x7b80869, 0x25705c0, 0xbcc0a42, 0xa71024b, 0x80e0c10, 0x4e3026f, 0x7da04c2, 0x61e035e, 0x7150370, 0x1d80c00, 0x73802a4, 0x2a90a55, 0x6b10420, 0x2b0312, 0x66a0978, 0xae007cc, 0x94a0ae2, 0xffffffff, 0xffffffff, 0xb990b02, 0x7b9086a, 0x25805c1, 0xbcd0a43, 0xa72024c, 0x80f0c11, 0x4e40270, 0x7db04c3, 0x61f035f, 0x7160371, 0x1d90c01, 0x73902a5, 0x2aa0a56, 0x6b20421, 0x2c0313, 0x66b0979, 0xae107cd, 0x94b0ae3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4a00924, 0x28b00ae, 0xbae0717, 0x2710123, 0x9eb0c0c, 0xffff00c1, 0x99c0642, 0x9a200c3, 0x8480892, 0x1600c58, 0x5ae08c7, 0x32e041a, 0x45e05dc, 0xffff02cd, 0x7dc0adc, 0x52d04b8, 0x6af0ae4, 0xffff03e8, 0x74202f0, 0x925ffff, 0xaf04a1, 0x718028c, 0x1240baf, 0xc0d0272, 0xc209ec, 0x643ffff, 0xc4099d, 0x89309a3, 0xc590849, 0x8c80161, 0x41b05af, 0x5dd032f, 0x2ce045f, 0xaddffff, 0x4b907dd, 0xae5052e, 0x3e906b0, 0x2f1ffff, 0xffff0743, 0xffffffff, 0x4ca0517, 0x16201aa, 0x8630c64, 0x5c201fe, 0x4240706, 0x4800620, 0xb43086b, 0x3320b03, 0xc6009b6, 0xd109b0, 0x7a1036e, 0xd9092a, 0x8f704a4, 0x1110a11, 0x7a70932, 0x830397, 0x56d021e, 0x36c0505, 0xb9c0b28, 0x4a2081a, 0x8cb0a09, 0x58904aa, 0x75a025d, 0x1d60002, 0xa930322, 0xffff06d0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4cb0518, 0x16301ab, 0x8640c65, 0x5c301ff, 0x4250707, 0x4810621, 0xb44086c, 0x3330b04, 0xc6109b7, 0xd209b1, 0x7a2036f, 0xda092b, 0x8f804a5, 0x1120a12, 0x7a80933, 0x840398, 0x56e021f, 0x36d0506, 0xb9d0b29, 0x4a3081b, 0x8cc0a0a, 0x58a04ab, 0x75b025e, 0x1d70003, 0xa940323, 0xffff06d1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f505ce, 0xc680820, 0x1da01c2, 0x52f04d1, 0x39f00e9, 0x8cf07a9, 0xa2600fe, 0x49c08d5, 0x1780bdd, 0x6f50903, 0x2fe0378, 0x6700980, 0xb220395, 0x8d30b74, 0x5a40492, 0x7270404, 0x1f605cf, 0xc690821, 0x1db01c3, 0x53004d2, 0x3a000ea, 0x8d007aa, 0xa2700ff, 0x49d08d6, 0x1790bde, 0x6f60904, 0x2ff0379, 0x6710981, 0xb230396, 0x8d40b75, 0x5a50493, 0x7280405, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xa4a008e, 0x34a0799, 0x44d027b, 0x4490652, 0x9bc0072, 0x5b0074c, 0x37c0012, 0xab80676, 0x4ef04b6, 0x1ae0836, 0x75e0334, 0x20a0b5f, 0x93d053b, 0xbb4073a, 0xa950b09, 0x54d0832, 0xa4b008f, 0x34b079a, 0x44e027c, 0x44a0653, 0x9bd0073, 0x5b1074d, 0x37d0013, 0xab90677, 0x4f004b7, 0x1af0837, 0x75f0335, 0x20b0b60, 0x93e053c, 0xbb5073b, 0xa960b0a, 0x54e0833, 0x43106bb, 0x94c005e, 0x97a0648, 0x4720027, 0x3a705ea, 0xc9, 0x89f07ba, 0x5520587, 0x60852, 0x7ce01b4, 0x48604e9, 0xb4f036a, 0x2930bc2, 0x5940187, 0xa44071b, 0xa7e0c6e, 0x18043f, 0x43206bc, 0x94d005f, 0x97b0649, 0x4730028, 0x3a805eb, 0x100ca, 0x8a007bb, 0x5530588, 0x70853, 0x7cf01b5, 0x48704ea, 0xb50036b, 0x2940bc3, 0x5950188, 0xa45071c, 0xa7f0c6f, 0x190440, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//5568 bytes -enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x1a0], [ 0x100, 0x2c0, 0x7a00], [ 0x3020100, 0x6050403, 0xa090807, 0xe0d0c0b, 0x3030303, 0x11100f03, 0x14141312, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x14141414, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0xf000e, 0x10010, 0x120011, 0x10013, 0x150014, 0x170016, 0x190018, 0x1b001a, 0x1c0001, 0x1e001d, 0x1f001f, 0x1f0020, 0x1f001f, 0x1f001f, 0x1f001f, 0x220021, 0x1f0023, 0x250024, 0x1f001f, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x260001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10027, 0x290028, 0x2b002a, 0x2d002c, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x2e0001, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1001f, 0x30002f, 0x310001, 0x330032, 0x350034, 0x370036, 0x390038, 0x3a0001, 0x3c003b, 0x3e003d, 0x40003f, 0x420041, 0x440043, 0x460045, 0x480047, 0x4a0049, 0x4c004b, 0x1f004d, 0x4f004e, 0x510050, 0x10001, 0x520001, 0x540053, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x55001f, 0x10001, 0x10001, 0x1f0056, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x10001, 0x1f0057, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x10001, 0x590058, 0x1f001f, 0x5b005a, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x5c0001, 0x10001, 0x10001, 0x5e005d, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x5f001f, 0x600001, 0x1f0061, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f0062, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x640063, 0x660065, 0x1f001f, 0x1f001f, 0x1f001f, 0x67001f, 0x690068, 0x1f006a, 0x1f006b, 0x6c001f, 0x6e006d, 0x1f001f, 0x1f001f, 0x1f006f, 0x70001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x10001, 0x10001, 0x10001, 0x10071, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x720001, 0x10073, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10074, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x750001, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x10001, 0x1f0076, 0x1f001f, 0x1f001f, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x770001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x780001, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x1f001f, 0x0, 0x0, 0x7fffffe, 0x7fffffe, 0x0, 0x4200400, 0xff7fffff, 0xff7fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffc3, 0x501f, 0x0, 0x0, 0x20, 0xbcdf0000, 0xffffd740, 0xfffffffb, 0xffffffff, 0xffbfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc03, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffff, 0x27fffff, 0xffffffff, 0x1ff, 0xbfff0000, 0xffff00b6, 0x787ff, 0x7ff0000, 0xffffffff, 0xfeffffff, 0xffffc000, 0xffffffff, 0xffffffff, 0x1fefffff, 0x9c00e1fe, 0xffff0000, 0xffffffff, 0xffffe000, 0xffffffff, 0xffffffff, 0x3ffff, 0xfffffc00, 0x43007ff, 0xfcffffff, 0x1fff, 0x1ffffff, 0xffff07ff, 0x7eff, 0xffffffff, 0xfff003ff, 0xffff03f8, 0xffffffff, 0xefffffff, 0xffe1dfff, 0xfffe000f, 0xfff99fef, 0xe3c5fdff, 0xb080599f, 0x1003000f, 0xfff987ee, 0xc36dfdff, 0x5e021987, 0x3f0000, 0xfffbbfee, 0xe3edfdff, 0x11bbf, 0x1e00000f, 0xfff99fee, 0xe3edfdff, 0xb0c0199f, 0x2000f, 0xd63dc7ec, 0xc3ffc718, 0x811dc7, 0x0, 0xfffddfff, 0xe3fffdff, 0x27601ddf, 0xf, 0xfffddfef, 0xe3effdff, 0x60601ddf, 0xe000f, 0xfffddfff, 0xe7ffffff, 0x80f05ddf, 0xfc00000f, 0xfc7fffee, 0x2ffbffff, 0xff5f807f, 0xc0000, 0xfffffffe, 0x7ffffff, 0x207f, 0x0, 0xfffff7d6, 0x3bffffaf, 0xf000205f, 0x0, 0x1, 0x0, 0xfffffeff, 0xfffe1fff, 0xfeffff0f, 0x1fffffff, 0x0, 0x0, 0xffffffff, 0xf97fffff, 0xffff0000, 0xffffffff, 0x3c00ffff, 0xffffffff, 0xffff20bf, 0xf7ffffff, 0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff, 0xff3dffff, 0xffffffff, 0x7ffffff, 0x0, 0xffff, 0xffffffff, 0xffffffff, 0x3f3fffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff9fff, 0x7fffffe, 0xffffffff, 0xffffffff, 0x1ffc7ff, 0x800fffff, 0xfffff, 0xfffff, 0xddfff, 0xffffffff, 0xffcfffff, 0x108001ff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1ffffff, 0xffffffff, 0xffff07ff, 0xffffffff, 0x3fffff, 0x7fffffff, 0x1ff0fff, 0xffff0000, 0x1f3fff, 0xffffffff, 0xffff0fff, 0x3ff, 0x0, 0xfffffff, 0xffffffff, 0x7fffffff, 0x1ffffe, 0x0, 0x80000080, 0x7001, 0x0, 0xffffffff, 0xffefffff, 0x1fef, 0x0, 0xffffffff, 0xfc00f3ff, 0xffffffff, 0x3ffbf, 0xffffffff, 0x7fffff, 0xfc00e000, 0x3fffffff, 0xffff01ff, 0xe7ffffff, 0x0, 0x46fde00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x1fff80, 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0x5fdfffff, 0xfcf1fdc, 0x1fdc1fff, 0x0, 0x0, 0x0, 0x80020000, 0x1fff0000, 0x0, 0x0, 0x0, 0x3e2ffc84, 0xf3ffbd50, 0x43e0, 0xffffffff, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffc00000, 0xffffffff, 0x3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc781f, 0xffffffff, 0xffff20bf, 0xffffffff, 0x80ff, 0x7fffff, 0x7f7f7f7f, 0x7f7f7f7f, 0xffffffff, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x1f3e03fe, 0xfffffffe, 0xffffffff, 0xe07fffff, 0xfffffffe, 0xffffffff, 0xf7ffffff, 0xffffffe0, 0xfffeffff, 0xffffffff, 0xffffffff, 0x7fff, 0xffffffff, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fff, 0x0, 0xffff0000, 0x3fffffff, 0xffff1fff, 0xc00, 0xffffffff, 0x8ff07fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0xff800000, 0xfffffffc, 0xffffffff, 0xffffffff, 0xfffff9ff, 0xffffffff, 0x3eb07ff, 0xfffc0000, 0xffffffbf, 0xff, 0xffffffff, 0xfffff, 0xffffffff, 0xffffffff, 0x2f, 0xe8fc0000, 0xfffffc00, 0xffff07ff, 0x7ffff, 0x1fffffff, 0xffffffff, 0xfff7ffff, 0x8000, 0x7c00ffff, 0xffffffff, 0x7fffff, 0x3fff, 0xfc7fffff, 0xffffffff, 0x7fffffff, 0x38000005, 0x3cffff, 0x7e7e7e, 0xffff7f7f, 0xf7ffffff, 0xffff03ff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff000f, 0xfffff87f, 0xfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xe0f8007f, 0x5f7ffdff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0xfff0000, 0x0, 0x0, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0x0, 0x7fffffe, 0x7fffffe, 0xffffffc0, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x0, 0xffffefff, 0xb7ffff7f, 0x3fff3fff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ffffff, 0x0, 0x0, 0xffffffff, 0x1fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0xffffffff, 0x1ffff, 0x0, 0xffffffff, 0xffffe000, 0xffff07ff, 0x7ffffff, 0x3fffffff, 0xffffffff, 0x3eff0f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffff0000, 0xff0fffff, 0xfffffff, 0xffffffff, 0xffff00ff, 0xffffffff, 0xf7ff000f, 0xffb7f7ff, 0x1bfbfffb, 0x0, 0x0, 0xffffffff, 0x7fffff, 0x3fffff, 0xff, 0xffffffbf, 0x7fdffff, 0x0, 0x0, 0xfffffd3f, 0x91bfffff, 0x3fffff, 0x7fffff, 0x7fffffff, 0x0, 0x0, 0x37ffff, 0x3fffff, 0x3ffffff, 0x0, 0x0, 0xffffffff, 0xc0ffffff, 0x0, 0x0, 0xfeeff06f, 0x3fffff, 0x0, 0x1fffffff, 0x1fffffff, 0x0, 0xfffffeff, 0x1f, 0xffffffff, 0x3fffff, 0x3fffff, 0x7ffff, 0x3ffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1ff, 0x0, 0xffffffff, 0x7ffff, 0xffffffff, 0x7ffff, 0xffffffff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x31bff, 0x0, 0x0, 0x1fffffff, 0xffff0080, 0x3f, 0xffff0000, 0x3, 0xffff0000, 0x1f, 0x7fffff, 0xffffffff, 0xffffffff, 0x3f, 0x3e0000, 0xffffffff, 0x1ffffff, 0xffff0004, 0x1ff, 0xffffffff, 0x7ffff, 0xffff00f0, 0x47ffff, 0xffffffff, 0xffffffff, 0x1400c01e, 0x0, 0xfffbffff, 0xc09fffff, 0x3, 0x0, 0xbfffbd7f, 0xffff01ff, 0xffffffff, 0x1ff, 0xfff99fef, 0xe3edfdff, 0xe081199f, 0xf, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x800007bb, 0x3, 0xffffffff, 0xffffffff, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7f3fffff, 0x3f000000, 0x0, 0xffffffff, 0x7fffffff, 0x11, 0x0, 0xffffffff, 0x13fffff, 0x0, 0x0, 0xe7ffffff, 0x7ff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x1ffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x80000000, 0xff6ff27f, 0x99bfffff, 0x7, 0x0, 0x0, 0xfffffcff, 0xfcffffff, 0x1a, 0xffffffff, 0x7fe7ffff, 0xffff0000, 0xffffffff, 0x20ffffff, 0xffff0000, 0xffffffff, 0x1ffffff, 0xfffffdff, 0x7f7fffff, 0x1, 0xfffc0000, 0xfffcffff, 0x7ffeff, 0x0, 0x0, 0xfffffb7f, 0xb47fffff, 0xcb, 0xfffffdbf, 0x17b7fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffff, 0xfffdffff, 0xc7ffffff, 0x1, 0x0, 0x0, 0x10000, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x1ffff, 0xffffffff, 0xffff, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x1ffffff, 0x7fffffff, 0xffff0000, 0xffffffff, 0x7fffffff, 0xffff0000, 0x3fff, 0xffffffff, 0xffff, 0xf, 0xe0fffff8, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffff87ff, 0xffffffff, 0xffff80ff, 0x0, 0x0, 0x3000b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6fef0000, 0xffffffff, 0x40007, 0x270000, 0xffff00f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fff07ff, 0x43ff01ff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff, 0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xf7fffffd, 0xf7ffffff, 0xffdfffff, 0xffdfffff, 0xffff7fff, 0xffff7fff, 0xfffffdff, 0xfffffdff, 0xff7, 0x0, 0x7fffffff, 0x7e0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9ffff7f, 0xffff07db, 0xffffffff, 0x3fff, 0x8000, 0x0, 0x0, 0x0, 0xffffffff, 0x3f801fff, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x3fff, 0xffffffff, 0xfff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xfff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fff6f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f, 0x0, 0xffffffff, 0xffffffff, 0x88f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffef, 0xaf7fe96, 0xaa96ea84, 0x5ef7f796, 0xffffbff, 0xffffbee, 0x0, 0x0, 0x0, 0xffff0000, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xffffffff, 0x3ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0003, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffff07ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3392 bytes -enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x110], [ 0x100, 0x1a0, 0x4800], [ 0x2020100, 0x4020302, 0x7020605, 0xa090802, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x202020b, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0xe, 0xf0000, 0x0, 0x100000, 0x120011, 0x140013, 0x160015, 0x0, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x190018, 0x0, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x1d001c, 0x1f001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x200000, 0x0, 0x21, 0x220000, 0x240023, 0x0, 0x0, 0x0, 0x25, 0x260000, 0x280027, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0x320031, 0x33, 0x350034, 0x370036, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0039, 0x0, 0x3b0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3d0000, 0x3e0000, 0x3f, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x3a0041, 0x42, 0x43, 0x0, 0x450044, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x460000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xbfffffff, 0xb6, 0x0, 0x7ff0000, 0x0, 0xfffff800, 0x10000, 0x0, 0x0, 0x9fc00000, 0x3d9f, 0x20000, 0xffff0000, 0x7ff, 0x0, 0x0, 0x1ffc0, 0x0, 0x200ff800, 0xfbc00000, 0x3eef, 0xe000000, 0x0, 0xff000000, 0x0, 0xfffffc00, 0xfffffffb, 0xf, 0xdc000000, 0xfeffff, 0xc, 0xe, 0xd0000000, 0x80399f, 0x4000000c, 0xe, 0xd0000000, 0x23987, 0x230000, 0xe, 0xd0000000, 0x3bbf, 0xfc00000c, 0xe, 0xd0000000, 0xe0399f, 0xc, 0x4, 0xc0000000, 0x803dc7, 0x0, 0x1f, 0xd0000000, 0x603ddf, 0xc, 0xe, 0xd0000000, 0x603ddf, 0x8000c, 0xf, 0xd8000000, 0x803ddf, 0xc, 0xe, 0x0, 0xff5f8400, 0xc0000, 0x0, 0x7f20000, 0x7f80, 0x0, 0x0, 0x1ff20000, 0x7f00, 0x0, 0x3000000, 0xc2a00000, 0x0, 0xfffe0000, 0xfeffe0df, 0x1fffffff, 0x40, 0x0, 0x0, 0x7ffff800, 0xc3c00000, 0x1e3f9d, 0x3c00bffc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c0000, 0x1c0000, 0xc0000, 0xc0000, 0x0, 0xfff00000, 0x200fffff, 0x0, 0xb800, 0x0, 0x0, 0x0, 0x60, 0x200, 0x0, 0x0, 0x0, 0xfff0fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf800000, 0x0, 0x7fe00000, 0x9fffffff, 0x0, 0xffff0000, 0x7fff, 0x0, 0x1f, 0xfff00000, 0x1f, 0xff800, 0x7, 0x3ffe, 0x0, 0xfffc0, 0x0, 0xfffff0, 0x0, 0x0, 0x0, 0x0, 0xfff70000, 0x39021ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0xfc00, 0x0, 0x0, 0x6000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff78000, 0xc0000000, 0x0, 0x0, 0x30000, 0x844, 0x10f8, 0x0, 0x0, 0x3, 0xfff00000, 0x3f, 0x8003ffff, 0x0, 0x3fc0, 0xfff80, 0x0, 0xf, 0xfff80000, 0x1, 0x20, 0x0, 0x7ffe00, 0x3008, 0x38000000, 0x0, 0xc19d0000, 0x2, 0x60f800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37f8, 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x7c00000, 0x0, 0x0, 0x0, 0x0, 0xf06e, 0x87000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x0, 0xe0000000, 0x0, 0x0, 0x1ffc0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x7, 0xff000000, 0x7f, 0x80190000, 0x7, 0x7ff0000, 0x4, 0x0, 0x7, 0x1fff80, 0x60, 0x80000, 0x7, 0xfff80000, 0xde01, 0x0, 0x0, 0x40fff000, 0x2, 0x0, 0x0, 0x0, 0x80000000, 0x7ff, 0xf, 0xd8000000, 0x80399f, 0x1f1fcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffe00000, 0x4000007f, 0x0, 0x0, 0xffff0000, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff3f8000, 0x30000001, 0x0, 0x0, 0xffff0000, 0x1, 0x0, 0x0, 0xfff800, 0x0, 0x0, 0xe0000000, 0xfff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fff000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x79bf0000, 0xd, 0x0, 0x0, 0x0, 0xfcfe0000, 0x11, 0x7fe, 0x7bf80000, 0xffe0080, 0x0, 0x3fffc00, 0x0, 0x0, 0x0, 0x0, 0xff7f8000, 0x0, 0x0, 0xfffc0000, 0x7ffeff, 0x0, 0x0, 0x0, 0xb47e0000, 0xbf, 0x0, 0xfb7c00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x780000, 0xb, 0xc7f00000, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fff81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f0000, 0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffe8000, 0xffffffff, 0x780ff, 0x0, 0x0, 0x30010, 0x0, 0x0, 0x0, 0x0, 0x60000000, 0x0, 0x0, 0x0, 0xffffffff, 0xffff3fff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf807e3e0, 0xfe7, 0x3c00, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf87fffff, 0xffffffff, 0x201fff, 0xf8000010, 0xfffe, 0x0, 0x0, 0xf9ffff7f, 0x7db, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x0, 0xf000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x7f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//2848 bytes -enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)([ 0x0, 0x40, 0x1a0], [ 0x100, 0x2c0, 0x2500], [ 0x2020100, 0x4020302, 0x7020605, 0x9080202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x40003, 0x50002, 0x20002, 0x70006, 0x60006, 0x90008, 0x6000a, 0x6000b, 0xc000c, 0x2000d, 0xe0005, 0x20002, 0x20002, 0x2000f, 0x20002, 0x20002, 0x100002, 0x110002, 0x2000e, 0x130012, 0x140002, 0xc, 0x20015, 0x20002, 0x20002, 0x20002, 0x170016, 0x190018, 0x20002, 0x20002, 0x1b001a, 0x20002, 0x20002, 0x1d001c, 0x20002, 0x20002, 0x20002, 0x20002, 0x1e0002, 0x20002, 0x20002, 0x20002, 0x2001f, 0x200002, 0x220021, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x60023, 0x20002, 0xc0024, 0x250017, 0x2000c, 0x40002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x2000e, 0x20002, 0x270026, 0x280002, 0x2a0029, 0x230002, 0x20002, 0x20002, 0x20002, 0x2c002b, 0x2e002d, 0x30002f, 0x320031, 0x330002, 0x20000, 0x20034, 0x360035, 0x40037, 0x390038, 0x40002, 0x20002, 0xc000c, 0x20002, 0x5000c, 0x2003a, 0x3b0002, 0x2000c, 0x20002, 0x20002, 0x2003c, 0x23000c, 0x20002, 0x3d000c, 0x20002, 0x20002, 0x20002, 0x20002, 0x2003e, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x50003, 0x2003f, 0x20002, 0x20002, 0x400002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x410002, 0x20042, 0x20002, 0x20002, 0x20002, 0x430002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20005, 0x40002, 0x20002, 0x40002, 0x20002, 0x20002, 0x20002, 0x440002, 0x2000c, 0x20002, 0x20002, 0x460045, 0x20047, 0x20002, 0x20002, 0x20002, 0x20048, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x40002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x20002, 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x720c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x3f0ffc0, 0x0, 0x0, 0x0, 0xfcffc0, 0x0, 0x0, 0x0, 0x7ffc0, 0x0, 0x0, 0x0, 0x7f00ffc0, 0x0, 0x0, 0x7f000000, 0x1ffffc0, 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0xfffff, 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ffffe00, 0x0, 0x0, 0x0, 0x1c000, 0x0, 0x0, 0x0, 0x3ff03ff, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x7ff0000, 0x0, 0x3ff03ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff03ff, 0x0, 0x0, 0x0, 0x0, 0x3f10000, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xfffffff, 0x0, 0x0, 0xfffffc00, 0x0, 0x0, 0x0, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000, 0x80, 0x70003fe, 0x0, 0x0, 0x3c0000, 0x0, 0x0, 0x0, 0x0, 0x3ff, 0xfffeff00, 0x0, 0x3ff, 0xfffe0000, 0x0, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x3f0000, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0x3ff0000, 0xffffff80, 0xfffff, 0xffffffff, 0x1ffffff, 0xc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffe, 0x0, 0xf, 0x402, 0x0, 0x0, 0x0, 0x3e0000, 0x0, 0x0, 0x0, 0xff000000, 0xfe000000, 0x0, 0xff80, 0x0, 0xf8000000, 0xfc00000, 0x0, 0x0, 0x0, 0x0, 0x30000000, 0xfffcffff, 0xffffffff, 0x0, 0x0, 0x1ff, 0x60000000, 0xe0000000, 0x0, 0x0, 0xf800, 0x0, 0x0, 0xff000000, 0xff000000, 0x0, 0xfe00, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc000000, 0x0, 0x0, 0x0, 0x7fffffff, 0xe0000000, 0x7f, 0x1e0000, 0x0, 0x0, 0x0, 0xfe0, 0x0, 0x0, 0x0, 0xfffc0000, 0xffff, 0x0, 0xffc00000, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0x1ffffe, 0x0, 0xfff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7ffff, 0x0, 0x0, 0xffff0000, 0x1fff, 0x0, 0x0, 0x1fffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fff, 0x0, 0x0, 0xfbff0000, 0x3, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffff, 0xfffff, 0x0, 0x0, 0x0, 0x1ffffff, 0x0, 0x0, 0xffffc000, 0xffffffff, 0x0, 0x0, 0xff80, 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xffffffff, 0x1eefff, 0x0, 0x0, 0xfffffffe, 0x3fffbfff, 0x0, 0x0, 0x1fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff0000]); -//3360 bytes -enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x100], [ 0x100, 0x180, 0x4900], [ 0x2020100, 0x4020302, 0x7020605, 0xa090802, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x20001, 0x30001, 0x50004, 0x70006, 0x10008, 0xa0009, 0xc000b, 0x1000d, 0xe0001, 0x1000f, 0x110010, 0x130012, 0x150014, 0x10016, 0x10001, 0x10017, 0x180001, 0x10001, 0x190001, 0x1a0001, 0x10001, 0x1c001b, 0x1001d, 0x1001e, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x1001f, 0x10020, 0x220021, 0x240023, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x250001, 0x270026, 0x280001, 0x290001, 0x2a0001, 0x10001, 0x2c002b, 0x2e002d, 0x10001, 0x30002f, 0x320031, 0x10033, 0x350034, 0x370036, 0x390038, 0x3b003a, 0x1003c, 0x3e003d, 0x10001, 0x10001, 0x1003f, 0x10001, 0x10001, 0x10001, 0x10001, 0x400001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x420041, 0x10001, 0x440043, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10045, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10046, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x470001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x8c00f7ee, 0xb8000001, 0x28000000, 0x0, 0x88c00882, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc000000, 0x0, 0x600, 0x40000000, 0x49, 0x180000, 0xe8003600, 0x0, 0x0, 0x3c00, 0x0, 0x0, 0x100000, 0x0, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3800000, 0x0, 0x7fff0000, 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10030, 0x0, 0x0, 0x0, 0x20000000, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x800000, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000, 0x0, 0x0, 0xc008000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17fff0, 0x3c000000, 0x0, 0x0, 0x20, 0x0, 0x61f0000, 0x0, 0x0, 0x0, 0xfc00, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x18000000, 0x0, 0x0, 0x3800, 0x0, 0x600000, 0x0, 0x0, 0x0, 0x0, 0x7700000, 0x0, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x3f7f, 0x0, 0x0, 0x0, 0x0, 0xfc000000, 0x60000001, 0x0, 0x0, 0x0, 0xf0000000, 0x0, 0xf8000000, 0x0, 0xc0000000, 0x0, 0x0, 0x800ff, 0x0, 0xffff0000, 0xffff00ff, 0x7ffbffef, 0x60000000, 0x6000, 0x0, 0x0, 0x0, 0xf00, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fff00, 0x0, 0x0, 0x60, 0xffc0, 0x0, 0x0, 0x0, 0x0, 0x1fffff8, 0x0, 0xf000000, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde000000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff7fff, 0x3ffcffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfff3ff0e, 0x20010000, 0x0, 0x0, 0x0, 0x1, 0x0, 0x8000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0xe000, 0x0, 0x0, 0x40080000, 0x0, 0x0, 0x0, 0xfc0000, 0x0, 0x0, 0x0, 0xf00000, 0x0, 0x0, 0xc000, 0x17000000, 0x0, 0xc000, 0x80000000, 0x0, 0x0, 0x0, 0xc0003ffe, 0x0, 0x0, 0x0, 0xf0000000, 0x0, 0x0, 0x0, 0xc0000000, 0x30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0xffff0000, 0xfff7ffff, 0xd0b, 0x0, 0x0, 0x0, 0x0, 0x8c00f7ee, 0xb8000001, 0xa8000000, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ff0000, 0x80000000, 0x0, 0x0, 0x0, 0x7f0000, 0x0, 0xfe000000, 0x0, 0x0, 0x1e000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x3e00000, 0x0, 0x3c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f80, 0x0, 0x0, 0xd8000000, 0x3, 0x0, 0x0, 0x0, 0xf, 0x300000, 0x0, 0x0, 0xe80021e0, 0x0, 0x0, 0x3f000000, 0x0, 0x0, 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x2c00f800, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffe, 0x0, 0x0, 0x0, 0xe, 0x1fff, 0x0, 0x2000000, 0x0, 0x0, 0x0, 0x70000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x80000000, 0x7f, 0x0, 0xdc000000, 0x7, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1800000, 0x0, 0x0, 0xfff8, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x1f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60000, 0x0, 0x0, 0x0, 0xc000, 0x0, 0x0, 0x0, 0x200000, 0x0, 0xf800000, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3424 bytes -enum symbolTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x100], [ 0x100, 0x180, 0x4b00], [ 0x3020100, 0x5030403, 0x7030306, 0xa090803, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x3030303, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0xf000e, 0x10010, 0x110001, 0x10001, 0x130012, 0x140001, 0x150001, 0x10001, 0x160001, 0x180017, 0x1a0019, 0x19001b, 0x1c0019, 0x1d0019, 0x1e0019, 0x1001f, 0x210020, 0x230022, 0x190024, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x250001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10026, 0x270001, 0x10028, 0x2a0029, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x2b0001, 0x2c0001, 0x2e002d, 0x2f0001, 0x10001, 0x10001, 0x10001, 0x10030, 0x10031, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xe0001, 0x10001, 0x10001, 0x10001, 0x320001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x330001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10034, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x350001, 0x370036, 0x390038, 0x10001, 0x3b003a, 0x190019, 0x1003c, 0x10001, 0x10001, 0x3d0001, 0x1003e, 0x10001, 0x10001, 0x10001, 0x10001, 0x40003f, 0x10041, 0x430042, 0x190044, 0x190019, 0x460045, 0x190047, 0x490048, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x70000810, 0x40000000, 0x50000001, 0x0, 0x113d37c, 0x800000, 0x800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffc003c, 0xffffafe0, 0x0, 0x0, 0x0, 0x200000, 0x30, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe000, 0x0, 0x0, 0x0, 0xc9c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40000000, 0x60000200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0400000, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x7f80000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x2000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfce8000e, 0x1500000, 0x0, 0x0, 0x0, 0xc0000000, 0x1e0dfbf, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc0000000, 0xffffffff, 0x0, 0x0, 0x0, 0x1ff007fe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000, 0xe000e003, 0x6000e000, 0x0, 0x0, 0x40010, 0x1c000000, 0x1c00, 0xffffffff, 0x1, 0x0, 0xc1d0037b, 0xc0042af, 0xbc1f, 0x0, 0xffff0c00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffff0ff, 0xfffff9ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7f, 0x7ff, 0x0, 0xf0000000, 0xffffffff, 0xffffffff, 0x3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff, 0xfff00000, 0xffffffff, 0xffffff9f, 0xffff003f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe000007, 0xffffffff, 0xf0ffffff, 0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcfffff, 0xffbfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e0, 0x0, 0x0, 0x30000, 0x0, 0xfbffffff, 0xffffffff, 0xffffffff, 0xfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xfff0000, 0xc0010, 0xc0c00001, 0x0, 0x0, 0x18000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffc30000, 0x0, 0xffffffff, 0xf, 0x7fffffff, 0xfffffc00, 0x100ff, 0xffffffff, 0xfffffc00, 0x1ffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x7f, 0x0, 0x7fffff, 0x3, 0x0, 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x3c00f00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0xc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x200, 0x0, 0x0, 0x0, 0xfffc0000, 0x7, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x8000, 0xf0000000, 0x0, 0x0, 0x0, 0x274, 0x0, 0x0, 0x0, 0x0, 0x70000810, 0x40000000, 0x50000001, 0x0, 0x0, 0x0, 0x0, 0x30007f7f, 0x0, 0xff800000, 0x0, 0xfe000000, 0x1fff73ff, 0x1, 0xffff0000, 0x1fffffff, 0x0, 0x0, 0x0, 0x1800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffe00000, 0x3ffff, 0x0, 0xf0000000, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xffffffff, 0xfffffe7f, 0xffffffff, 0x1c1f, 0xfffff018, 0xffffc3ff, 0xffffffff, 0x7ff, 0xffffffff, 0xffffffff, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000002, 0x8000000, 0x200000, 0x200000, 0x8000, 0x8000, 0x200, 0x200, 0x8, 0x0, 0x0, 0x7800000, 0x0, 0xffdfe000, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11000, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30000, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0xfffe7fff, 0xfffefffe, 0x3fffff, 0xffffe000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fff, 0x0, 0xffffffc0, 0xffff0007, 0xfffffff, 0x301ff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf0ffffff, 0x1fff1fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf87fffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x10fff, 0xffff0fff, 0xffffffff, 0x3ff00ff, 0xffffffff, 0xffff00ff, 0x33fff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xfffff, 0x1fff3fff, 0xffff01ff, 0xbfffffff, 0xfffc03f, 0x1ff01ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7ffff, 0xffffffff, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//6048 bytes -enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x40, 0x1a0], [ 0x100, 0x2c0, 0x8900], [ 0x2020100, 0x5040302, 0x9080706, 0xd0c0b0a, 0x2020202, 0x100f0e02, 0x13131211, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131314, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x13131313, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x20001, 0x30001, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0x1000e, 0x10000f, 0x10001, 0x120011, 0x140013, 0x160015, 0x10017, 0x180001, 0x1a0019, 0x10001, 0x1001b, 0x10001, 0x10001, 0x1c0001, 0x1e001d, 0x20001f, 0x220021, 0x10023, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10024, 0x260025, 0x280027, 0x2a0029, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x2b0001, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x1002c, 0x2e002d, 0x2f0001, 0x310030, 0x330032, 0x350034, 0x370036, 0x380001, 0x3a0039, 0x3c003b, 0x3e003d, 0x40003f, 0x420041, 0x440043, 0x460045, 0x480047, 0x4a0049, 0x4c004b, 0x4e004d, 0x50004f, 0x10001, 0x510001, 0x530052, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x54002c, 0x10001, 0x10001, 0x2c0055, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x10001, 0x2c0056, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x10001, 0x580057, 0x2c002c, 0x5a0059, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x5b0001, 0x10001, 0x10001, 0x5d005c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x5e002c, 0x5f0001, 0x2c0060, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c0061, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x62002c, 0x640063, 0x660065, 0x680067, 0x6a0069, 0x10001, 0x2c006b, 0x2c002c, 0x6c002c, 0x6e006d, 0x2c006f, 0x2c0070, 0x71002c, 0x730072, 0x2c002c, 0x750074, 0x2c0076, 0x780077, 0x10079, 0x10001, 0x7b007a, 0x1007c, 0x7e007d, 0x2c002c, 0x2c002c, 0x10001, 0x10001, 0x10001, 0x1007f, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x800001, 0x10081, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10082, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x830001, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x10001, 0x2c0084, 0x2c002c, 0x2c002c, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x850001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x860001, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x87002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x2c002c, 0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdfff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffff, 0xfe7fffff, 0xffffffff, 0xfffee7ff, 0xffffffff, 0xffff00ff, 0x1f87ff, 0xefffffc0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffe7ff, 0xffffffff, 0xffffffff, 0x3ffff, 0xffffffff, 0xe7ffffff, 0xffffffff, 0x7fff3fff, 0x4fffffff, 0xffff07ff, 0xff007fff, 0xffffffff, 0xffffffff, 0xfffffffb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x7fffffcf, 0xfff987ee, 0xd36dfdff, 0x5e023987, 0x7fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf, 0xfff99fee, 0xf3edfdff, 0xb0e0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0, 0xfffddfff, 0xf3fffdff, 0x27603ddf, 0xff80ffcf, 0xfffddfff, 0xf3effdff, 0x60603ddf, 0xeffcf, 0xfffddfff, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffee, 0x2ffbffff, 0xff5f847f, 0x1cffc0, 0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0xfffff7d6, 0x3fffffaf, 0xf3ff7f5f, 0x0, 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffe1fff, 0xfeffffff, 0xdfffffff, 0x7ffdfff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff20bf, 0xffffffff, 0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff, 0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x3ffffff, 0xffffffff, 0xffffffff, 0x3f3fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0x1ffffff, 0x803fffff, 0x7fffff, 0xfffff, 0xddfff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x3ff03ff, 0x3ffbfff, 0xffffffff, 0xffffffff, 0x1ffffff, 0xffffffff, 0xffff07ff, 0xffffffff, 0x3fffff, 0x7fffffff, 0xfff0fff, 0xfffffff1, 0x1f3fff, 0xffffffff, 0xffff0fff, 0xc7ff03ff, 0xffffffff, 0xcfffffff, 0xffffffff, 0x7fffffff, 0x9fffffff, 0x3ff03ff, 0xffff3fff, 0x7fff, 0x0, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf00fffff, 0xffffffff, 0xf8ffffff, 0xffffe3ff, 0xffffffff, 0xffff01ff, 0xe7ffffff, 0xffff00ff, 0x7ffffff, 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff, 0xffff07ff, 0xffff80ff, 0xffffffff, 0xfff30000, 0x1fff7fff, 0xffffffff, 0xffff0001, 0x1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7f, 0x7ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffcfffff, 0xffbfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe0fffff, 0xffffffff, 0xffff20bf, 0xffffffff, 0x800180ff, 0x7fffff, 0x7f7f7f7f, 0x7f7f7f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0, 0xfbffffff, 0xffffffff, 0xffffffff, 0xfffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xfff0000, 0xffffffff, 0xffffffff, 0xfffffffe, 0xffffffff, 0xfe7fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffe0, 0xfffeffff, 0xffffffff, 0xffffffff, 0xffff7fff, 0xffffffff, 0xffffffff, 0xffff000f, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff1fff, 0xffffffff, 0xffff007f, 0xffffffff, 0xffffffff, 0xfff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3eb07ff, 0xfffc0000, 0xffffffff, 0x3ff1fff, 0xffffffff, 0xffffff, 0xffffffff, 0xffffffff, 0x3ffc03f, 0xffffffff, 0xffffffff, 0xffffffff, 0x800fffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0xc3ffbfff, 0x7fffffff, 0xffffffff, 0x7fffff, 0xf3ff3fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf8000007, 0x7fffff, 0x7e7e7e, 0xffff7f7f, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ff3fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff000f, 0xfffff87f, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80007, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcffff, 0xffffffff, 0x80ff, 0xffff0000, 0x3ffffff, 0xffffffff, 0xfff7ffff, 0xffdf0f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x30007f7f, 0xffffefff, 0xb7ffff7f, 0x3fff3fff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ffffff, 0xffffff87, 0xff8fffff, 0xffffffff, 0xffffffff, 0x1fff7fff, 0x1, 0xffff0000, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0xffffffff, 0x1ffff, 0xfffffff, 0xffffffff, 0xffffe00f, 0xffff07ff, 0x7ffffff, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffff03ff, 0xff0fffff, 0xfffffff, 0xffffffff, 0xffff00ff, 0xffffffff, 0xf7ff800f, 0xffb7f7ff, 0x1bfbfffb, 0x0, 0x0, 0xffffffff, 0x7fffff, 0x3fffff, 0xff, 0xffffffbf, 0x7fdffff, 0x0, 0x0, 0xfffffd3f, 0x91bfffff, 0xffbfffff, 0xffffffff, 0x7fffffff, 0xff80, 0x0, 0xf837ffff, 0x8fffffff, 0x83ffffff, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xfffcffff, 0xffffffff, 0xfeeff06f, 0x873fffff, 0x1ff01ff, 0xffffffff, 0xffffffff, 0x0, 0xffffffff, 0x7ff87f, 0xffffffff, 0xfe3fffff, 0xff3fffff, 0xff07ffff, 0x1e03ffff, 0xfe00, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1ff, 0x0, 0xffffffff, 0x7ffff, 0xffffffff, 0xfc07ffff, 0xffffffff, 0x3ff00ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffff, 0xffffffff, 0x33bff, 0x0, 0xe0000000, 0xffffffff, 0xffff00ff, 0x3ffffff, 0xffff0000, 0x3ff, 0xffff0000, 0xfff, 0x7fffff, 0xffffffff, 0xffffffff, 0xfffc3fff, 0x803fffff, 0xffffffff, 0xdfffffff, 0xffff0007, 0x3ff01ff, 0xffffffff, 0xffdfffff, 0xffff00ff, 0x7fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1ffffe, 0xfffbffff, 0xffffffff, 0x3, 0x0, 0xbfffbd7f, 0xffff03ff, 0xffffffff, 0x3ff07ff, 0xfff99fef, 0xfbedfdff, 0xe081399f, 0x1f1fcf, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xefffffff, 0x3, 0xffffffff, 0xffffffff, 0x3ff00ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xff3fffff, 0x3fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3ff001f, 0x1fff, 0xffffffff, 0x3ffffff, 0x3ff, 0x0, 0xe7ffffff, 0xffff0fff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x8007ffff, 0xff6ff27f, 0xf9bfffff, 0x3ff007f, 0x0, 0x0, 0xfffffcff, 0xfcffffff, 0x1f, 0xffffffff, 0xffffffff, 0xffff00ff, 0xffffffff, 0xffffffff, 0xffff0007, 0xffffffff, 0x1ffffff, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffdff, 0xff7fffff, 0xffff003f, 0xffff1fff, 0xfffcffff, 0x7ffeff, 0x0, 0x0, 0xfffffb7f, 0xb47fffff, 0x3ff00ff, 0xfffffdbf, 0x1fb7fff, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1ffffff, 0xfffdffff, 0xc7ffffff, 0x3ffffff, 0x0, 0x0, 0x10000, 0xffffffff, 0x8003ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f7fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x7ffff, 0xffffffff, 0xffff, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x1ffffff, 0x7fffffff, 0xffffc3ff, 0xffffffff, 0x7fffffff, 0xffff03ff, 0x3f3fff, 0xffffffff, 0xffffffff, 0xfbff003f, 0xe0fffffb, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x7ffffff, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffff87ff, 0xffffffff, 0xffff80ff, 0x0, 0x0, 0x3001f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6fef0000, 0xffffffff, 0x40007, 0x270000, 0xffff00f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fff07ff, 0xf3ff01ff, 0x0, 0x0, 0x0, 0xffffffff, 0xffff3fff, 0xffff007f, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xffffffff, 0xfffffe7f, 0xffffffff, 0xf807ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ff, 0xffffffff, 0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0xfffff, 0xfffff, 0xffffffff, 0xffffffff, 0x7fffff, 0x1ffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff, 0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf8000fff, 0xfffe, 0x0, 0x0, 0x7fffffff, 0x7e0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9ffff7f, 0xffff07db, 0xffffffff, 0x3fff, 0x8000, 0x0, 0x0, 0x0, 0xffffffff, 0x3fff1fff, 0xc3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x7fff, 0xffffffff, 0x83ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fff6f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fff9f, 0x0, 0xffffffff, 0xffffffff, 0xc3ff0fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xffffffff, 0x1fffff, 0x0, 0x0, 0xfffffffe, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffef, 0xaf7fe96, 0xaa96ea84, 0x5ef7f796, 0xffffbff, 0xffffbee, 0x0, 0x30000, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0xfffe7fff, 0xfffefffe, 0x3fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fff, 0x0, 0xffffffc0, 0xffff0007, 0xfffffff, 0x301ff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf0ffffff, 0x1fff1fff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf87fffff, 0xffffffff, 0xffffffff, 0x3ffffff, 0x10fff, 0xffff0fff, 0xffffffff, 0x3ff00ff, 0xffffffff, 0xffff00ff, 0x33fff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xfffff, 0x1fff3fff, 0xffff01ff, 0xbfffffff, 0xfffc03f, 0x1ff01ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff7ffff, 0xffffffff, 0x7ff, 0x3ff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xffffffff, 0x3ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0003, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1, 0x3fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffff07ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//4784 bytes -enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)([ 0x0, 0x20, 0x98, 0x290], [ 0x80, 0xf0, 0x3f0, 0x4380], [ 0x3020100, 0x7060504, 0x9080101, 0xb0b0b0a, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0b, 0xb0b0b0c, 0xd010101, 0xd010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xb000a, 0xd000c, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xe000d, 0xd000f, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0x10000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0x120011, 0x140013, 0x160015, 0x180017, 0x1a0019, 0x1c001b, 0x1e001d, 0x1f000d, 0x1d001d, 0x20001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x220021, 0xd000d, 0xd000d, 0x23000d, 0x24000d, 0x1d001d, 0x1d001d, 0x1d001d, 0x25001d, 0x1d0026, 0x27001d, 0x1d001d, 0x28001d, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0x320031, 0x1d0033, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0x34000d, 0xd000d, 0x35000d, 0xd0036, 0xd000d, 0x37000d, 0xd000d, 0xd000d, 0xd000d, 0x1d0038, 0x1d001d, 0x1d0039, 0xd000d, 0xd000d, 0xd003a, 0xd000d, 0x1d003b, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d003c, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0x1d001d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0x3d000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0xd000d, 0x3d000d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10000, 0x2, 0x0, 0x0, 0x40003, 0x60005, 0x0, 0x0, 0x80007, 0xa0009, 0xc000b, 0xd, 0x0, 0xf000e, 0x110010, 0x130012, 0x150014, 0x170016, 0x190018, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x230022, 0x240000, 0x260025, 0x0, 0x270000, 0x0, 0x0, 0x280000, 0x2a0029, 0x2c002b, 0x2e002d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30002f, 0x320031, 0x330000, 0x30002d, 0x350034, 0x370036, 0x390038, 0x3b003a, 0x3d003c, 0x3e0000, 0x3f0000, 0x410040, 0x430042, 0x0, 0x0, 0x0, 0x0, 0x450044, 0x470046, 0x480000, 0x4a0049, 0x0, 0x4b, 0x0, 0x0, 0x0, 0x0, 0x4d004c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e0000, 0x4f, 0x0, 0x500000, 0x520051, 0x540053, 0x550000, 0x570056, 0x0, 0x580000, 0x590000, 0x4, 0x5a, 0x5c005b, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f005e, 0x0, 0x0, 0x60, 0x610000, 0x0, 0x620000, 0x610063, 0x640000, 0x650000, 0x660000, 0x680067, 0x690000, 0x38006a, 0x6b0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c005c, 0x0, 0x0, 0x0, 0x0, 0x6d0000, 0x6e0000, 0x70006f, 0x710000, 0x0, 0x0, 0x0, 0x730072, 0x74002d, 0x750000, 0x59, 0x770076, 0x790078, 0x7a0000, 0x7b, 0x7d007c, 0x7e007e, 0x7f002f, 0x810080, 0x830082, 0x0, 0x850084, 0x870086, 0x7e0088, 0x0, 0x0, 0x890067, 0x7e008a, 0x4f008b, 0x8d008c, 0x7e008e, 0x72008f, 0x910090, 0x930092, 0x950094, 0x7e0096, 0x970000, 0x990098, 0x7e009a, 0x7e007e, 0x9b007e, 0x9d009c, 0x9e0086, 0xa0009f, 0xa10000, 0xa20000, 0xa30046, 0xa40000, 0xa600a5, 0xa800a7, 0xaa00a9, 0x7e007e, 0xab0000, 0xac0000, 0x7e007e, 0x5500ad, 0xae0000, 0xb000af, 0xb200b1, 0x7e007e, 0x7e00b3, 0xb500b4, 0xb700b6, 0xb900b8, 0xba0000, 0x3000bb, 0x7e00b0, 0x7e007e, 0xbd00bc, 0x7e00be, 0xc000bf, 0x7e00c1, 0x7e007e, 0xc2007e, 0x6e00c3, 0xc500c4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e006e, 0xc60000, 0x0, 0xc70000, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x9800c8, 0xc90000, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x0, 0x0, 0x0, 0x0, 0xb20000, 0x7e007e, 0x7e007e, 0x7e007e, 0x0, 0x0, 0x0, 0x0, 0xca0030, 0xcb0076, 0xcc0000, 0x7e00cd, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e, 0x7e00ce, 0xcf0000, 0xd100d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x610000, 0x0, 0xc90000, 0x7e0097, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0xd2007e, 0x0, 0x0, 0xd400d3, 0x0, 0x0, 0xb30000, 0x7e007e, 0x7e007e, 0xd50000, 0x7e00d6, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x5f006d, 0xc70000, 0x0, 0x350000, 0xd7, 0xd80000, 0xd90000, 0xda007e, 0xdb0000, 0x7e007e, 0xdc0000, 0xde00dd, 0xe000df, 0x0, 0x0, 0xe1, 0x0, 0xe20000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e00e3, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e00e4, 0x7e007e, 0xe600e5, 0x7e00e7, 0xe900e8, 0x7e007e, 0x7e007e, 0xeb00ea, 0x7e007e, 0x7e007e, 0x7e007e, 0xec007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0xed007e, 0x0, 0xee0000, 0xef0000, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0xf0007e, 0x7e00f1, 0x7e00f2, 0x7e007e, 0xf400f3, 0xf600f5, 0x7e007e, 0x7e007e, 0x38, 0xf800f7, 0x0, 0xf900e6, 0xfb00fa, 0x7e007e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc0000, 0xfd0000, 0xfe0000, 0xff004b, 0x7e0100, 0x0, 0x0, 0x1010000, 0x1030102, 0x0, 0x1050104, 0x0, 0x0, 0x0, 0x0, 0x0, 0x920000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x0, 0x106, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x107, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1080000, 0x0, 0x0, 0x0, 0x0, 0x7e0055, 0x7e007e, 0x7e007e, 0x7e007e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1090000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e010a, 0x10b, 0x7e007e, 0x0, 0x10a0000, 0x7e007e, 0x7e007e, 0x7e007e, 0x7e007e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10c0000, 0x0, 0x0, 0x0, 0x3000000, 0x280f, 0x4, 0x0, 0x10000, 0x1800000, 0x0, 0x11800, 0x0, 0xff00, 0xffe07800, 0x4000, 0x0, 0x1800, 0x0, 0x0, 0xfffc0000, 0x0, 0x18000000, 0x0, 0x8000c000, 0xb0000000, 0xf800, 0xfc8000, 0x0, 0x66010, 0xc3a0200, 0x4f7f8660, 0x80000030, 0x67811, 0x2c920200, 0xa1fdc678, 0xff80003f, 0x44011, 0xc120200, 0xfffec440, 0x1fc0030, 0x66011, 0xc120200, 0x4f1fc660, 0xff000030, 0x29c23813, 0x3c0038e7, 0xff7ec238, 0xf800003f, 0x22000, 0xc000200, 0xd89fc220, 0x7f0030, 0x22000, 0xc100200, 0x9f9fc220, 0xfff10030, 0x22000, 0x0, 0xf0220, 0x30, 0x3800011, 0xd0040000, 0xa07b80, 0xffe3003f, 0x1, 0x78000000, 0xf0000000, 0xffffffff, 0x829, 0xc0000050, 0xc0080a0, 0xffffffff, 0x100, 0x1e000, 0x1000000, 0x20000000, 0xf8002000, 0xffffffff, 0xdf40, 0x0, 0xc280c200, 0x0, 0xc200, 0x80c20000, 0x8000c2, 0x0, 0xc20000, 0x0, 0x18000000, 0xe0000000, 0xfc000000, 0x0, 0x0, 0xc0c00000, 0xe0000000, 0x0, 0x0, 0xfe000000, 0x7fc00000, 0xff800000, 0xfff00000, 0xfff22000, 0xc0000000, 0xfc00fc00, 0x0, 0xf800, 0x0, 0xffc00000, 0x80000000, 0xf000f000, 0xe, 0xffe0c000, 0x0, 0xf000, 0x3800fc00, 0x0, 0x30000000, 0x0, 0x80000000, 0x60000000, 0xfc00fc00, 0xc000, 0xffff8000, 0xffffffff, 0xe000, 0x80000000, 0x0, 0xff00000, 0x0, 0x7000000, 0x1c00, 0x0, 0xfe00, 0x18000000, 0xff00, 0xf8000000, 0xc0c00000, 0x0, 0x5500c0c0, 0xc0000000, 0x0, 0x200000, 0x10300020, 0x80230000, 0x0, 0xc0020, 0xe0008000, 0x0, 0xfffe, 0xfffe0000, 0xf000, 0x0, 0x0, 0xffffff80, 0xfffff800, 0x0, 0x0, 0x300000, 0x400000, 0x0, 0x0, 0x1f00000, 0x0, 0xdf40, 0x0, 0x7ffe7f00, 0xff800000, 0x80808080, 0x80808080, 0x0, 0xc0000000, 0xffffffff, 0x4000000, 0x0, 0x0, 0xfff00000, 0xffc00000, 0xf000ffff, 0x1, 0x0, 0x1f, 0x10000, 0x8000, 0x0, 0x0, 0xfff0, 0x80000000, 0x0, 0xe000, 0x0, 0xff80, 0x0, 0x0, 0xfffff000, 0x0, 0xff000000, 0xfc14f800, 0x3ffff, 0x0, 0xfc00e000, 0xfc003fc0, 0x0, 0x7ff00000, 0xe0000000, 0x3c004000, 0x80000000, 0x0, 0xff800000, 0xc00c000, 0x0, 0x7fffff8, 0xff800000, 0xff818181, 0x8080, 0x0, 0xfc00c000, 0x780, 0xf0000000, 0x0, 0xc000, 0xfc000000, 0xffffffff, 0x1f07ff80, 0xa0800000, 0x24, 0x0, 0x7fff8, 0x0, 0x30000, 0x0, 0xffff7f00, 0xffff, 0x80000, 0x20f080, 0x0, 0x60000000, 0x0, 0x80000000, 0xe3030303, 0xc1ff8080, 0x1000, 0x48000080, 0xc000c000, 0xffffffff, 0x0, 0xf8000000, 0x78, 0x700000, 0xe0008000, 0xfffffffe, 0xffff, 0xc0000000, 0xffffffff, 0xffffffff, 0xfffe0000, 0xf0000000, 0x0, 0x1ff0, 0xf800, 0xf8000000, 0x40000000, 0x0, 0xffc000f0, 0xffffffff, 0xc0000000, 0xfc00, 0xf00000, 0xf0000000, 0x0, 0xff00, 0x0, 0x8007ff0, 0x480800, 0xe4040004, 0xffc00000, 0xffffff00, 0x40, 0xf8020000, 0x2c0, 0x6e400000, 0x80000000, 0xffff007f, 0xffffffff, 0x7c80000, 0x70000000, 0x7c000000, 0x0, 0xf000000, 0x1100f90, 0x78c00000, 0xfe00fe00, 0x0, 0x0, 0xffffffff, 0x0, 0xff800780, 0x0, 0x1c00000, 0xc00000, 0xf80000, 0xe1fc0000, 0xffff01ff, 0xfffffe00, 0xffffffff, 0x0, 0xfff80000, 0x0, 0x3f80000, 0x0, 0xfc00ff00, 0xffffffff, 0x80000000, 0x0, 0xfffcc400, 0xffffffff, 0x1fffffff, 0xfc000000, 0xffff, 0xfffffc00, 0xffff, 0xfffff000, 0xff800000, 0x3c000, 0x7fc00000, 0xdff8, 0xfc00fe00, 0xff00, 0xff800000, 0x0, 0xffe00001, 0x40000, 0x0, 0xfffffffc, 0xffffffff, 0x40004280, 0xfc00, 0x0, 0xfc00f800, 0x66010, 0x4120200, 0x1f7ec660, 0xffe0e030, 0x10000000, 0xfffffffc, 0xfc00ff00, 0xffffffff, 0x0, 0xc00000, 0xfc00ffe0, 0xffffe000, 0x0, 0xfc000000, 0xfffffc00, 0xffffffff, 0x18000000, 0xf000, 0xffffff80, 0xffffffff, 0x0, 0xf0000000, 0xffffffff, 0x0, 0x0, 0x7ff80000, 0x900d80, 0x6400000, 0xfc00ff80, 0xffffffff, 0xffffffff, 0x300, 0x3000000, 0xffffffe0, 0xff00, 0x0, 0x0, 0xfff8, 0x200, 0x800000, 0xffc0, 0xe000, 0x30000, 0xff800100, 0x480, 0x4b800000, 0xfc00ff00, 0x240, 0xfe048000, 0xfffffc00, 0xffffffff, 0xfe000000, 0x20000, 0x38000000, 0xffffffff, 0xfffeffff, 0x0, 0x7ffc0000, 0x0, 0xffe08000, 0xfffffff0, 0xffffffff, 0xffff, 0x0, 0xffc00000, 0xffffffff, 0x80000000, 0x3c00, 0xfc00, 0xffc0c000, 0x400ffc0, 0x1f000004, 0xffff0000, 0xffffffff, 0xf8000000, 0xffffffff, 0x7800, 0x0, 0x7f00, 0xffffffff, 0xffffffff, 0xfffcffe0, 0xffffffff, 0x9010ffff, 0x0, 0xfffbfff8, 0xffd8ffff, 0xff0f, 0x0, 0xe000f800, 0xc00fe00, 0xfffffff0, 0x0, 0x180, 0x0, 0xfffff800, 0xffffffc0, 0xffffffff, 0xfff00000, 0xfff00000, 0xff800000, 0xfe000000, 0x200000, 0x0, 0x20000000, 0x1400219b, 0x10, 0x0, 0x20201840, 0x84000000, 0x203a0, 0x0, 0x0, 0xc0, 0x3000, 0x0, 0x7fff000, 0xffff0001, 0x80000000, 0xfffff81f, 0x6000080, 0xf824, 0x0, 0xffffc000, 0xffff7fff, 0xffffffff, 0x0, 0xc000e000, 0xffff3c00, 0xffffffff, 0xffff, 0xffff8000, 0x0, 0x7c000000, 0xffff, 0xfc000000, 0xffffffff, 0x80009080, 0xff800060, 0xffffffff, 0x3c00f000, 0xffffffff, 0xffffffff, 0x1ffff, 0x0, 0xffe00000, 0x1, 0xc0000000, 0x10, 0xf5080169, 0x5569157b, 0xa1080869, 0xf0000400, 0xf0000411, 0xffffffff, 0xfffcffff, 0xfff00000, 0x18000, 0x10001, 0xffc00000, 0xffffffff, 0x3f, 0xfff8, 0xf0000000, 0xfffcfe00, 0xffffffc0, 0xf000000, 0xe000e000, 0x0, 0x7800000, 0xfc000000, 0xfffef000, 0xfc00ff00, 0x0, 0xff00, 0xfffcc000, 0xfff00000, 0xe000c000, 0xfe00, 0x40000000, 0xf0003fc0, 0xfe00fe00, 0x80000, 0x0, 0xfffff800, 0xfc00ffff, 0xc0000000, 0x0, 0x0, 0xfffc, 0x0, 0xfffffffe, 0xf800, 0x0, 0x0, 0xffff0000, 0xfffffffd, 0x0, 0x0, 0xc0000000, 0x0, 0xc0000000]); -enum MAX_SIMPLE_LOWER = 1433; -enum MAX_SIMPLE_UPPER = 1450; -enum MAX_SIMPLE_TITLE = 1454; -//10496 bytes -enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xf80], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x150000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x180000, 0x19, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x0, 0x0, 0x220000, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x240000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0000, 0x2b, 0x2d002c, 0x2f002e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x300000, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x330000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x350034, 0x360000, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c003b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5aaffff, 0x1c001b, 0x1e001d, 0x20001f, 0x220021, 0x240023, 0x260025, 0x280027, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0xffff0031, 0x330032, 0x350034, 0x370036, 0x390038, 0x3affff, 0x3bffff, 0x3cffff, 0x3dffff, 0x3effff, 0x3fffff, 0x40ffff, 0x41ffff, 0x42ffff, 0x43ffff, 0x44ffff, 0x45ffff, 0x46ffff, 0x47ffff, 0x48ffff, 0x49ffff, 0x4affff, 0x4bffff, 0x4cffff, 0x4dffff, 0x4effff, 0x4fffff, 0x50ffff, 0x51ffff, 0x5205ac, 0x53ffff, 0x54ffff, 0x55ffff, 0xffffffff, 0xffff0056, 0xffff0057, 0xffff0058, 0xffff0059, 0xffff005a, 0xffff005b, 0xffff005c, 0x5c9005d, 0x5effff, 0x5fffff, 0x60ffff, 0x61ffff, 0x62ffff, 0x63ffff, 0x64ffff, 0x65ffff, 0x66ffff, 0x67ffff, 0x68ffff, 0x69ffff, 0x6affff, 0x6bffff, 0x6cffff, 0x6dffff, 0x6effff, 0x6fffff, 0x70ffff, 0x71ffff, 0x72ffff, 0x73ffff, 0x74ffff, 0xffffffff, 0xffff0075, 0xffff0076, 0x780077, 0xffff0079, 0x7affff, 0x7bffff, 0xffffffff, 0xffff007c, 0xffffffff, 0xffff007d, 0xffffffff, 0xffffffff, 0xffff007e, 0x7fffff, 0xffffffff, 0x80ffff, 0xffff0081, 0xffffffff, 0xffff0082, 0x83ffff, 0x84ffff, 0x85ffff, 0xffffffff, 0xffff0086, 0xffffffff, 0x87ffff, 0xffffffff, 0xffff0088, 0xffffffff, 0xffff0089, 0xffff008a, 0x8bffff, 0xffffffff, 0x8cffff, 0x8dffff, 0xffffffff, 0xffffffff, 0x8effff, 0xffff008f, 0x910090, 0x92ffff, 0xffff0093, 0xffff0094, 0xffff0095, 0xffff0096, 0xffff0097, 0xffff0098, 0xffff0099, 0xffff009a, 0x9c009b, 0x9dffff, 0x9effff, 0x9fffff, 0xa0ffff, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xffff05d1, 0xa700a6, 0xa8ffff, 0xffffffff, 0xa9ffff, 0xaaffff, 0xabffff, 0xacffff, 0xadffff, 0xaeffff, 0xafffff, 0xb0ffff, 0xb1ffff, 0xb2ffff, 0xb3ffff, 0xb4ffff, 0xb5ffff, 0xb6ffff, 0xb7ffff, 0xb8ffff, 0xb9ffff, 0xbaffff, 0xbbffff, 0xbcffff, 0xffffffff, 0xbdffff, 0xbeffff, 0xbfffff, 0xc0ffff, 0xc1ffff, 0xc2ffff, 0xc3ffff, 0xc4ffff, 0xc5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00c6, 0xc7ffff, 0xffff00c8, 0xffff00c9, 0xffffffff, 0xcaffff, 0xcbffff, 0xccffff, 0xcdffff, 0xceffff, 0xd000cf, 0xd200d1, 0xffff00d3, 0xd500d4, 0xd6ffff, 0xd7ffff, 0xffff00d8, 0xffffffff, 0xda00d9, 0xdbffff, 0xdcffff, 0xffff00dd, 0xdf00de, 0xe100e0, 0xffff00e2, 0xe3ffff, 0xe4ffff, 0xffff00e5, 0xe6ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xe7ffff, 0xffffffff, 0xffff00e8, 0xea00e9, 0xffffffff, 0xebffff, 0xed00ec, 0xef00ee, 0xffff00f0, 0xffffffff, 0xffffffff, 0xffff00f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf2ffff, 0xffff00f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf4ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf5ffff, 0xf6ffff, 0xffffffff, 0xf7ffff, 0xffffffff, 0xf8ffff, 0xfa00f9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff05cb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfc00fb, 0xfe00fd, 0xff05ce, 0x1010100, 0x1030102, 0x1050104, 0x1070106, 0x1090108, 0x10b010a, 0x10d010c, 0x10f010e, 0x1110110, 0x1130112, 0x1150114, 0x1170116, 0x1190118, 0x11b011a, 0xffff011c, 0x11e011d, 0xffffffff, 0x11fffff, 0x1210120, 0x122ffff, 0x123ffff, 0x124ffff, 0x125ffff, 0x126ffff, 0x127ffff, 0x128ffff, 0x129ffff, 0x12affff, 0x12bffff, 0x12cffff, 0x12dffff, 0x12f012e, 0x1310130, 0x132ffff, 0xffffffff, 0xffff0133, 0x134ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1360135, 0x1380137, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0x14c014b, 0x14e014d, 0x150014f, 0x1520151, 0x1540153, 0x1560155, 0x1580157, 0x15a0159, 0x15c015b, 0x15e015d, 0x160015f, 0x1620161, 0x1640163, 0x165ffff, 0x166ffff, 0x167ffff, 0x168ffff, 0x169ffff, 0x16affff, 0x16bffff, 0x16cffff, 0x16dffff, 0x16effff, 0x16fffff, 0x170ffff, 0x171ffff, 0x172ffff, 0x173ffff, 0x174ffff, 0x175ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x176ffff, 0x177ffff, 0x178ffff, 0x179ffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0x17fffff, 0x180ffff, 0x181ffff, 0x182ffff, 0x183ffff, 0x184ffff, 0x185ffff, 0x186ffff, 0x187ffff, 0x188ffff, 0x189ffff, 0x18affff, 0x18bffff, 0x18cffff, 0x18dffff, 0x18effff, 0x18fffff, 0x190ffff, 0xffffffff, 0xffff0191, 0xffff0192, 0xffff0193, 0xffff0194, 0xffff0195, 0xffff0196, 0x1980197, 0x199ffff, 0x19affff, 0x19bffff, 0x19cffff, 0x19dffff, 0x19effff, 0x19fffff, 0x1a0ffff, 0x1a1ffff, 0x1a2ffff, 0x1a3ffff, 0x1a4ffff, 0x1a5ffff, 0x1a6ffff, 0x1a7ffff, 0x1a8ffff, 0x1a9ffff, 0x1aaffff, 0x1abffff, 0x1acffff, 0x1adffff, 0x1aeffff, 0x1afffff, 0x1b0ffff, 0x1b1ffff, 0x1b2ffff, 0x1b3ffff, 0x1b4ffff, 0x1b5ffff, 0x1b6ffff, 0x1b7ffff, 0x1b8ffff, 0x1b9ffff, 0x1baffff, 0x1bbffff, 0x1bcffff, 0x1bdffff, 0x1beffff, 0x1bfffff, 0x1c0ffff, 0x1c1ffff, 0x1c2ffff, 0x1c3ffff, 0x1c4ffff, 0x1c5ffff, 0x1c6ffff, 0x1c7ffff, 0x1c8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1c9ffff, 0x1cb01ca, 0x1cd01cc, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0x1d501d4, 0x1d701d6, 0x1d901d8, 0x1db01da, 0x1dd01dc, 0x1df01de, 0x1e101e0, 0x1e301e2, 0x1e501e4, 0x1e701e6, 0x1e901e8, 0x1eb01ea, 0x1ed01ec, 0x5bd01ee, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f001ef, 0x1f201f1, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fc01fb, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0xffff0219, 0x21affff, 0x21c021b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x21e021d, 0x220021f, 0x2220221, 0xffffffff, 0x2240223, 0x2260225, 0x2280227, 0x22a0229, 0xffff022b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x22cffff, 0xffffffff, 0x22dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff022e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x22fffff, 0x230ffff, 0x231ffff, 0x232ffff, 0x233ffff, 0x234ffff, 0x235ffff, 0x236ffff, 0x237ffff, 0x238ffff, 0x239ffff, 0x23affff, 0x23bffff, 0x23cffff, 0x23dffff, 0x23effff, 0x23fffff, 0x240ffff, 0x241ffff, 0x242ffff, 0x243ffff, 0x244ffff, 0x245ffff, 0x246ffff, 0x247ffff, 0x248ffff, 0x249ffff, 0x24affff, 0x24bffff, 0x24cffff, 0x24dffff, 0x24effff, 0x24fffff, 0x250ffff, 0x251ffff, 0x252ffff, 0x253ffff, 0x254ffff, 0x255ffff, 0x256ffff, 0x257ffff, 0x258ffff, 0x259ffff, 0x25affff, 0x25bffff, 0x25cffff, 0x25dffff, 0x25effff, 0x25fffff, 0x260ffff, 0x261ffff, 0x262ffff, 0x263ffff, 0x264ffff, 0x265ffff, 0x266ffff, 0x267ffff, 0x268ffff, 0x269ffff, 0x26affff, 0x26bffff, 0x26cffff, 0x26dffff, 0x26effff, 0x26fffff, 0x270ffff, 0x271ffff, 0x272ffff, 0x273ffff, 0x274ffff, 0x275ffff, 0x276ffff, 0x277ffff, 0x278ffff, 0x279ffff, 0x5d505d3, 0x5d905d7, 0x27a05db, 0xffffffff, 0xffffffff, 0x27bffff, 0x27cffff, 0x27dffff, 0x27effff, 0x27fffff, 0x280ffff, 0x281ffff, 0x282ffff, 0x283ffff, 0x284ffff, 0x285ffff, 0x286ffff, 0x287ffff, 0x288ffff, 0x289ffff, 0x28affff, 0x28bffff, 0x28cffff, 0x28dffff, 0x28effff, 0x28fffff, 0x290ffff, 0x291ffff, 0x292ffff, 0x293ffff, 0x294ffff, 0x295ffff, 0x296ffff, 0x297ffff, 0x298ffff, 0x299ffff, 0x29affff, 0x29bffff, 0x29cffff, 0x29dffff, 0x29effff, 0x29fffff, 0x2a0ffff, 0x2a1ffff, 0x2a2ffff, 0x2a3ffff, 0x2a4ffff, 0x2a5ffff, 0x2a6ffff, 0x2a7ffff, 0x2a8ffff, 0x2a9ffff, 0x2aaffff, 0x2ac02ab, 0x2ae02ad, 0x2b002af, 0x2b202b1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2b402b3, 0x2b602b5, 0x2b802b7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ba02b9, 0x2bc02bb, 0x2be02bd, 0x2c002bf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2c202c1, 0x2c402c3, 0x2c602c5, 0x2c802c7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ca02c9, 0x2cc02cb, 0x2ce02cd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cf05dd, 0x2d005df, 0x2d105e2, 0x2d205e5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d402d3, 0x2d602d5, 0x2d802d7, 0x2da02d9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2dc02db, 0x2de02dd, 0x2e002df, 0x2e202e1, 0x2e402e3, 0x2e602e5, 0x2e802e7, 0xffffffff, 0x6080606, 0x60c060a, 0x610060e, 0x6140612, 0x6180616, 0x61c061a, 0x620061e, 0x6240622, 0x6280626, 0x62c062a, 0x630062e, 0x6340632, 0x6380636, 0x63c063a, 0x640063e, 0x6440642, 0x6480646, 0x64c064a, 0x650064e, 0x6540652, 0x6580656, 0x65c065a, 0x660065e, 0x6640662, 0x3020301, 0x6660672, 0xffff0674, 0x67e05e8, 0xffffffff, 0xffffffff, 0xffff0668, 0xffff0304, 0xffffffff, 0x66a0676, 0xffff0678, 0x68105ea, 0xffffffff, 0xffffffff, 0xffff066c, 0xffffffff, 0x3070306, 0x5ef05ec, 0xffffffff, 0x5f405f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3090308, 0x5fa05f7, 0x30a05fd, 0x60105ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x66e067a, 0xffff067c, 0x6840604, 0xffffffff, 0xffffffff, 0xffff0670, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff030c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30e030d, 0x310030f, 0x3120311, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0x31c031b, 0xffffffff, 0xffffffff, 0xffff031d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x31f031e, 0x3210320, 0x3230322, 0x3250324, 0x3270326, 0x3290328, 0x32b032a, 0x32d032c, 0x32f032e, 0x3310330, 0x3330332, 0x3350334, 0x3370336, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3390338, 0x33b033a, 0x33d033c, 0x33f033e, 0x3410340, 0x3430342, 0x3450344, 0x3470346, 0x3490348, 0x34b034a, 0x34d034c, 0x34f034e, 0x3510350, 0x3530352, 0x3550354, 0x3570356, 0x3590358, 0x35b035a, 0x35d035c, 0x35f035e, 0x3610360, 0x3630362, 0x3650364, 0x3670366, 0x368ffff, 0xffffffff, 0x369ffff, 0xffff036a, 0xffff036b, 0xffff036c, 0xffff036d, 0xffffffff, 0xffffffff, 0x36effff, 0xffffffff, 0xffff036f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x370ffff, 0x371ffff, 0x372ffff, 0x373ffff, 0x374ffff, 0x375ffff, 0x376ffff, 0x377ffff, 0x378ffff, 0x379ffff, 0x37affff, 0x37bffff, 0x37cffff, 0x37dffff, 0x37effff, 0x37fffff, 0x380ffff, 0x381ffff, 0x382ffff, 0x383ffff, 0x384ffff, 0x385ffff, 0x386ffff, 0x387ffff, 0x388ffff, 0x389ffff, 0x38affff, 0x38bffff, 0x38cffff, 0x38dffff, 0x38effff, 0x38fffff, 0x390ffff, 0x391ffff, 0x392ffff, 0x393ffff, 0x394ffff, 0x395ffff, 0x396ffff, 0x397ffff, 0x398ffff, 0x399ffff, 0x39affff, 0x39bffff, 0x39cffff, 0x39dffff, 0x39effff, 0x39fffff, 0x3a0ffff, 0x3a1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03a2, 0xffff03a3, 0xffffffff, 0x3a4ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3a603a5, 0x3a803a7, 0x3aa03a9, 0x3ac03ab, 0x3ae03ad, 0x3b003af, 0x3b203b1, 0x3b403b3, 0x3b603b5, 0x3b803b7, 0x3ba03b9, 0x3bc03bb, 0x3be03bd, 0x3c003bf, 0x3c203c1, 0x3c403c3, 0x3c603c5, 0x3c803c7, 0x3ca03c9, 0x3cbffff, 0xffffffff, 0xffffffff, 0x3ccffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3cdffff, 0x3ceffff, 0x3cfffff, 0x3d0ffff, 0x3d1ffff, 0x3d2ffff, 0x3d3ffff, 0x3d4ffff, 0x3d5ffff, 0x3d6ffff, 0x3d7ffff, 0x3d8ffff, 0x3d9ffff, 0x3daffff, 0x3dbffff, 0x3dcffff, 0x3ddffff, 0x3deffff, 0x3dfffff, 0x3e0ffff, 0x3e1ffff, 0x3e2ffff, 0x3e3ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3e4ffff, 0x3e5ffff, 0x3e6ffff, 0x3e7ffff, 0x3e8ffff, 0x3e9ffff, 0x3eaffff, 0x3ebffff, 0x3ecffff, 0x3edffff, 0x3eeffff, 0x3efffff, 0x3f0ffff, 0x3f1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f2ffff, 0x3f3ffff, 0x3f4ffff, 0x3f5ffff, 0x3f6ffff, 0x3f7ffff, 0x3f8ffff, 0xffffffff, 0x3f9ffff, 0x3faffff, 0x3fbffff, 0x3fcffff, 0x3fdffff, 0x3feffff, 0x3ffffff, 0x400ffff, 0x401ffff, 0x402ffff, 0x403ffff, 0x404ffff, 0x405ffff, 0x406ffff, 0x407ffff, 0x408ffff, 0x409ffff, 0x40affff, 0x40bffff, 0x40cffff, 0x40dffff, 0x40effff, 0x40fffff, 0x410ffff, 0x411ffff, 0x412ffff, 0x413ffff, 0x414ffff, 0x415ffff, 0x416ffff, 0x417ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0418, 0xffff0419, 0x41affff, 0x41bffff, 0x41cffff, 0x41dffff, 0x41effff, 0xffffffff, 0xffffffff, 0xffff041f, 0xffffffff, 0x420ffff, 0x421ffff, 0xffff0422, 0x423ffff, 0x424ffff, 0x425ffff, 0x426ffff, 0x427ffff, 0x428ffff, 0x429ffff, 0x42affff, 0x42bffff, 0x42cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x42dffff, 0x42effff, 0x42fffff, 0x430ffff, 0x431ffff, 0x432ffff, 0x433ffff, 0x434ffff, 0xffffffff, 0xffffffff, 0xffff0435, 0xffff0436, 0xffffffff, 0xffffffff, 0x437ffff, 0xffffffff, 0xffffffff, 0x438ffff, 0x439ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff043a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43d043c, 0x43f043e, 0x4410440, 0x4430442, 0x4450444, 0x4470446, 0x4490448, 0x44b044a, 0x44d044c, 0x44f044e, 0x4510450, 0x4530452, 0x4550454, 0x4570456, 0x4590458, 0x45b045a, 0x45d045c, 0x45f045e, 0x4610460, 0x4630462, 0x4650464, 0x4670466, 0x4690468, 0x46b046a, 0x46d046c, 0x46f046e, 0x4710470, 0x4730472, 0x4750474, 0x4770476, 0x4790478, 0x47b047a, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x5af05ad, 0x5b305b1, 0x5b905b6, 0xffff05bb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5bfffff, 0x5c305c1, 0x5c705c5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x48cffff, 0x48e048d, 0x490048f, 0x4920491, 0x4940493, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0xffff04a5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4a704a6, 0x4a904a8, 0x4ab04aa, 0x4ad04ac, 0x4af04ae, 0x4b104b0, 0x4b304b2, 0x4b504b4, 0x4b704b6, 0x4b904b8, 0x4bb04ba, 0x4bd04bc, 0x4bf04be, 0x4c104c0, 0x4c304c2, 0x4c504c4, 0x4c704c6, 0x4c904c8, 0x4cb04ca, 0x4cd04cc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4cf04ce, 0x4d104d0, 0x4d304d2, 0x4d504d4, 0x4d704d6, 0x4d904d8, 0x4db04da, 0x4dd04dc, 0x4df04de, 0x4e104e0, 0x4e304e2, 0x4e504e4, 0x4e704e6, 0x4e904e8, 0x4eb04ea, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4f2ffff, 0x4f404f3, 0x4f604f5, 0x4f804f7, 0x4fa04f9, 0x4fc04fb, 0x4fdffff, 0x4ff04fe, 0x5010500, 0x5030502, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50cffff, 0x50e050d, 0x510050f, 0x5120511, 0x513ffff, 0xffff0514, 0xffffffff, 0x5160515, 0x5180517, 0x51a0519, 0x51c051b, 0x51e051d, 0x520051f, 0x5220521, 0x5240523, 0x5260525, 0x5280527, 0x52a0529, 0x52c052b, 0x52e052d, 0x530052f, 0x5320531, 0x5340533, 0x5360535, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0xffff0547, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5490548, 0x54b054a, 0x54d054c, 0x54f054e, 0x5510550, 0x5530552, 0x5550554, 0x5570556, 0x5590558, 0x55b055a, 0x55d055c, 0x55f055e, 0x5610560, 0x5630562, 0x5650564, 0x5670566, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5690568, 0x56b056a, 0x56d056c, 0x56f056e, 0x5710570, 0x5730572, 0x5750574, 0x5770576, 0x5790578, 0x57b057a, 0x57d057c, 0x57f057e, 0x5810580, 0x5830582, 0x5850584, 0x5870586, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5890588, 0x58b058a, 0x58d058c, 0x58f058e, 0x5910590, 0x5930592, 0x5950594, 0x5970596, 0x5990598, 0x59b059a, 0x59d059c, 0x59f059e, 0x5a105a0, 0x5a305a2, 0x5a505a4, 0x5a705a6, 0x5a905a8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//10112 bytes -enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xec0], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x20000, 0x40003, 0x60005, 0x80007, 0x0, 0x90000, 0xb000a, 0xd000c, 0xf000e, 0x110010, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x140013, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160015, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x190018, 0x1b001a, 0x1d001c, 0x1f001e, 0x0, 0x0, 0x210020, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x240023, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x290000, 0x2a, 0x2c002b, 0x2e002d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x330032, 0x340000, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x230022, 0x250024, 0x270026, 0x290028, 0x2b002a, 0x2d002c, 0x2f002e, 0xffff0030, 0x320031, 0x340033, 0x360035, 0x5990037, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0038, 0xffff0039, 0xffff003a, 0xffff003b, 0xffff003c, 0xffff003d, 0xffff003e, 0xffff003f, 0xffff0040, 0xffff0041, 0xffff0042, 0xffff0043, 0xffff0044, 0xffff0045, 0xffff0046, 0xffff0047, 0xffff0048, 0xffff0049, 0xffff004a, 0xffff004b, 0xffff004c, 0xffff004d, 0xffff004e, 0xffff004f, 0xffff059a, 0xffff0051, 0xffff0052, 0xffff0053, 0x54ffff, 0x55ffff, 0x56ffff, 0x57ffff, 0x58ffff, 0x59ffff, 0x5affff, 0x5bffff, 0x5a9ffff, 0xffff005c, 0xffff005d, 0xffff005e, 0xffff005f, 0xffff0060, 0xffff0061, 0xffff0062, 0xffff0063, 0xffff0064, 0xffff0065, 0xffff0066, 0xffff0067, 0xffff0068, 0xffff0069, 0xffff006a, 0xffff006b, 0xffff006c, 0xffff006d, 0xffff006e, 0xffff006f, 0xffff0070, 0xffff0071, 0xffff0072, 0x740073, 0x75ffff, 0x76ffff, 0xffffffff, 0x77ffff, 0xffff0078, 0xffff0079, 0x7b007a, 0x7cffff, 0x7e007d, 0xffffffff, 0x80007f, 0x820081, 0x83ffff, 0xffff0084, 0x860085, 0xffff0087, 0xffffffff, 0x890088, 0x8affff, 0xffff008b, 0xffff008c, 0xffff008d, 0x8f008e, 0x90ffff, 0xffffffff, 0xffff0091, 0x930092, 0x94ffff, 0x960095, 0x97ffff, 0x98ffff, 0xffff0099, 0xffffffff, 0xffff009a, 0xffffffff, 0xffffffff, 0xffffffff, 0x9c009b, 0x9dffff, 0xffff009e, 0xa0009f, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xa6ffff, 0xa7ffff, 0xa8ffff, 0xffffffff, 0xffff00a9, 0xffff00aa, 0xffff00ab, 0xffff00ac, 0xffff00ad, 0xffff00ae, 0xffff00af, 0xffff00b0, 0xffff00b1, 0xb205ac, 0xffff00b3, 0xffff00b4, 0xb600b5, 0xffff00b7, 0xffff00b8, 0xffff00b9, 0xffff00ba, 0xffff00bb, 0xffff00bc, 0xffff00bd, 0xffff00be, 0xffff00bf, 0xffff00c0, 0xffff00c1, 0xffff00c2, 0xffff00c3, 0xffff00c4, 0xffff00c5, 0xffff00c6, 0xffff00c7, 0xffff00c8, 0xffff00c9, 0xffff00ca, 0xffff00cb, 0xffff00cc, 0xffff00cd, 0xffff00ce, 0xffff00cf, 0xffff00d0, 0xffff00d1, 0xffff00d2, 0xffff00d3, 0xffff00d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xd600d5, 0xd7ffff, 0xffff00d8, 0xd9ffff, 0xdaffff, 0xdc00db, 0xffff00dd, 0xffff00de, 0xffff00df, 0xffff00e0, 0xffff00e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00e2, 0xffff00e3, 0xffffffff, 0xffff00e4, 0xffffffff, 0xffffffff, 0xffffffff, 0xe5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00e6, 0xe800e7, 0xffff00e9, 0xffff00ea, 0xec00eb, 0xed05aa, 0xef00ee, 0xf100f0, 0xf300f2, 0xf500f4, 0xf700f6, 0xf900f8, 0xfb00fa, 0xfd00fc, 0xfeffff, 0x10000ff, 0x1020101, 0x1040103, 0x1060105, 0xffffffff, 0xffffffff, 0xffff05ab, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x107ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0108, 0xffff0109, 0xffff010a, 0xffff010b, 0xffff010c, 0xffff010d, 0xffff010e, 0xffff010f, 0xffff0110, 0xffff0111, 0xffff0112, 0xffff0113, 0xffffffff, 0xffffffff, 0xffff0114, 0x115ffff, 0x116ffff, 0xffff0117, 0x118ffff, 0x11a0119, 0x11c011b, 0x11e011d, 0x120011f, 0x1220121, 0x1240123, 0x1260125, 0x1280127, 0x12a0129, 0x12c012b, 0x12e012d, 0x130012f, 0x1320131, 0x1340133, 0x1360135, 0x1380137, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff014b, 0xffff014c, 0xffff014d, 0xffff014e, 0xffff014f, 0xffff0150, 0xffff0151, 0xffff0152, 0xffff0153, 0xffff0154, 0xffff0155, 0xffff0156, 0xffff0157, 0xffff0158, 0xffff0159, 0xffff015a, 0xffff015b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff015c, 0xffff015d, 0xffff015e, 0xffff015f, 0xffff0160, 0xffff0161, 0xffff0162, 0xffff0163, 0xffff0164, 0xffff0165, 0xffff0166, 0xffff0167, 0xffff0168, 0xffff0169, 0xffff016a, 0xffff016b, 0xffff016c, 0xffff016d, 0xffff016e, 0xffff016f, 0xffff0170, 0xffff0171, 0xffff0172, 0xffff0173, 0xffff0174, 0xffff0175, 0xffff0176, 0x1780177, 0x179ffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0xffffffff, 0xffff017f, 0xffff0180, 0xffff0181, 0xffff0182, 0xffff0183, 0xffff0184, 0xffff0185, 0xffff0186, 0xffff0187, 0xffff0188, 0xffff0189, 0xffff018a, 0xffff018b, 0xffff018c, 0xffff018d, 0xffff018e, 0xffff018f, 0xffff0190, 0xffff0191, 0xffff0192, 0xffff0193, 0xffff0194, 0xffff0195, 0xffff0196, 0xffff0197, 0xffff0198, 0xffff0199, 0xffff019a, 0xffff019b, 0xffff019c, 0xffff019d, 0xffff019e, 0xffff019f, 0xffff01a0, 0xffff01a1, 0xffff01a2, 0xffff01a3, 0xffff01a4, 0xffff01a5, 0xffff01a6, 0xffff01a7, 0xffff01a8, 0xffff01a9, 0xffff01aa, 0xffff01ab, 0xffff01ac, 0xffff01ad, 0xffff01ae, 0x1afffff, 0x1b101b0, 0x1b301b2, 0x1b501b4, 0x1b701b6, 0x1b901b8, 0x1bb01ba, 0x1bd01bc, 0x1bf01be, 0x1c101c0, 0x1c301c2, 0x1c501c4, 0x1c701c6, 0x1c901c8, 0x1cb01ca, 0x1cd01cc, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0xffff01d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5a3ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1d601d5, 0x1d801d7, 0x1da01d9, 0x1dc01db, 0x1de01dd, 0x1e001df, 0x1e201e1, 0x1e401e3, 0x1e601e5, 0x1e801e7, 0x1ea01e9, 0x1ec01eb, 0x1ee01ed, 0x1f001ef, 0x1f201f1, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fbffff, 0xffffffff, 0xffffffff, 0x1fcffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0x21a0219, 0x21c021b, 0x21e021d, 0x220021f, 0x2220221, 0x2240223, 0x2260225, 0x2280227, 0x22a0229, 0x22c022b, 0x22e022d, 0x230022f, 0x2320231, 0x2340233, 0x2360235, 0x2380237, 0x23a0239, 0x23c023b, 0x23e023d, 0x240023f, 0x2420241, 0x2440243, 0x2460245, 0x2480247, 0x24a0249, 0x24c024b, 0x24e024d, 0x250024f, 0x2520251, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2540253, 0x2560255, 0x2580257, 0x25a0259, 0x25c025b, 0x25e025d, 0x260025f, 0x2620261, 0x2640263, 0x2660265, 0x2680267, 0x26a0269, 0x26c026b, 0x26e026d, 0x270026f, 0x2720271, 0x2740273, 0x2760275, 0x2780277, 0x27a0279, 0x27c027b, 0xffff027d, 0x27effff, 0x280027f, 0xffff0281, 0xffff0282, 0xffff0283, 0xffff0284, 0xffff0285, 0xffff0286, 0xffff0287, 0xffff0288, 0xffff0289, 0xffff028a, 0xffff028b, 0xffff028c, 0xffff028d, 0xffff028e, 0xffff028f, 0xffff0290, 0xffff0291, 0xffff0292, 0xffff0293, 0xffff0294, 0xffff0295, 0xffff0296, 0xffff0297, 0xffff0298, 0xffff0299, 0xffff029a, 0xffff029b, 0xffff029c, 0xffff029d, 0xffff029e, 0xffff029f, 0xffff02a0, 0xffff02a1, 0xffff02a2, 0xffff02a3, 0xffff02a4, 0xffff02a5, 0xffff02a6, 0xffff02a7, 0xffff02a8, 0xffff02a9, 0xffff02aa, 0xffff02ab, 0xffff02ac, 0xffff02ad, 0xffff02ae, 0xffff02af, 0xffff02b0, 0xffff02b1, 0xffff02b2, 0xffff02b3, 0xffff02b4, 0xffff02b5, 0xffff02b6, 0xffff02b7, 0xffff02b8, 0xffff02b9, 0xffff02ba, 0xffff02bb, 0xffff02bc, 0xffff02bd, 0xffff02be, 0xffff02bf, 0xffff02c0, 0xffff02c1, 0xffff02c2, 0xffff02c3, 0xffff02c4, 0xffff02c5, 0xffff02c6, 0xffff02c7, 0xffff02c8, 0xffff02c9, 0xffff02ca, 0xffff02cb, 0x5ae05ad, 0x5b005af, 0xffff05b1, 0xffffffff, 0xffff02cc, 0xffff02cd, 0xffff02ce, 0xffff02cf, 0xffff02d0, 0xffff02d1, 0xffff02d2, 0xffff02d3, 0xffff02d4, 0xffff02d5, 0xffff02d6, 0xffff02d7, 0xffff02d8, 0xffff02d9, 0xffff02da, 0xffff02db, 0xffff02dc, 0xffff02dd, 0xffff02de, 0xffff02df, 0xffff02e0, 0xffff02e1, 0xffff02e2, 0xffff02e3, 0xffff02e4, 0xffff02e5, 0xffff02e6, 0xffff02e7, 0xffff02e8, 0xffff02e9, 0xffff02ea, 0xffff02eb, 0xffff02ec, 0xffff02ed, 0xffff02ee, 0xffff02ef, 0xffff02f0, 0xffff02f1, 0xffff02f2, 0xffff02f3, 0xffff02f4, 0xffff02f5, 0xffff02f6, 0xffff02f7, 0xffff02f8, 0xffff02f9, 0xffff02fa, 0xffff02fb, 0xffff02fc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2fe02fd, 0x30002ff, 0x3020301, 0x3040303, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3060305, 0x3080307, 0x30a0309, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30c030b, 0x30e030d, 0x310030f, 0x3120311, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x31c031b, 0x31e031d, 0x320031f, 0xffffffff, 0xffff05b2, 0xffff05b3, 0xffff05b4, 0xffff05b5, 0x321ffff, 0x322ffff, 0x323ffff, 0x324ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3260325, 0x3280327, 0x32a0329, 0x32c032b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5c305c2, 0x5c505c4, 0x5c705c6, 0x5c905c8, 0x5cb05ca, 0x5cd05cc, 0x5cf05ce, 0x5d105d0, 0x5d305d2, 0x5d505d4, 0x5d705d6, 0x5d905d8, 0x5db05da, 0x5dd05dc, 0x5df05de, 0x5e105e0, 0x5e305e2, 0x5e505e4, 0x5e705e6, 0x5e905e8, 0x5eb05ea, 0x5ed05ec, 0x5ef05ee, 0x5f105f0, 0xffffffff, 0x5f205f8, 0xffff05f9, 0x5fe05b6, 0x3460345, 0x3480347, 0xffff05f3, 0xffffffff, 0xffffffff, 0x5f405fa, 0xffff05fb, 0x5ff05b7, 0x34b034a, 0x34d034c, 0xffff05f5, 0xffffffff, 0xffffffff, 0x5b905b8, 0xffffffff, 0x5bb05ba, 0x350034f, 0x3520351, 0xffffffff, 0xffffffff, 0xffffffff, 0x5bd05bc, 0xffff05be, 0x5c005bf, 0x3540353, 0x3560355, 0xffff0357, 0xffffffff, 0xffffffff, 0x5f605fc, 0xffff05fd, 0x60005c1, 0x3590358, 0x35b035a, 0xffff05f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff035d, 0xffffffff, 0x35f035e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0360, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3620361, 0x3640363, 0x3660365, 0x3680367, 0x36a0369, 0x36c036b, 0x36e036d, 0x370036f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x371ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3730372, 0x3750374, 0x3770376, 0x3790378, 0x37b037a, 0x37d037c, 0x37f037e, 0x3810380, 0x3830382, 0x3850384, 0x3870386, 0x3890388, 0x38b038a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x38d038c, 0x38f038e, 0x3910390, 0x3930392, 0x3950394, 0x3970396, 0x3990398, 0x39b039a, 0x39d039c, 0x39f039e, 0x3a103a0, 0x3a303a2, 0x3a503a4, 0x3a703a6, 0x3a903a8, 0x3ab03aa, 0x3ad03ac, 0x3af03ae, 0x3b103b0, 0x3b303b2, 0x3b503b4, 0x3b703b6, 0x3b903b8, 0x3bb03ba, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03bc, 0x3be03bd, 0xffff03bf, 0x3c0ffff, 0x3c1ffff, 0x3c2ffff, 0x3c3ffff, 0x3c503c4, 0xffff03c6, 0xffff03c7, 0x3c8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ca03c9, 0xffff03cb, 0xffff03cc, 0xffff03cd, 0xffff03ce, 0xffff03cf, 0xffff03d0, 0xffff03d1, 0xffff03d2, 0xffff03d3, 0xffff03d4, 0xffff03d5, 0xffff03d6, 0xffff03d7, 0xffff03d8, 0xffff03d9, 0xffff03da, 0xffff03db, 0xffff03dc, 0xffff03dd, 0xffff03de, 0xffff03df, 0xffff03e0, 0xffff03e1, 0xffff03e2, 0xffff03e3, 0xffff03e4, 0xffff03e5, 0xffff03e6, 0xffff03e7, 0xffff03e8, 0xffff03e9, 0xffff03ea, 0xffff03eb, 0xffff03ec, 0xffff03ed, 0xffff03ee, 0xffff03ef, 0xffff03f0, 0xffff03f1, 0xffff03f2, 0xffff03f3, 0xffff03f4, 0xffff03f5, 0xffff03f6, 0xffff03f7, 0xffff03f8, 0xffff03f9, 0xffff03fa, 0xffff03fb, 0xffff03fc, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fdffff, 0x3feffff, 0xffffffff, 0xffffffff, 0xffff03ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0400, 0xffff0401, 0xffff0402, 0xffff0403, 0xffff0404, 0xffff0405, 0xffff0406, 0xffff0407, 0xffff0408, 0xffff0409, 0xffff040a, 0xffff040b, 0xffff040c, 0xffff040d, 0xffff040e, 0xffff040f, 0xffff0410, 0xffff0411, 0xffff0412, 0xffff0413, 0xffff0414, 0xffff0415, 0xffff0416, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0417, 0xffff0418, 0xffff0419, 0xffff041a, 0xffff041b, 0xffff041c, 0xffff041d, 0xffff041e, 0xffff041f, 0xffff0420, 0xffff0421, 0xffff0422, 0xffff0423, 0xffff0424, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0425, 0xffff0426, 0xffff0427, 0xffff0428, 0xffff0429, 0xffff042a, 0xffff042b, 0xffffffff, 0xffff042c, 0xffff042d, 0xffff042e, 0xffff042f, 0xffff0430, 0xffff0431, 0xffff0432, 0xffff0433, 0xffff0434, 0xffff0435, 0xffff0436, 0xffff0437, 0xffff0438, 0xffff0439, 0xffff043a, 0xffff043b, 0xffff043c, 0xffff043d, 0xffff043e, 0xffff043f, 0xffff0440, 0xffff0441, 0xffff0442, 0xffff0443, 0xffff0444, 0xffff0445, 0xffff0446, 0xffff0447, 0xffff0448, 0xffff0449, 0xffff044a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x44bffff, 0x44cffff, 0x44dffff, 0xffff044e, 0xffff044f, 0xffff0450, 0xffff0451, 0xffff0452, 0xffffffff, 0x453ffff, 0x454ffff, 0xffffffff, 0xffff0455, 0xffff0456, 0xffffffff, 0xffff0457, 0xffff0458, 0xffff0459, 0xffff045a, 0xffff045b, 0xffff045c, 0xffff045d, 0xffff045e, 0xffff045f, 0xffff0460, 0x4620461, 0x4640463, 0xffff0465, 0x4670466, 0x4690468, 0xffff046a, 0xffff046b, 0xffff046c, 0xffff046d, 0xffff046e, 0xffff046f, 0xffff0470, 0xffff0471, 0x4730472, 0x4750474, 0x476ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0477, 0xffffffff, 0xffffffff, 0xffff0478, 0xffff0479, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x47affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x59d059c, 0x59f059e, 0x5a105a0, 0xffff05a2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5a4ffff, 0x5a605a5, 0x5a805a7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x47bffff, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x48d048c, 0x48f048e, 0x4910490, 0x4930492, 0xffff0494, 0xffffffff, 0xffffffff, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0x4a604a5, 0x4a804a7, 0x4aa04a9, 0x4ac04ab, 0x4ae04ad, 0x4b004af, 0x4b204b1, 0x4b404b3, 0x4b604b5, 0x4b804b7, 0x4ba04b9, 0x4bc04bb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4be04bd, 0x4c004bf, 0x4c204c1, 0x4c404c3, 0x4c604c5, 0x4c804c7, 0x4ca04c9, 0x4cc04cb, 0x4ce04cd, 0x4d004cf, 0x4d204d1, 0x4d404d3, 0x4d604d5, 0x4d804d7, 0x4da04d9, 0x4dc04db, 0x4de04dd, 0x4e004df, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4e204e1, 0x4e404e3, 0x4e604e5, 0x4e804e7, 0x4ea04e9, 0xffff04eb, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0x4f304f2, 0x4f504f4, 0x4f704f6, 0x4f904f8, 0xffff04fa, 0x4fc04fb, 0x4fe04fd, 0x50004ff, 0xffff0501, 0x5030502, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50d050c, 0x50f050e, 0x5110510, 0x5130512, 0x5150514, 0x5170516, 0x5190518, 0x51b051a, 0x51d051c, 0x51f051e, 0x5210520, 0x5230522, 0x5250524, 0x5270526, 0x5290528, 0x52b052a, 0x52d052c, 0x52f052e, 0x5310530, 0x5330532, 0x5350534, 0xffff0536, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0x5480547, 0x54a0549, 0x54c054b, 0x54e054d, 0x550054f, 0x5520551, 0x5540553, 0x5560555, 0x5580557, 0x55a0559, 0x55c055b, 0x55e055d, 0x560055f, 0x5620561, 0x5640563, 0x5660565, 0x5680567, 0x56a0569, 0x56c056b, 0x56e056d, 0x570056f, 0x5720571, 0x5740573, 0x5760575, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5780577, 0x57a0579, 0x57c057b, 0x57e057d, 0x580057f, 0x5820581, 0x5840583, 0x5860585, 0x5880587, 0x58a0589, 0x58c058b, 0x58e058d, 0x590058f, 0x5920591, 0x5940593, 0x5960595, 0x5980597, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//10496 bytes -enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xf80], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x150000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x180000, 0x19, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x0, 0x0, 0x220000, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x240000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0000, 0x2b, 0x2d002c, 0x2f002e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x300000, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x330000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x350034, 0x360000, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c003b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5aeffff, 0x1c001b, 0x1e001d, 0x20001f, 0x220021, 0x240023, 0x260025, 0x280027, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0xffff0031, 0x330032, 0x350034, 0x370036, 0x390038, 0x3affff, 0x3bffff, 0x3cffff, 0x3dffff, 0x3effff, 0x3fffff, 0x40ffff, 0x41ffff, 0x42ffff, 0x43ffff, 0x44ffff, 0x45ffff, 0x46ffff, 0x47ffff, 0x48ffff, 0x49ffff, 0x4affff, 0x4bffff, 0x4cffff, 0x4dffff, 0x4effff, 0x4fffff, 0x50ffff, 0x51ffff, 0x5205b0, 0x53ffff, 0x54ffff, 0x55ffff, 0xffffffff, 0xffff0056, 0xffff0057, 0xffff0058, 0xffff0059, 0xffff005a, 0xffff005b, 0xffff005c, 0x5cd005d, 0x5effff, 0x5fffff, 0x60ffff, 0x61ffff, 0x62ffff, 0x63ffff, 0x64ffff, 0x65ffff, 0x66ffff, 0x67ffff, 0x68ffff, 0x69ffff, 0x6affff, 0x6bffff, 0x6cffff, 0x6dffff, 0x6effff, 0x6fffff, 0x70ffff, 0x71ffff, 0x72ffff, 0x73ffff, 0x74ffff, 0xffffffff, 0xffff0075, 0xffff0076, 0x780077, 0xffff0079, 0x7affff, 0x7bffff, 0xffffffff, 0xffff007c, 0xffffffff, 0xffff007d, 0xffffffff, 0xffffffff, 0xffff007e, 0x7fffff, 0xffffffff, 0x80ffff, 0xffff0081, 0xffffffff, 0xffff0082, 0x83ffff, 0x84ffff, 0x85ffff, 0xffffffff, 0xffff0086, 0xffffffff, 0x87ffff, 0xffffffff, 0xffff0088, 0xffffffff, 0xffff0089, 0xffff008a, 0x8bffff, 0xffffffff, 0x8cffff, 0x8dffff, 0xffffffff, 0xffffffff, 0x8f008e, 0x910090, 0x930092, 0x950094, 0xffff0096, 0xffff0097, 0xffff0098, 0xffff0099, 0xffff009a, 0xffff009b, 0xffff009c, 0xffff009d, 0x9f009e, 0xa0ffff, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xa6ffff, 0xa7ffff, 0xa8ffff, 0xa905d5, 0xab00aa, 0xacffff, 0xffffffff, 0xadffff, 0xaeffff, 0xafffff, 0xb0ffff, 0xb1ffff, 0xb2ffff, 0xb3ffff, 0xb4ffff, 0xb5ffff, 0xb6ffff, 0xb7ffff, 0xb8ffff, 0xb9ffff, 0xbaffff, 0xbbffff, 0xbcffff, 0xbdffff, 0xbeffff, 0xbfffff, 0xc0ffff, 0xffffffff, 0xc1ffff, 0xc2ffff, 0xc3ffff, 0xc4ffff, 0xc5ffff, 0xc6ffff, 0xc7ffff, 0xc8ffff, 0xc9ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00ca, 0xcbffff, 0xffff00cc, 0xffff00cd, 0xffffffff, 0xceffff, 0xcfffff, 0xd0ffff, 0xd1ffff, 0xd2ffff, 0xd400d3, 0xd600d5, 0xffff00d7, 0xd900d8, 0xdaffff, 0xdbffff, 0xffff00dc, 0xffffffff, 0xde00dd, 0xdfffff, 0xe0ffff, 0xffff00e1, 0xe300e2, 0xe500e4, 0xffff00e6, 0xe7ffff, 0xe8ffff, 0xffff00e9, 0xeaffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xebffff, 0xffffffff, 0xffff00ec, 0xee00ed, 0xffffffff, 0xefffff, 0xf100f0, 0xf300f2, 0xffff00f4, 0xffffffff, 0xffffffff, 0xffff00f5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf6ffff, 0xffff00f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf9ffff, 0xfaffff, 0xffffffff, 0xfbffff, 0xffffffff, 0xfcffff, 0xfe00fd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff05cf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x10000ff, 0x1020101, 0x10305d2, 0x1050104, 0x1070106, 0x1090108, 0x10b010a, 0x10d010c, 0x10f010e, 0x1110110, 0x1130112, 0x1150114, 0x1170116, 0x1190118, 0x11b011a, 0x11d011c, 0x11f011e, 0xffff0120, 0x1220121, 0xffffffff, 0x123ffff, 0x1250124, 0x126ffff, 0x127ffff, 0x128ffff, 0x129ffff, 0x12affff, 0x12bffff, 0x12cffff, 0x12dffff, 0x12effff, 0x12fffff, 0x130ffff, 0x131ffff, 0x1330132, 0x1350134, 0x136ffff, 0xffffffff, 0xffff0137, 0x138ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0x14c014b, 0x14e014d, 0x150014f, 0x1520151, 0x1540153, 0x1560155, 0x1580157, 0x15a0159, 0x15c015b, 0x15e015d, 0x160015f, 0x1620161, 0x1640163, 0x1660165, 0x1680167, 0x169ffff, 0x16affff, 0x16bffff, 0x16cffff, 0x16dffff, 0x16effff, 0x16fffff, 0x170ffff, 0x171ffff, 0x172ffff, 0x173ffff, 0x174ffff, 0x175ffff, 0x176ffff, 0x177ffff, 0x178ffff, 0x179ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0x17fffff, 0x180ffff, 0x181ffff, 0x182ffff, 0x183ffff, 0x184ffff, 0x185ffff, 0x186ffff, 0x187ffff, 0x188ffff, 0x189ffff, 0x18affff, 0x18bffff, 0x18cffff, 0x18dffff, 0x18effff, 0x18fffff, 0x190ffff, 0x191ffff, 0x192ffff, 0x193ffff, 0x194ffff, 0xffffffff, 0xffff0195, 0xffff0196, 0xffff0197, 0xffff0198, 0xffff0199, 0xffff019a, 0x19c019b, 0x19dffff, 0x19effff, 0x19fffff, 0x1a0ffff, 0x1a1ffff, 0x1a2ffff, 0x1a3ffff, 0x1a4ffff, 0x1a5ffff, 0x1a6ffff, 0x1a7ffff, 0x1a8ffff, 0x1a9ffff, 0x1aaffff, 0x1abffff, 0x1acffff, 0x1adffff, 0x1aeffff, 0x1afffff, 0x1b0ffff, 0x1b1ffff, 0x1b2ffff, 0x1b3ffff, 0x1b4ffff, 0x1b5ffff, 0x1b6ffff, 0x1b7ffff, 0x1b8ffff, 0x1b9ffff, 0x1baffff, 0x1bbffff, 0x1bcffff, 0x1bdffff, 0x1beffff, 0x1bfffff, 0x1c0ffff, 0x1c1ffff, 0x1c2ffff, 0x1c3ffff, 0x1c4ffff, 0x1c5ffff, 0x1c6ffff, 0x1c7ffff, 0x1c8ffff, 0x1c9ffff, 0x1caffff, 0x1cbffff, 0x1ccffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1cdffff, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0x1d501d4, 0x1d701d6, 0x1d901d8, 0x1db01da, 0x1dd01dc, 0x1df01de, 0x1e101e0, 0x1e301e2, 0x1e501e4, 0x1e701e6, 0x1e901e8, 0x1eb01ea, 0x1ed01ec, 0x1ef01ee, 0x1f101f0, 0x5c101f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fc01fb, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0x21a0219, 0x21c021b, 0xffff021d, 0x21effff, 0x220021f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2220221, 0x2240223, 0x2260225, 0xffffffff, 0x2280227, 0x22a0229, 0x22c022b, 0x22e022d, 0xffff022f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x230ffff, 0xffffffff, 0x231ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0232, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x233ffff, 0x234ffff, 0x235ffff, 0x236ffff, 0x237ffff, 0x238ffff, 0x239ffff, 0x23affff, 0x23bffff, 0x23cffff, 0x23dffff, 0x23effff, 0x23fffff, 0x240ffff, 0x241ffff, 0x242ffff, 0x243ffff, 0x244ffff, 0x245ffff, 0x246ffff, 0x247ffff, 0x248ffff, 0x249ffff, 0x24affff, 0x24bffff, 0x24cffff, 0x24dffff, 0x24effff, 0x24fffff, 0x250ffff, 0x251ffff, 0x252ffff, 0x253ffff, 0x254ffff, 0x255ffff, 0x256ffff, 0x257ffff, 0x258ffff, 0x259ffff, 0x25affff, 0x25bffff, 0x25cffff, 0x25dffff, 0x25effff, 0x25fffff, 0x260ffff, 0x261ffff, 0x262ffff, 0x263ffff, 0x264ffff, 0x265ffff, 0x266ffff, 0x267ffff, 0x268ffff, 0x269ffff, 0x26affff, 0x26bffff, 0x26cffff, 0x26dffff, 0x26effff, 0x26fffff, 0x270ffff, 0x271ffff, 0x272ffff, 0x273ffff, 0x274ffff, 0x275ffff, 0x276ffff, 0x277ffff, 0x278ffff, 0x279ffff, 0x27affff, 0x27bffff, 0x27cffff, 0x27dffff, 0x5d905d7, 0x5dd05db, 0x27e05df, 0xffffffff, 0xffffffff, 0x27fffff, 0x280ffff, 0x281ffff, 0x282ffff, 0x283ffff, 0x284ffff, 0x285ffff, 0x286ffff, 0x287ffff, 0x288ffff, 0x289ffff, 0x28affff, 0x28bffff, 0x28cffff, 0x28dffff, 0x28effff, 0x28fffff, 0x290ffff, 0x291ffff, 0x292ffff, 0x293ffff, 0x294ffff, 0x295ffff, 0x296ffff, 0x297ffff, 0x298ffff, 0x299ffff, 0x29affff, 0x29bffff, 0x29cffff, 0x29dffff, 0x29effff, 0x29fffff, 0x2a0ffff, 0x2a1ffff, 0x2a2ffff, 0x2a3ffff, 0x2a4ffff, 0x2a5ffff, 0x2a6ffff, 0x2a7ffff, 0x2a8ffff, 0x2a9ffff, 0x2aaffff, 0x2abffff, 0x2acffff, 0x2adffff, 0x2aeffff, 0x2b002af, 0x2b202b1, 0x2b402b3, 0x2b602b5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2b802b7, 0x2ba02b9, 0x2bc02bb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2be02bd, 0x2c002bf, 0x2c202c1, 0x2c402c3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2c602c5, 0x2c802c7, 0x2ca02c9, 0x2cc02cb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ce02cd, 0x2d002cf, 0x2d202d1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d305e1, 0x2d405e3, 0x2d505e6, 0x2d605e9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d802d7, 0x2da02d9, 0x2dc02db, 0x2de02dd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2e002df, 0x2e202e1, 0x2e402e3, 0x2e602e5, 0x2e802e7, 0x2ea02e9, 0x2ec02eb, 0xffffffff, 0x60b060a, 0x60d060c, 0x60f060e, 0x6110610, 0x6130612, 0x6150614, 0x6170616, 0x6190618, 0x61b061a, 0x61d061c, 0x61f061e, 0x6210620, 0x6230622, 0x6250624, 0x6270626, 0x6290628, 0x62b062a, 0x62d062c, 0x62f062e, 0x6310630, 0x6330632, 0x6350634, 0x6370636, 0x6390638, 0x3060305, 0x63a0640, 0xffff0642, 0x64c05ec, 0xffffffff, 0xffffffff, 0xffff063b, 0xffff0308, 0xffffffff, 0x63c0644, 0xffff0646, 0x64f05ee, 0xffffffff, 0xffffffff, 0xffff063d, 0xffffffff, 0x30b030a, 0x5f305f0, 0xffffffff, 0x5f805f6, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30d030c, 0x5fe05fb, 0x30e0601, 0x6050603, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x63e0648, 0xffff064a, 0x6520608, 0xffffffff, 0xffffffff, 0xffff063f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0310, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3120311, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0x31c031b, 0x31e031d, 0x320031f, 0xffffffff, 0xffffffff, 0xffff0321, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3230322, 0x3250324, 0x3270326, 0x3290328, 0x32b032a, 0x32d032c, 0x32f032e, 0x3310330, 0x3330332, 0x3350334, 0x3370336, 0x3390338, 0x33b033a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x33d033c, 0x33f033e, 0x3410340, 0x3430342, 0x3450344, 0x3470346, 0x3490348, 0x34b034a, 0x34d034c, 0x34f034e, 0x3510350, 0x3530352, 0x3550354, 0x3570356, 0x3590358, 0x35b035a, 0x35d035c, 0x35f035e, 0x3610360, 0x3630362, 0x3650364, 0x3670366, 0x3690368, 0x36b036a, 0x36cffff, 0xffffffff, 0x36dffff, 0xffff036e, 0xffff036f, 0xffff0370, 0xffff0371, 0xffffffff, 0xffffffff, 0x372ffff, 0xffffffff, 0xffff0373, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x374ffff, 0x375ffff, 0x376ffff, 0x377ffff, 0x378ffff, 0x379ffff, 0x37affff, 0x37bffff, 0x37cffff, 0x37dffff, 0x37effff, 0x37fffff, 0x380ffff, 0x381ffff, 0x382ffff, 0x383ffff, 0x384ffff, 0x385ffff, 0x386ffff, 0x387ffff, 0x388ffff, 0x389ffff, 0x38affff, 0x38bffff, 0x38cffff, 0x38dffff, 0x38effff, 0x38fffff, 0x390ffff, 0x391ffff, 0x392ffff, 0x393ffff, 0x394ffff, 0x395ffff, 0x396ffff, 0x397ffff, 0x398ffff, 0x399ffff, 0x39affff, 0x39bffff, 0x39cffff, 0x39dffff, 0x39effff, 0x39fffff, 0x3a0ffff, 0x3a1ffff, 0x3a2ffff, 0x3a3ffff, 0x3a4ffff, 0x3a5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03a6, 0xffff03a7, 0xffffffff, 0x3a8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3aa03a9, 0x3ac03ab, 0x3ae03ad, 0x3b003af, 0x3b203b1, 0x3b403b3, 0x3b603b5, 0x3b803b7, 0x3ba03b9, 0x3bc03bb, 0x3be03bd, 0x3c003bf, 0x3c203c1, 0x3c403c3, 0x3c603c5, 0x3c803c7, 0x3ca03c9, 0x3cc03cb, 0x3ce03cd, 0x3cfffff, 0xffffffff, 0xffffffff, 0x3d0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3d1ffff, 0x3d2ffff, 0x3d3ffff, 0x3d4ffff, 0x3d5ffff, 0x3d6ffff, 0x3d7ffff, 0x3d8ffff, 0x3d9ffff, 0x3daffff, 0x3dbffff, 0x3dcffff, 0x3ddffff, 0x3deffff, 0x3dfffff, 0x3e0ffff, 0x3e1ffff, 0x3e2ffff, 0x3e3ffff, 0x3e4ffff, 0x3e5ffff, 0x3e6ffff, 0x3e7ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3e8ffff, 0x3e9ffff, 0x3eaffff, 0x3ebffff, 0x3ecffff, 0x3edffff, 0x3eeffff, 0x3efffff, 0x3f0ffff, 0x3f1ffff, 0x3f2ffff, 0x3f3ffff, 0x3f4ffff, 0x3f5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f6ffff, 0x3f7ffff, 0x3f8ffff, 0x3f9ffff, 0x3faffff, 0x3fbffff, 0x3fcffff, 0xffffffff, 0x3fdffff, 0x3feffff, 0x3ffffff, 0x400ffff, 0x401ffff, 0x402ffff, 0x403ffff, 0x404ffff, 0x405ffff, 0x406ffff, 0x407ffff, 0x408ffff, 0x409ffff, 0x40affff, 0x40bffff, 0x40cffff, 0x40dffff, 0x40effff, 0x40fffff, 0x410ffff, 0x411ffff, 0x412ffff, 0x413ffff, 0x414ffff, 0x415ffff, 0x416ffff, 0x417ffff, 0x418ffff, 0x419ffff, 0x41affff, 0x41bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff041c, 0xffff041d, 0x41effff, 0x41fffff, 0x420ffff, 0x421ffff, 0x422ffff, 0xffffffff, 0xffffffff, 0xffff0423, 0xffffffff, 0x424ffff, 0x425ffff, 0xffff0426, 0x427ffff, 0x428ffff, 0x429ffff, 0x42affff, 0x42bffff, 0x42cffff, 0x42dffff, 0x42effff, 0x42fffff, 0x430ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x431ffff, 0x432ffff, 0x433ffff, 0x434ffff, 0x435ffff, 0x436ffff, 0x437ffff, 0x438ffff, 0xffffffff, 0xffffffff, 0xffff0439, 0xffff043a, 0xffffffff, 0xffffffff, 0x43bffff, 0xffffffff, 0xffffffff, 0x43cffff, 0x43dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff043e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4410440, 0x4430442, 0x4450444, 0x4470446, 0x4490448, 0x44b044a, 0x44d044c, 0x44f044e, 0x4510450, 0x4530452, 0x4550454, 0x4570456, 0x4590458, 0x45b045a, 0x45d045c, 0x45f045e, 0x4610460, 0x4630462, 0x4650464, 0x4670466, 0x4690468, 0x46b046a, 0x46d046c, 0x46f046e, 0x4710470, 0x4730472, 0x4750474, 0x4770476, 0x4790478, 0x47b047a, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x48d048c, 0x48f048e, 0x5b305b1, 0x5b705b5, 0x5bd05ba, 0xffff05bf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5c3ffff, 0x5c705c5, 0x5cb05c9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x490ffff, 0x4920491, 0x4940493, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0x4a604a5, 0x4a804a7, 0xffff04a9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4ab04aa, 0x4ad04ac, 0x4af04ae, 0x4b104b0, 0x4b304b2, 0x4b504b4, 0x4b704b6, 0x4b904b8, 0x4bb04ba, 0x4bd04bc, 0x4bf04be, 0x4c104c0, 0x4c304c2, 0x4c504c4, 0x4c704c6, 0x4c904c8, 0x4cb04ca, 0x4cd04cc, 0x4cf04ce, 0x4d104d0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4d304d2, 0x4d504d4, 0x4d704d6, 0x4d904d8, 0x4db04da, 0x4dd04dc, 0x4df04de, 0x4e104e0, 0x4e304e2, 0x4e504e4, 0x4e704e6, 0x4e904e8, 0x4eb04ea, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0x4f304f2, 0x4f504f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4f6ffff, 0x4f804f7, 0x4fa04f9, 0x4fc04fb, 0x4fe04fd, 0x50004ff, 0x501ffff, 0x5030502, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50d050c, 0x50f050e, 0x510ffff, 0x5120511, 0x5140513, 0x5160515, 0x517ffff, 0xffff0518, 0xffffffff, 0x51a0519, 0x51c051b, 0x51e051d, 0x520051f, 0x5220521, 0x5240523, 0x5260525, 0x5280527, 0x52a0529, 0x52c052b, 0x52e052d, 0x530052f, 0x5320531, 0x5340533, 0x5360535, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0x5480547, 0x54a0549, 0xffff054b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x54d054c, 0x54f054e, 0x5510550, 0x5530552, 0x5550554, 0x5570556, 0x5590558, 0x55b055a, 0x55d055c, 0x55f055e, 0x5610560, 0x5630562, 0x5650564, 0x5670566, 0x5690568, 0x56b056a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x56d056c, 0x56f056e, 0x5710570, 0x5730572, 0x5750574, 0x5770576, 0x5790578, 0x57b057a, 0x57d057c, 0x57f057e, 0x5810580, 0x5830582, 0x5850584, 0x5870586, 0x5890588, 0x58b058a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x58d058c, 0x58f058e, 0x5910590, 0x5930592, 0x5950594, 0x5970596, 0x5990598, 0x59b059a, 0x59d059c, 0x59f059e, 0x5a105a0, 0x5a305a2, 0x5a505a4, 0x5a705a6, 0x5a905a8, 0x5ab05aa, 0x5ad05ac, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//10368 bytes -enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xf40], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x150000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x180000, 0x19, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x0, 0x0, 0x220000, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x240000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0000, 0x2b, 0x2d002c, 0x2f002e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x300000, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x320000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x340033, 0x350000, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x370000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b003a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1c001b, 0x1e001d, 0x20001f, 0x220021, 0x240023, 0x260025, 0x280027, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0xffff0031, 0x330032, 0x350034, 0x370036, 0x390038, 0x3affff, 0x3bffff, 0x3cffff, 0x3dffff, 0x3effff, 0x3fffff, 0x40ffff, 0x41ffff, 0x42ffff, 0x43ffff, 0x44ffff, 0x45ffff, 0x46ffff, 0x47ffff, 0x48ffff, 0x49ffff, 0x4affff, 0x4bffff, 0x4cffff, 0x4dffff, 0x4effff, 0x4fffff, 0x50ffff, 0x51ffff, 0x52ffff, 0x53ffff, 0x54ffff, 0x55ffff, 0xffffffff, 0xffff0056, 0xffff0057, 0xffff0058, 0xffff0059, 0xffff005a, 0xffff005b, 0xffff005c, 0xffff005d, 0x5effff, 0x5fffff, 0x60ffff, 0x61ffff, 0x62ffff, 0x63ffff, 0x64ffff, 0x65ffff, 0x66ffff, 0x67ffff, 0x68ffff, 0x69ffff, 0x6affff, 0x6bffff, 0x6cffff, 0x6dffff, 0x6effff, 0x6fffff, 0x70ffff, 0x71ffff, 0x72ffff, 0x73ffff, 0x74ffff, 0xffffffff, 0xffff0075, 0xffff0076, 0x780077, 0xffff0079, 0x7affff, 0x7bffff, 0xffffffff, 0xffff007c, 0xffffffff, 0xffff007d, 0xffffffff, 0xffffffff, 0xffff007e, 0x7fffff, 0xffffffff, 0x80ffff, 0xffff0081, 0xffffffff, 0xffff0082, 0x83ffff, 0x84ffff, 0x85ffff, 0xffffffff, 0xffff0086, 0xffffffff, 0x87ffff, 0xffffffff, 0xffff0088, 0xffffffff, 0xffff0089, 0xffff008a, 0x8bffff, 0xffffffff, 0x8cffff, 0x8dffff, 0xffffffff, 0xffffffff, 0x8effff, 0xffff008f, 0x910090, 0x92ffff, 0xffff0093, 0xffff0094, 0xffff0095, 0xffff0096, 0xffff0097, 0xffff0098, 0xffff0099, 0xffff009a, 0x9c009b, 0x9dffff, 0x9effff, 0x9fffff, 0xa0ffff, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xffffffff, 0xa700a6, 0xa8ffff, 0xffffffff, 0xa9ffff, 0xaaffff, 0xabffff, 0xacffff, 0xadffff, 0xaeffff, 0xafffff, 0xb0ffff, 0xb1ffff, 0xb2ffff, 0xb3ffff, 0xb4ffff, 0xb5ffff, 0xb6ffff, 0xb7ffff, 0xb8ffff, 0xb9ffff, 0xbaffff, 0xbbffff, 0xbcffff, 0xffffffff, 0xbdffff, 0xbeffff, 0xbfffff, 0xc0ffff, 0xc1ffff, 0xc2ffff, 0xc3ffff, 0xc4ffff, 0xc5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00c6, 0xc7ffff, 0xffff00c8, 0xffff00c9, 0xffffffff, 0xcaffff, 0xcbffff, 0xccffff, 0xcdffff, 0xceffff, 0xd000cf, 0xd200d1, 0xffff00d3, 0xd500d4, 0xd6ffff, 0xd7ffff, 0xffff00d8, 0xffffffff, 0xda00d9, 0xdbffff, 0xdcffff, 0xffff00dd, 0xdf00de, 0xe100e0, 0xffff00e2, 0xe3ffff, 0xe4ffff, 0xffff00e5, 0xe6ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xe7ffff, 0xffffffff, 0xffff00e8, 0xea00e9, 0xffffffff, 0xebffff, 0xed00ec, 0xef00ee, 0xffff00f0, 0xffffffff, 0xffffffff, 0xffff00f1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf2ffff, 0xffff00f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf4ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf5ffff, 0xf6ffff, 0xffffffff, 0xf7ffff, 0xffffffff, 0xf8ffff, 0xfa00f9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfc00fb, 0xfe00fd, 0xffffff, 0x1010100, 0x1030102, 0x1050104, 0x1070106, 0x1090108, 0x10b010a, 0x10d010c, 0x10f010e, 0x1110110, 0x1130112, 0x1150114, 0x1170116, 0x1190118, 0x11b011a, 0xffff011c, 0x11e011d, 0xffffffff, 0x11fffff, 0x1210120, 0x122ffff, 0x123ffff, 0x124ffff, 0x125ffff, 0x126ffff, 0x127ffff, 0x128ffff, 0x129ffff, 0x12affff, 0x12bffff, 0x12cffff, 0x12dffff, 0x12f012e, 0x1310130, 0x132ffff, 0xffffffff, 0xffff0133, 0x134ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1360135, 0x1380137, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0x14c014b, 0x14e014d, 0x150014f, 0x1520151, 0x1540153, 0x1560155, 0x1580157, 0x15a0159, 0x15c015b, 0x15e015d, 0x160015f, 0x1620161, 0x1640163, 0x165ffff, 0x166ffff, 0x167ffff, 0x168ffff, 0x169ffff, 0x16affff, 0x16bffff, 0x16cffff, 0x16dffff, 0x16effff, 0x16fffff, 0x170ffff, 0x171ffff, 0x172ffff, 0x173ffff, 0x174ffff, 0x175ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x176ffff, 0x177ffff, 0x178ffff, 0x179ffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0x17fffff, 0x180ffff, 0x181ffff, 0x182ffff, 0x183ffff, 0x184ffff, 0x185ffff, 0x186ffff, 0x187ffff, 0x188ffff, 0x189ffff, 0x18affff, 0x18bffff, 0x18cffff, 0x18dffff, 0x18effff, 0x18fffff, 0x190ffff, 0xffffffff, 0xffff0191, 0xffff0192, 0xffff0193, 0xffff0194, 0xffff0195, 0xffff0196, 0x1980197, 0x199ffff, 0x19affff, 0x19bffff, 0x19cffff, 0x19dffff, 0x19effff, 0x19fffff, 0x1a0ffff, 0x1a1ffff, 0x1a2ffff, 0x1a3ffff, 0x1a4ffff, 0x1a5ffff, 0x1a6ffff, 0x1a7ffff, 0x1a8ffff, 0x1a9ffff, 0x1aaffff, 0x1abffff, 0x1acffff, 0x1adffff, 0x1aeffff, 0x1afffff, 0x1b0ffff, 0x1b1ffff, 0x1b2ffff, 0x1b3ffff, 0x1b4ffff, 0x1b5ffff, 0x1b6ffff, 0x1b7ffff, 0x1b8ffff, 0x1b9ffff, 0x1baffff, 0x1bbffff, 0x1bcffff, 0x1bdffff, 0x1beffff, 0x1bfffff, 0x1c0ffff, 0x1c1ffff, 0x1c2ffff, 0x1c3ffff, 0x1c4ffff, 0x1c5ffff, 0x1c6ffff, 0x1c7ffff, 0x1c8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1c9ffff, 0x1cb01ca, 0x1cd01cc, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0x1d501d4, 0x1d701d6, 0x1d901d8, 0x1db01da, 0x1dd01dc, 0x1df01de, 0x1e101e0, 0x1e301e2, 0x1e501e4, 0x1e701e6, 0x1e901e8, 0x1eb01ea, 0x1ed01ec, 0xffff01ee, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f001ef, 0x1f201f1, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fc01fb, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0xffff0219, 0x21affff, 0x21c021b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x21e021d, 0x220021f, 0x2220221, 0xffffffff, 0x2240223, 0x2260225, 0x2280227, 0x22a0229, 0xffff022b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x22cffff, 0xffffffff, 0x22dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff022e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x22fffff, 0x230ffff, 0x231ffff, 0x232ffff, 0x233ffff, 0x234ffff, 0x235ffff, 0x236ffff, 0x237ffff, 0x238ffff, 0x239ffff, 0x23affff, 0x23bffff, 0x23cffff, 0x23dffff, 0x23effff, 0x23fffff, 0x240ffff, 0x241ffff, 0x242ffff, 0x243ffff, 0x244ffff, 0x245ffff, 0x246ffff, 0x247ffff, 0x248ffff, 0x249ffff, 0x24affff, 0x24bffff, 0x24cffff, 0x24dffff, 0x24effff, 0x24fffff, 0x250ffff, 0x251ffff, 0x252ffff, 0x253ffff, 0x254ffff, 0x255ffff, 0x256ffff, 0x257ffff, 0x258ffff, 0x259ffff, 0x25affff, 0x25bffff, 0x25cffff, 0x25dffff, 0x25effff, 0x25fffff, 0x260ffff, 0x261ffff, 0x262ffff, 0x263ffff, 0x264ffff, 0x265ffff, 0x266ffff, 0x267ffff, 0x268ffff, 0x269ffff, 0x26affff, 0x26bffff, 0x26cffff, 0x26dffff, 0x26effff, 0x26fffff, 0x270ffff, 0x271ffff, 0x272ffff, 0x273ffff, 0x274ffff, 0x275ffff, 0x276ffff, 0x277ffff, 0x278ffff, 0x279ffff, 0xffffffff, 0xffffffff, 0x27affff, 0xffffffff, 0xffffffff, 0x27bffff, 0x27cffff, 0x27dffff, 0x27effff, 0x27fffff, 0x280ffff, 0x281ffff, 0x282ffff, 0x283ffff, 0x284ffff, 0x285ffff, 0x286ffff, 0x287ffff, 0x288ffff, 0x289ffff, 0x28affff, 0x28bffff, 0x28cffff, 0x28dffff, 0x28effff, 0x28fffff, 0x290ffff, 0x291ffff, 0x292ffff, 0x293ffff, 0x294ffff, 0x295ffff, 0x296ffff, 0x297ffff, 0x298ffff, 0x299ffff, 0x29affff, 0x29bffff, 0x29cffff, 0x29dffff, 0x29effff, 0x29fffff, 0x2a0ffff, 0x2a1ffff, 0x2a2ffff, 0x2a3ffff, 0x2a4ffff, 0x2a5ffff, 0x2a6ffff, 0x2a7ffff, 0x2a8ffff, 0x2a9ffff, 0x2aaffff, 0x2ac02ab, 0x2ae02ad, 0x2b002af, 0x2b202b1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2b402b3, 0x2b602b5, 0x2b802b7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ba02b9, 0x2bc02bb, 0x2be02bd, 0x2c002bf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2c202c1, 0x2c402c3, 0x2c602c5, 0x2c802c7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ca02c9, 0x2cc02cb, 0x2ce02cd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cfffff, 0x2d0ffff, 0x2d1ffff, 0x2d2ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d402d3, 0x2d602d5, 0x2d802d7, 0x2da02d9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2dc02db, 0x2de02dd, 0x2e002df, 0x2e202e1, 0x2e402e3, 0x2e602e5, 0x2e802e7, 0xffffffff, 0x2ea02e9, 0x2ec02eb, 0x2ee02ed, 0x2f002ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2f202f1, 0x2f402f3, 0x2f602f5, 0x2f802f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2fa02f9, 0x2fc02fb, 0x2fe02fd, 0x30002ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3020301, 0x303ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0304, 0xffffffff, 0x305ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3070306, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3090308, 0xffffffff, 0x30affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff030c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30e030d, 0x310030f, 0x3120311, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0x31c031b, 0xffffffff, 0xffffffff, 0xffff031d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x31f031e, 0x3210320, 0x3230322, 0x3250324, 0x3270326, 0x3290328, 0x32b032a, 0x32d032c, 0x32f032e, 0x3310330, 0x3330332, 0x3350334, 0x3370336, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3390338, 0x33b033a, 0x33d033c, 0x33f033e, 0x3410340, 0x3430342, 0x3450344, 0x3470346, 0x3490348, 0x34b034a, 0x34d034c, 0x34f034e, 0x3510350, 0x3530352, 0x3550354, 0x3570356, 0x3590358, 0x35b035a, 0x35d035c, 0x35f035e, 0x3610360, 0x3630362, 0x3650364, 0x3670366, 0x368ffff, 0xffffffff, 0x369ffff, 0xffff036a, 0xffff036b, 0xffff036c, 0xffff036d, 0xffffffff, 0xffffffff, 0x36effff, 0xffffffff, 0xffff036f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x370ffff, 0x371ffff, 0x372ffff, 0x373ffff, 0x374ffff, 0x375ffff, 0x376ffff, 0x377ffff, 0x378ffff, 0x379ffff, 0x37affff, 0x37bffff, 0x37cffff, 0x37dffff, 0x37effff, 0x37fffff, 0x380ffff, 0x381ffff, 0x382ffff, 0x383ffff, 0x384ffff, 0x385ffff, 0x386ffff, 0x387ffff, 0x388ffff, 0x389ffff, 0x38affff, 0x38bffff, 0x38cffff, 0x38dffff, 0x38effff, 0x38fffff, 0x390ffff, 0x391ffff, 0x392ffff, 0x393ffff, 0x394ffff, 0x395ffff, 0x396ffff, 0x397ffff, 0x398ffff, 0x399ffff, 0x39affff, 0x39bffff, 0x39cffff, 0x39dffff, 0x39effff, 0x39fffff, 0x3a0ffff, 0x3a1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03a2, 0xffff03a3, 0xffffffff, 0x3a4ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3a603a5, 0x3a803a7, 0x3aa03a9, 0x3ac03ab, 0x3ae03ad, 0x3b003af, 0x3b203b1, 0x3b403b3, 0x3b603b5, 0x3b803b7, 0x3ba03b9, 0x3bc03bb, 0x3be03bd, 0x3c003bf, 0x3c203c1, 0x3c403c3, 0x3c603c5, 0x3c803c7, 0x3ca03c9, 0x3cbffff, 0xffffffff, 0xffffffff, 0x3ccffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3cdffff, 0x3ceffff, 0x3cfffff, 0x3d0ffff, 0x3d1ffff, 0x3d2ffff, 0x3d3ffff, 0x3d4ffff, 0x3d5ffff, 0x3d6ffff, 0x3d7ffff, 0x3d8ffff, 0x3d9ffff, 0x3daffff, 0x3dbffff, 0x3dcffff, 0x3ddffff, 0x3deffff, 0x3dfffff, 0x3e0ffff, 0x3e1ffff, 0x3e2ffff, 0x3e3ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3e4ffff, 0x3e5ffff, 0x3e6ffff, 0x3e7ffff, 0x3e8ffff, 0x3e9ffff, 0x3eaffff, 0x3ebffff, 0x3ecffff, 0x3edffff, 0x3eeffff, 0x3efffff, 0x3f0ffff, 0x3f1ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f2ffff, 0x3f3ffff, 0x3f4ffff, 0x3f5ffff, 0x3f6ffff, 0x3f7ffff, 0x3f8ffff, 0xffffffff, 0x3f9ffff, 0x3faffff, 0x3fbffff, 0x3fcffff, 0x3fdffff, 0x3feffff, 0x3ffffff, 0x400ffff, 0x401ffff, 0x402ffff, 0x403ffff, 0x404ffff, 0x405ffff, 0x406ffff, 0x407ffff, 0x408ffff, 0x409ffff, 0x40affff, 0x40bffff, 0x40cffff, 0x40dffff, 0x40effff, 0x40fffff, 0x410ffff, 0x411ffff, 0x412ffff, 0x413ffff, 0x414ffff, 0x415ffff, 0x416ffff, 0x417ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0418, 0xffff0419, 0x41affff, 0x41bffff, 0x41cffff, 0x41dffff, 0x41effff, 0xffffffff, 0xffffffff, 0xffff041f, 0xffffffff, 0x420ffff, 0x421ffff, 0xffff0422, 0x423ffff, 0x424ffff, 0x425ffff, 0x426ffff, 0x427ffff, 0x428ffff, 0x429ffff, 0x42affff, 0x42bffff, 0x42cffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x42dffff, 0x42effff, 0x42fffff, 0x430ffff, 0x431ffff, 0x432ffff, 0x433ffff, 0x434ffff, 0xffffffff, 0xffffffff, 0xffff0435, 0xffff0436, 0xffffffff, 0xffffffff, 0x437ffff, 0xffffffff, 0xffffffff, 0x438ffff, 0x439ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff043a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43d043c, 0x43f043e, 0x4410440, 0x4430442, 0x4450444, 0x4470446, 0x4490448, 0x44b044a, 0x44d044c, 0x44f044e, 0x4510450, 0x4530452, 0x4550454, 0x4570456, 0x4590458, 0x45b045a, 0x45d045c, 0x45f045e, 0x4610460, 0x4630462, 0x4650464, 0x4670466, 0x4690468, 0x46b046a, 0x46d046c, 0x46f046e, 0x4710470, 0x4730472, 0x4750474, 0x4770476, 0x4790478, 0x47b047a, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x48cffff, 0x48e048d, 0x490048f, 0x4920491, 0x4940493, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0xffff04a5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4a704a6, 0x4a904a8, 0x4ab04aa, 0x4ad04ac, 0x4af04ae, 0x4b104b0, 0x4b304b2, 0x4b504b4, 0x4b704b6, 0x4b904b8, 0x4bb04ba, 0x4bd04bc, 0x4bf04be, 0x4c104c0, 0x4c304c2, 0x4c504c4, 0x4c704c6, 0x4c904c8, 0x4cb04ca, 0x4cd04cc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4cf04ce, 0x4d104d0, 0x4d304d2, 0x4d504d4, 0x4d704d6, 0x4d904d8, 0x4db04da, 0x4dd04dc, 0x4df04de, 0x4e104e0, 0x4e304e2, 0x4e504e4, 0x4e704e6, 0x4e904e8, 0x4eb04ea, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4f2ffff, 0x4f404f3, 0x4f604f5, 0x4f804f7, 0x4fa04f9, 0x4fc04fb, 0x4fdffff, 0x4ff04fe, 0x5010500, 0x5030502, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50cffff, 0x50e050d, 0x510050f, 0x5120511, 0x513ffff, 0xffff0514, 0xffffffff, 0x5160515, 0x5180517, 0x51a0519, 0x51c051b, 0x51e051d, 0x520051f, 0x5220521, 0x5240523, 0x5260525, 0x5280527, 0x52a0529, 0x52c052b, 0x52e052d, 0x530052f, 0x5320531, 0x5340533, 0x5360535, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0xffff0547, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5490548, 0x54b054a, 0x54d054c, 0x54f054e, 0x5510550, 0x5530552, 0x5550554, 0x5570556, 0x5590558, 0x55b055a, 0x55d055c, 0x55f055e, 0x5610560, 0x5630562, 0x5650564, 0x5670566, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5690568, 0x56b056a, 0x56d056c, 0x56f056e, 0x5710570, 0x5730572, 0x5750574, 0x5770576, 0x5790578, 0x57b057a, 0x57d057c, 0x57f057e, 0x5810580, 0x5830582, 0x5850584, 0x5870586, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5890588, 0x58b058a, 0x58d058c, 0x58f058e, 0x5910590, 0x5930592, 0x5950594, 0x5970596, 0x5990598, 0x59b059a, 0x59d059c, 0x59f059e, 0x5a105a0, 0x5a305a2, 0x5a505a4, 0x5a705a6, 0x5a905a8, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//9856 bytes -enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xe40], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x20000, 0x40003, 0x60005, 0x80007, 0x0, 0x90000, 0xb000a, 0xd000c, 0xf000e, 0x110010, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x150014, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x180017, 0x1a0019, 0x1c001b, 0x1e001d, 0x0, 0x0, 0x20001f, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x230022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x250024, 0x270026, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x280000, 0x29, 0x2b002a, 0x2d002c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x310030, 0x320000, 0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x360000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x230022, 0x250024, 0x270026, 0x290028, 0x2b002a, 0x2d002c, 0x2f002e, 0xffff0030, 0x320031, 0x340033, 0x360035, 0xffff0037, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0038, 0xffff0039, 0xffff003a, 0xffff003b, 0xffff003c, 0xffff003d, 0xffff003e, 0xffff003f, 0xffff0040, 0xffff0041, 0xffff0042, 0xffff0043, 0xffff0044, 0xffff0045, 0xffff0046, 0xffff0047, 0xffff0048, 0xffff0049, 0xffff004a, 0xffff004b, 0xffff004c, 0xffff004d, 0xffff004e, 0xffff004f, 0xffff0050, 0xffff0051, 0xffff0052, 0xffff0053, 0x54ffff, 0x55ffff, 0x56ffff, 0x57ffff, 0x58ffff, 0x59ffff, 0x5affff, 0x5bffff, 0xffffffff, 0xffff005c, 0xffff005d, 0xffff005e, 0xffff005f, 0xffff0060, 0xffff0061, 0xffff0062, 0xffff0063, 0xffff0064, 0xffff0065, 0xffff0066, 0xffff0067, 0xffff0068, 0xffff0069, 0xffff006a, 0xffff006b, 0xffff006c, 0xffff006d, 0xffff006e, 0xffff006f, 0xffff0070, 0xffff0071, 0xffff0072, 0x740073, 0x75ffff, 0x76ffff, 0xffffffff, 0x77ffff, 0xffff0078, 0xffff0079, 0x7b007a, 0x7cffff, 0x7e007d, 0xffffffff, 0x80007f, 0x820081, 0x83ffff, 0xffff0084, 0x860085, 0xffff0087, 0xffffffff, 0x890088, 0x8affff, 0xffff008b, 0xffff008c, 0xffff008d, 0x8f008e, 0x90ffff, 0xffffffff, 0xffff0091, 0x930092, 0x94ffff, 0x960095, 0x97ffff, 0x98ffff, 0xffff0099, 0xffffffff, 0xffff009a, 0xffffffff, 0xffffffff, 0xffffffff, 0x9c009b, 0x9dffff, 0xffff009e, 0xa0009f, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xa6ffff, 0xa7ffff, 0xa8ffff, 0xffffffff, 0xffff00a9, 0xffff00aa, 0xffff00ab, 0xffff00ac, 0xffff00ad, 0xffff00ae, 0xffff00af, 0xffff00b0, 0xffff00b1, 0xb2ffff, 0xffff00b3, 0xffff00b4, 0xb600b5, 0xffff00b7, 0xffff00b8, 0xffff00b9, 0xffff00ba, 0xffff00bb, 0xffff00bc, 0xffff00bd, 0xffff00be, 0xffff00bf, 0xffff00c0, 0xffff00c1, 0xffff00c2, 0xffff00c3, 0xffff00c4, 0xffff00c5, 0xffff00c6, 0xffff00c7, 0xffff00c8, 0xffff00c9, 0xffff00ca, 0xffff00cb, 0xffff00cc, 0xffff00cd, 0xffff00ce, 0xffff00cf, 0xffff00d0, 0xffff00d1, 0xffff00d2, 0xffff00d3, 0xffff00d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xd600d5, 0xd7ffff, 0xffff00d8, 0xd9ffff, 0xdaffff, 0xdc00db, 0xffff00dd, 0xffff00de, 0xffff00df, 0xffff00e0, 0xffff00e1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00e2, 0xffff00e3, 0xffffffff, 0xffff00e4, 0xffffffff, 0xffffffff, 0xffffffff, 0xe5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00e6, 0xe800e7, 0xffff00e9, 0xffff00ea, 0xec00eb, 0xedffff, 0xef00ee, 0xf100f0, 0xf300f2, 0xf500f4, 0xf700f6, 0xf900f8, 0xfb00fa, 0xfd00fc, 0xfeffff, 0x10000ff, 0x1020101, 0x1040103, 0x1060105, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x107ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0108, 0xffff0109, 0xffff010a, 0xffff010b, 0xffff010c, 0xffff010d, 0xffff010e, 0xffff010f, 0xffff0110, 0xffff0111, 0xffff0112, 0xffff0113, 0xffffffff, 0xffffffff, 0xffff0114, 0x115ffff, 0x116ffff, 0xffff0117, 0x118ffff, 0x11a0119, 0x11c011b, 0x11e011d, 0x120011f, 0x1220121, 0x1240123, 0x1260125, 0x1280127, 0x12a0129, 0x12c012b, 0x12e012d, 0x130012f, 0x1320131, 0x1340133, 0x1360135, 0x1380137, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff014b, 0xffff014c, 0xffff014d, 0xffff014e, 0xffff014f, 0xffff0150, 0xffff0151, 0xffff0152, 0xffff0153, 0xffff0154, 0xffff0155, 0xffff0156, 0xffff0157, 0xffff0158, 0xffff0159, 0xffff015a, 0xffff015b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff015c, 0xffff015d, 0xffff015e, 0xffff015f, 0xffff0160, 0xffff0161, 0xffff0162, 0xffff0163, 0xffff0164, 0xffff0165, 0xffff0166, 0xffff0167, 0xffff0168, 0xffff0169, 0xffff016a, 0xffff016b, 0xffff016c, 0xffff016d, 0xffff016e, 0xffff016f, 0xffff0170, 0xffff0171, 0xffff0172, 0xffff0173, 0xffff0174, 0xffff0175, 0xffff0176, 0x1780177, 0x179ffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0xffffffff, 0xffff017f, 0xffff0180, 0xffff0181, 0xffff0182, 0xffff0183, 0xffff0184, 0xffff0185, 0xffff0186, 0xffff0187, 0xffff0188, 0xffff0189, 0xffff018a, 0xffff018b, 0xffff018c, 0xffff018d, 0xffff018e, 0xffff018f, 0xffff0190, 0xffff0191, 0xffff0192, 0xffff0193, 0xffff0194, 0xffff0195, 0xffff0196, 0xffff0197, 0xffff0198, 0xffff0199, 0xffff019a, 0xffff019b, 0xffff019c, 0xffff019d, 0xffff019e, 0xffff019f, 0xffff01a0, 0xffff01a1, 0xffff01a2, 0xffff01a3, 0xffff01a4, 0xffff01a5, 0xffff01a6, 0xffff01a7, 0xffff01a8, 0xffff01a9, 0xffff01aa, 0xffff01ab, 0xffff01ac, 0xffff01ad, 0xffff01ae, 0x1afffff, 0x1b101b0, 0x1b301b2, 0x1b501b4, 0x1b701b6, 0x1b901b8, 0x1bb01ba, 0x1bd01bc, 0x1bf01be, 0x1c101c0, 0x1c301c2, 0x1c501c4, 0x1c701c6, 0x1c901c8, 0x1cb01ca, 0x1cd01cc, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0xffff01d4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1d601d5, 0x1d801d7, 0x1da01d9, 0x1dc01db, 0x1de01dd, 0x1e001df, 0x1e201e1, 0x1e401e3, 0x1e601e5, 0x1e801e7, 0x1ea01e9, 0x1ec01eb, 0x1ee01ed, 0x1f001ef, 0x1f201f1, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fbffff, 0xffffffff, 0xffffffff, 0x1fcffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0x21a0219, 0x21c021b, 0x21e021d, 0x220021f, 0x2220221, 0x2240223, 0x2260225, 0x2280227, 0x22a0229, 0x22c022b, 0x22e022d, 0x230022f, 0x2320231, 0x2340233, 0x2360235, 0x2380237, 0x23a0239, 0x23c023b, 0x23e023d, 0x240023f, 0x2420241, 0x2440243, 0x2460245, 0x2480247, 0x24a0249, 0x24c024b, 0x24e024d, 0x250024f, 0x2520251, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2540253, 0x2560255, 0x2580257, 0x25a0259, 0x25c025b, 0x25e025d, 0x260025f, 0x2620261, 0x2640263, 0x2660265, 0x2680267, 0x26a0269, 0x26c026b, 0x26e026d, 0x270026f, 0x2720271, 0x2740273, 0x2760275, 0x2780277, 0x27a0279, 0x27c027b, 0xffff027d, 0x27effff, 0x280027f, 0xffff0281, 0xffff0282, 0xffff0283, 0xffff0284, 0xffff0285, 0xffff0286, 0xffff0287, 0xffff0288, 0xffff0289, 0xffff028a, 0xffff028b, 0xffff028c, 0xffff028d, 0xffff028e, 0xffff028f, 0xffff0290, 0xffff0291, 0xffff0292, 0xffff0293, 0xffff0294, 0xffff0295, 0xffff0296, 0xffff0297, 0xffff0298, 0xffff0299, 0xffff029a, 0xffff029b, 0xffff029c, 0xffff029d, 0xffff029e, 0xffff029f, 0xffff02a0, 0xffff02a1, 0xffff02a2, 0xffff02a3, 0xffff02a4, 0xffff02a5, 0xffff02a6, 0xffff02a7, 0xffff02a8, 0xffff02a9, 0xffff02aa, 0xffff02ab, 0xffff02ac, 0xffff02ad, 0xffff02ae, 0xffff02af, 0xffff02b0, 0xffff02b1, 0xffff02b2, 0xffff02b3, 0xffff02b4, 0xffff02b5, 0xffff02b6, 0xffff02b7, 0xffff02b8, 0xffff02b9, 0xffff02ba, 0xffff02bb, 0xffff02bc, 0xffff02bd, 0xffff02be, 0xffff02bf, 0xffff02c0, 0xffff02c1, 0xffff02c2, 0xffff02c3, 0xffff02c4, 0xffff02c5, 0xffff02c6, 0xffff02c7, 0xffff02c8, 0xffff02c9, 0xffff02ca, 0xffff02cb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff02cc, 0xffff02cd, 0xffff02ce, 0xffff02cf, 0xffff02d0, 0xffff02d1, 0xffff02d2, 0xffff02d3, 0xffff02d4, 0xffff02d5, 0xffff02d6, 0xffff02d7, 0xffff02d8, 0xffff02d9, 0xffff02da, 0xffff02db, 0xffff02dc, 0xffff02dd, 0xffff02de, 0xffff02df, 0xffff02e0, 0xffff02e1, 0xffff02e2, 0xffff02e3, 0xffff02e4, 0xffff02e5, 0xffff02e6, 0xffff02e7, 0xffff02e8, 0xffff02e9, 0xffff02ea, 0xffff02eb, 0xffff02ec, 0xffff02ed, 0xffff02ee, 0xffff02ef, 0xffff02f0, 0xffff02f1, 0xffff02f2, 0xffff02f3, 0xffff02f4, 0xffff02f5, 0xffff02f6, 0xffff02f7, 0xffff02f8, 0xffff02f9, 0xffff02fa, 0xffff02fb, 0xffff02fc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2fe02fd, 0x30002ff, 0x3020301, 0x3040303, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3060305, 0x3080307, 0x30a0309, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30c030b, 0x30e030d, 0x310030f, 0x3120311, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x31c031b, 0x31e031d, 0x320031f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x321ffff, 0x322ffff, 0x323ffff, 0x324ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3260325, 0x3280327, 0x32a0329, 0x32c032b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x32e032d, 0x330032f, 0x3320331, 0x3340333, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3360335, 0x3380337, 0x33a0339, 0x33c033b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x33e033d, 0x340033f, 0x3420341, 0x3440343, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3460345, 0x3480347, 0xffff0349, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x34b034a, 0x34d034c, 0xffff034e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x350034f, 0x3520351, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3540353, 0x3560355, 0xffff0357, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3590358, 0x35b035a, 0xffff035c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff035d, 0xffffffff, 0x35f035e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0360, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3620361, 0x3640363, 0x3660365, 0x3680367, 0x36a0369, 0x36c036b, 0x36e036d, 0x370036f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x371ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3730372, 0x3750374, 0x3770376, 0x3790378, 0x37b037a, 0x37d037c, 0x37f037e, 0x3810380, 0x3830382, 0x3850384, 0x3870386, 0x3890388, 0x38b038a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x38d038c, 0x38f038e, 0x3910390, 0x3930392, 0x3950394, 0x3970396, 0x3990398, 0x39b039a, 0x39d039c, 0x39f039e, 0x3a103a0, 0x3a303a2, 0x3a503a4, 0x3a703a6, 0x3a903a8, 0x3ab03aa, 0x3ad03ac, 0x3af03ae, 0x3b103b0, 0x3b303b2, 0x3b503b4, 0x3b703b6, 0x3b903b8, 0x3bb03ba, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03bc, 0x3be03bd, 0xffff03bf, 0x3c0ffff, 0x3c1ffff, 0x3c2ffff, 0x3c3ffff, 0x3c503c4, 0xffff03c6, 0xffff03c7, 0x3c8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ca03c9, 0xffff03cb, 0xffff03cc, 0xffff03cd, 0xffff03ce, 0xffff03cf, 0xffff03d0, 0xffff03d1, 0xffff03d2, 0xffff03d3, 0xffff03d4, 0xffff03d5, 0xffff03d6, 0xffff03d7, 0xffff03d8, 0xffff03d9, 0xffff03da, 0xffff03db, 0xffff03dc, 0xffff03dd, 0xffff03de, 0xffff03df, 0xffff03e0, 0xffff03e1, 0xffff03e2, 0xffff03e3, 0xffff03e4, 0xffff03e5, 0xffff03e6, 0xffff03e7, 0xffff03e8, 0xffff03e9, 0xffff03ea, 0xffff03eb, 0xffff03ec, 0xffff03ed, 0xffff03ee, 0xffff03ef, 0xffff03f0, 0xffff03f1, 0xffff03f2, 0xffff03f3, 0xffff03f4, 0xffff03f5, 0xffff03f6, 0xffff03f7, 0xffff03f8, 0xffff03f9, 0xffff03fa, 0xffff03fb, 0xffff03fc, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fdffff, 0x3feffff, 0xffffffff, 0xffffffff, 0xffff03ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0400, 0xffff0401, 0xffff0402, 0xffff0403, 0xffff0404, 0xffff0405, 0xffff0406, 0xffff0407, 0xffff0408, 0xffff0409, 0xffff040a, 0xffff040b, 0xffff040c, 0xffff040d, 0xffff040e, 0xffff040f, 0xffff0410, 0xffff0411, 0xffff0412, 0xffff0413, 0xffff0414, 0xffff0415, 0xffff0416, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0417, 0xffff0418, 0xffff0419, 0xffff041a, 0xffff041b, 0xffff041c, 0xffff041d, 0xffff041e, 0xffff041f, 0xffff0420, 0xffff0421, 0xffff0422, 0xffff0423, 0xffff0424, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0425, 0xffff0426, 0xffff0427, 0xffff0428, 0xffff0429, 0xffff042a, 0xffff042b, 0xffffffff, 0xffff042c, 0xffff042d, 0xffff042e, 0xffff042f, 0xffff0430, 0xffff0431, 0xffff0432, 0xffff0433, 0xffff0434, 0xffff0435, 0xffff0436, 0xffff0437, 0xffff0438, 0xffff0439, 0xffff043a, 0xffff043b, 0xffff043c, 0xffff043d, 0xffff043e, 0xffff043f, 0xffff0440, 0xffff0441, 0xffff0442, 0xffff0443, 0xffff0444, 0xffff0445, 0xffff0446, 0xffff0447, 0xffff0448, 0xffff0449, 0xffff044a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x44bffff, 0x44cffff, 0x44dffff, 0xffff044e, 0xffff044f, 0xffff0450, 0xffff0451, 0xffff0452, 0xffffffff, 0x453ffff, 0x454ffff, 0xffffffff, 0xffff0455, 0xffff0456, 0xffffffff, 0xffff0457, 0xffff0458, 0xffff0459, 0xffff045a, 0xffff045b, 0xffff045c, 0xffff045d, 0xffff045e, 0xffff045f, 0xffff0460, 0x4620461, 0x4640463, 0xffff0465, 0x4670466, 0x4690468, 0xffff046a, 0xffff046b, 0xffff046c, 0xffff046d, 0xffff046e, 0xffff046f, 0xffff0470, 0xffff0471, 0x4730472, 0x4750474, 0x476ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0477, 0xffffffff, 0xffffffff, 0xffff0478, 0xffff0479, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x47affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x47bffff, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x48d048c, 0x48f048e, 0x4910490, 0x4930492, 0xffff0494, 0xffffffff, 0xffffffff, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0x4a604a5, 0x4a804a7, 0x4aa04a9, 0x4ac04ab, 0x4ae04ad, 0x4b004af, 0x4b204b1, 0x4b404b3, 0x4b604b5, 0x4b804b7, 0x4ba04b9, 0x4bc04bb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4be04bd, 0x4c004bf, 0x4c204c1, 0x4c404c3, 0x4c604c5, 0x4c804c7, 0x4ca04c9, 0x4cc04cb, 0x4ce04cd, 0x4d004cf, 0x4d204d1, 0x4d404d3, 0x4d604d5, 0x4d804d7, 0x4da04d9, 0x4dc04db, 0x4de04dd, 0x4e004df, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4e204e1, 0x4e404e3, 0x4e604e5, 0x4e804e7, 0x4ea04e9, 0xffff04eb, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0x4f304f2, 0x4f504f4, 0x4f704f6, 0x4f904f8, 0xffff04fa, 0x4fc04fb, 0x4fe04fd, 0x50004ff, 0xffff0501, 0x5030502, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50d050c, 0x50f050e, 0x5110510, 0x5130512, 0x5150514, 0x5170516, 0x5190518, 0x51b051a, 0x51d051c, 0x51f051e, 0x5210520, 0x5230522, 0x5250524, 0x5270526, 0x5290528, 0x52b052a, 0x52d052c, 0x52f052e, 0x5310530, 0x5330532, 0x5350534, 0xffff0536, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0x5480547, 0x54a0549, 0x54c054b, 0x54e054d, 0x550054f, 0x5520551, 0x5540553, 0x5560555, 0x5580557, 0x55a0559, 0x55c055b, 0x55e055d, 0x560055f, 0x5620561, 0x5640563, 0x5660565, 0x5680567, 0x56a0569, 0x56c056b, 0x56e056d, 0x570056f, 0x5720571, 0x5740573, 0x5760575, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x5780577, 0x57a0579, 0x57c057b, 0x57e057d, 0x580057f, 0x5820581, 0x5840583, 0x5860585, 0x5880587, 0x58a0589, 0x58c058b, 0x58e058d, 0x590058f, 0x5920591, 0x5940593, 0x5960595, 0x5980597, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -//10368 bytes -enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x40, 0x280], [ 0x100, 0x480, 0xf40], [ 0x2020100, 0x4020302, 0x6020205, 0x7020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x2020202, 0x10000, 0x30002, 0x50004, 0x70006, 0x90008, 0xa, 0xb0000, 0xd000c, 0xf000e, 0x110010, 0x130012, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x150000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x180000, 0x19, 0x1b001a, 0x1d001c, 0x1f001e, 0x210020, 0x0, 0x0, 0x220000, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x240000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x260025, 0x280027, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a0000, 0x2b, 0x2d002c, 0x2f002e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x300000, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x320000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x340033, 0x350000, 0x0, 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x370000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b003a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff, 0x20001, 0x40003, 0x60005, 0x80007, 0xa0009, 0xc000b, 0xe000d, 0x10000f, 0x120011, 0x140013, 0x160015, 0x180017, 0xffff0019, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1affff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1c001b, 0x1e001d, 0x20001f, 0x220021, 0x240023, 0x260025, 0x280027, 0x2a0029, 0x2c002b, 0x2e002d, 0x30002f, 0xffff0031, 0x330032, 0x350034, 0x370036, 0x390038, 0x3affff, 0x3bffff, 0x3cffff, 0x3dffff, 0x3effff, 0x3fffff, 0x40ffff, 0x41ffff, 0x42ffff, 0x43ffff, 0x44ffff, 0x45ffff, 0x46ffff, 0x47ffff, 0x48ffff, 0x49ffff, 0x4affff, 0x4bffff, 0x4cffff, 0x4dffff, 0x4effff, 0x4fffff, 0x50ffff, 0x51ffff, 0x52ffff, 0x53ffff, 0x54ffff, 0x55ffff, 0xffffffff, 0xffff0056, 0xffff0057, 0xffff0058, 0xffff0059, 0xffff005a, 0xffff005b, 0xffff005c, 0xffff005d, 0x5effff, 0x5fffff, 0x60ffff, 0x61ffff, 0x62ffff, 0x63ffff, 0x64ffff, 0x65ffff, 0x66ffff, 0x67ffff, 0x68ffff, 0x69ffff, 0x6affff, 0x6bffff, 0x6cffff, 0x6dffff, 0x6effff, 0x6fffff, 0x70ffff, 0x71ffff, 0x72ffff, 0x73ffff, 0x74ffff, 0xffffffff, 0xffff0075, 0xffff0076, 0x780077, 0xffff0079, 0x7affff, 0x7bffff, 0xffffffff, 0xffff007c, 0xffffffff, 0xffff007d, 0xffffffff, 0xffffffff, 0xffff007e, 0x7fffff, 0xffffffff, 0x80ffff, 0xffff0081, 0xffffffff, 0xffff0082, 0x83ffff, 0x84ffff, 0x85ffff, 0xffffffff, 0xffff0086, 0xffffffff, 0x87ffff, 0xffffffff, 0xffff0088, 0xffffffff, 0xffff0089, 0xffff008a, 0x8bffff, 0xffffffff, 0x8cffff, 0x8dffff, 0xffffffff, 0xffffffff, 0x8f008e, 0x910090, 0x930092, 0x950094, 0xffff0096, 0xffff0097, 0xffff0098, 0xffff0099, 0xffff009a, 0xffff009b, 0xffff009c, 0xffff009d, 0x9f009e, 0xa0ffff, 0xa1ffff, 0xa2ffff, 0xa3ffff, 0xa4ffff, 0xa5ffff, 0xa6ffff, 0xa7ffff, 0xa8ffff, 0xa9ffff, 0xab00aa, 0xacffff, 0xffffffff, 0xadffff, 0xaeffff, 0xafffff, 0xb0ffff, 0xb1ffff, 0xb2ffff, 0xb3ffff, 0xb4ffff, 0xb5ffff, 0xb6ffff, 0xb7ffff, 0xb8ffff, 0xb9ffff, 0xbaffff, 0xbbffff, 0xbcffff, 0xbdffff, 0xbeffff, 0xbfffff, 0xc0ffff, 0xffffffff, 0xc1ffff, 0xc2ffff, 0xc3ffff, 0xc4ffff, 0xc5ffff, 0xc6ffff, 0xc7ffff, 0xc8ffff, 0xc9ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff00ca, 0xcbffff, 0xffff00cc, 0xffff00cd, 0xffffffff, 0xceffff, 0xcfffff, 0xd0ffff, 0xd1ffff, 0xd2ffff, 0xd400d3, 0xd600d5, 0xffff00d7, 0xd900d8, 0xdaffff, 0xdbffff, 0xffff00dc, 0xffffffff, 0xde00dd, 0xdfffff, 0xe0ffff, 0xffff00e1, 0xe300e2, 0xe500e4, 0xffff00e6, 0xe7ffff, 0xe8ffff, 0xffff00e9, 0xeaffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xebffff, 0xffffffff, 0xffff00ec, 0xee00ed, 0xffffffff, 0xefffff, 0xf100f0, 0xf300f2, 0xffff00f4, 0xffffffff, 0xffffffff, 0xffff00f5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf6ffff, 0xffff00f7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf9ffff, 0xfaffff, 0xffffffff, 0xfbffff, 0xffffffff, 0xfcffff, 0xfe00fd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x10000ff, 0x1020101, 0x103ffff, 0x1050104, 0x1070106, 0x1090108, 0x10b010a, 0x10d010c, 0x10f010e, 0x1110110, 0x1130112, 0x1150114, 0x1170116, 0x1190118, 0x11b011a, 0x11d011c, 0x11f011e, 0xffff0120, 0x1220121, 0xffffffff, 0x123ffff, 0x1250124, 0x126ffff, 0x127ffff, 0x128ffff, 0x129ffff, 0x12affff, 0x12bffff, 0x12cffff, 0x12dffff, 0x12effff, 0x12fffff, 0x130ffff, 0x131ffff, 0x1330132, 0x1350134, 0x136ffff, 0xffffffff, 0xffff0137, 0x138ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x13a0139, 0x13c013b, 0x13e013d, 0x140013f, 0x1420141, 0x1440143, 0x1460145, 0x1480147, 0x14a0149, 0x14c014b, 0x14e014d, 0x150014f, 0x1520151, 0x1540153, 0x1560155, 0x1580157, 0x15a0159, 0x15c015b, 0x15e015d, 0x160015f, 0x1620161, 0x1640163, 0x1660165, 0x1680167, 0x169ffff, 0x16affff, 0x16bffff, 0x16cffff, 0x16dffff, 0x16effff, 0x16fffff, 0x170ffff, 0x171ffff, 0x172ffff, 0x173ffff, 0x174ffff, 0x175ffff, 0x176ffff, 0x177ffff, 0x178ffff, 0x179ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17affff, 0x17bffff, 0x17cffff, 0x17dffff, 0x17effff, 0x17fffff, 0x180ffff, 0x181ffff, 0x182ffff, 0x183ffff, 0x184ffff, 0x185ffff, 0x186ffff, 0x187ffff, 0x188ffff, 0x189ffff, 0x18affff, 0x18bffff, 0x18cffff, 0x18dffff, 0x18effff, 0x18fffff, 0x190ffff, 0x191ffff, 0x192ffff, 0x193ffff, 0x194ffff, 0xffffffff, 0xffff0195, 0xffff0196, 0xffff0197, 0xffff0198, 0xffff0199, 0xffff019a, 0x19c019b, 0x19dffff, 0x19effff, 0x19fffff, 0x1a0ffff, 0x1a1ffff, 0x1a2ffff, 0x1a3ffff, 0x1a4ffff, 0x1a5ffff, 0x1a6ffff, 0x1a7ffff, 0x1a8ffff, 0x1a9ffff, 0x1aaffff, 0x1abffff, 0x1acffff, 0x1adffff, 0x1aeffff, 0x1afffff, 0x1b0ffff, 0x1b1ffff, 0x1b2ffff, 0x1b3ffff, 0x1b4ffff, 0x1b5ffff, 0x1b6ffff, 0x1b7ffff, 0x1b8ffff, 0x1b9ffff, 0x1baffff, 0x1bbffff, 0x1bcffff, 0x1bdffff, 0x1beffff, 0x1bfffff, 0x1c0ffff, 0x1c1ffff, 0x1c2ffff, 0x1c3ffff, 0x1c4ffff, 0x1c5ffff, 0x1c6ffff, 0x1c7ffff, 0x1c8ffff, 0x1c9ffff, 0x1caffff, 0x1cbffff, 0x1ccffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1cdffff, 0x1cf01ce, 0x1d101d0, 0x1d301d2, 0x1d501d4, 0x1d701d6, 0x1d901d8, 0x1db01da, 0x1dd01dc, 0x1df01de, 0x1e101e0, 0x1e301e2, 0x1e501e4, 0x1e701e6, 0x1e901e8, 0x1eb01ea, 0x1ed01ec, 0x1ef01ee, 0x1f101f0, 0xffff01f2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1f401f3, 0x1f601f5, 0x1f801f7, 0x1fa01f9, 0x1fc01fb, 0x1fe01fd, 0x20001ff, 0x2020201, 0x2040203, 0x2060205, 0x2080207, 0x20a0209, 0x20c020b, 0x20e020d, 0x210020f, 0x2120211, 0x2140213, 0x2160215, 0x2180217, 0x21a0219, 0x21c021b, 0xffff021d, 0x21effff, 0x220021f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2220221, 0x2240223, 0x2260225, 0xffffffff, 0x2280227, 0x22a0229, 0x22c022b, 0x22e022d, 0xffff022f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x230ffff, 0xffffffff, 0x231ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0232, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x233ffff, 0x234ffff, 0x235ffff, 0x236ffff, 0x237ffff, 0x238ffff, 0x239ffff, 0x23affff, 0x23bffff, 0x23cffff, 0x23dffff, 0x23effff, 0x23fffff, 0x240ffff, 0x241ffff, 0x242ffff, 0x243ffff, 0x244ffff, 0x245ffff, 0x246ffff, 0x247ffff, 0x248ffff, 0x249ffff, 0x24affff, 0x24bffff, 0x24cffff, 0x24dffff, 0x24effff, 0x24fffff, 0x250ffff, 0x251ffff, 0x252ffff, 0x253ffff, 0x254ffff, 0x255ffff, 0x256ffff, 0x257ffff, 0x258ffff, 0x259ffff, 0x25affff, 0x25bffff, 0x25cffff, 0x25dffff, 0x25effff, 0x25fffff, 0x260ffff, 0x261ffff, 0x262ffff, 0x263ffff, 0x264ffff, 0x265ffff, 0x266ffff, 0x267ffff, 0x268ffff, 0x269ffff, 0x26affff, 0x26bffff, 0x26cffff, 0x26dffff, 0x26effff, 0x26fffff, 0x270ffff, 0x271ffff, 0x272ffff, 0x273ffff, 0x274ffff, 0x275ffff, 0x276ffff, 0x277ffff, 0x278ffff, 0x279ffff, 0x27affff, 0x27bffff, 0x27cffff, 0x27dffff, 0xffffffff, 0xffffffff, 0x27effff, 0xffffffff, 0xffffffff, 0x27fffff, 0x280ffff, 0x281ffff, 0x282ffff, 0x283ffff, 0x284ffff, 0x285ffff, 0x286ffff, 0x287ffff, 0x288ffff, 0x289ffff, 0x28affff, 0x28bffff, 0x28cffff, 0x28dffff, 0x28effff, 0x28fffff, 0x290ffff, 0x291ffff, 0x292ffff, 0x293ffff, 0x294ffff, 0x295ffff, 0x296ffff, 0x297ffff, 0x298ffff, 0x299ffff, 0x29affff, 0x29bffff, 0x29cffff, 0x29dffff, 0x29effff, 0x29fffff, 0x2a0ffff, 0x2a1ffff, 0x2a2ffff, 0x2a3ffff, 0x2a4ffff, 0x2a5ffff, 0x2a6ffff, 0x2a7ffff, 0x2a8ffff, 0x2a9ffff, 0x2aaffff, 0x2abffff, 0x2acffff, 0x2adffff, 0x2aeffff, 0x2b002af, 0x2b202b1, 0x2b402b3, 0x2b602b5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2b802b7, 0x2ba02b9, 0x2bc02bb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2be02bd, 0x2c002bf, 0x2c202c1, 0x2c402c3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2c602c5, 0x2c802c7, 0x2ca02c9, 0x2cc02cb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2ce02cd, 0x2d002cf, 0x2d202d1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d3ffff, 0x2d4ffff, 0x2d5ffff, 0x2d6ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2d802d7, 0x2da02d9, 0x2dc02db, 0x2de02dd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2e002df, 0x2e202e1, 0x2e402e3, 0x2e602e5, 0x2e802e7, 0x2ea02e9, 0x2ec02eb, 0xffffffff, 0x2ee02ed, 0x2f002ef, 0x2f202f1, 0x2f402f3, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2f602f5, 0x2f802f7, 0x2fa02f9, 0x2fc02fb, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2fe02fd, 0x30002ff, 0x3020301, 0x3040303, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3060305, 0x307ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0308, 0xffffffff, 0x309ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30b030a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30d030c, 0xffffffff, 0x30effff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x30fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0310, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3120311, 0x3140313, 0x3160315, 0x3180317, 0x31a0319, 0x31c031b, 0x31e031d, 0x320031f, 0xffffffff, 0xffffffff, 0xffff0321, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3230322, 0x3250324, 0x3270326, 0x3290328, 0x32b032a, 0x32d032c, 0x32f032e, 0x3310330, 0x3330332, 0x3350334, 0x3370336, 0x3390338, 0x33b033a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x33d033c, 0x33f033e, 0x3410340, 0x3430342, 0x3450344, 0x3470346, 0x3490348, 0x34b034a, 0x34d034c, 0x34f034e, 0x3510350, 0x3530352, 0x3550354, 0x3570356, 0x3590358, 0x35b035a, 0x35d035c, 0x35f035e, 0x3610360, 0x3630362, 0x3650364, 0x3670366, 0x3690368, 0x36b036a, 0x36cffff, 0xffffffff, 0x36dffff, 0xffff036e, 0xffff036f, 0xffff0370, 0xffff0371, 0xffffffff, 0xffffffff, 0x372ffff, 0xffffffff, 0xffff0373, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x374ffff, 0x375ffff, 0x376ffff, 0x377ffff, 0x378ffff, 0x379ffff, 0x37affff, 0x37bffff, 0x37cffff, 0x37dffff, 0x37effff, 0x37fffff, 0x380ffff, 0x381ffff, 0x382ffff, 0x383ffff, 0x384ffff, 0x385ffff, 0x386ffff, 0x387ffff, 0x388ffff, 0x389ffff, 0x38affff, 0x38bffff, 0x38cffff, 0x38dffff, 0x38effff, 0x38fffff, 0x390ffff, 0x391ffff, 0x392ffff, 0x393ffff, 0x394ffff, 0x395ffff, 0x396ffff, 0x397ffff, 0x398ffff, 0x399ffff, 0x39affff, 0x39bffff, 0x39cffff, 0x39dffff, 0x39effff, 0x39fffff, 0x3a0ffff, 0x3a1ffff, 0x3a2ffff, 0x3a3ffff, 0x3a4ffff, 0x3a5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff03a6, 0xffff03a7, 0xffffffff, 0x3a8ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3aa03a9, 0x3ac03ab, 0x3ae03ad, 0x3b003af, 0x3b203b1, 0x3b403b3, 0x3b603b5, 0x3b803b7, 0x3ba03b9, 0x3bc03bb, 0x3be03bd, 0x3c003bf, 0x3c203c1, 0x3c403c3, 0x3c603c5, 0x3c803c7, 0x3ca03c9, 0x3cc03cb, 0x3ce03cd, 0x3cfffff, 0xffffffff, 0xffffffff, 0x3d0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3d1ffff, 0x3d2ffff, 0x3d3ffff, 0x3d4ffff, 0x3d5ffff, 0x3d6ffff, 0x3d7ffff, 0x3d8ffff, 0x3d9ffff, 0x3daffff, 0x3dbffff, 0x3dcffff, 0x3ddffff, 0x3deffff, 0x3dfffff, 0x3e0ffff, 0x3e1ffff, 0x3e2ffff, 0x3e3ffff, 0x3e4ffff, 0x3e5ffff, 0x3e6ffff, 0x3e7ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3e8ffff, 0x3e9ffff, 0x3eaffff, 0x3ebffff, 0x3ecffff, 0x3edffff, 0x3eeffff, 0x3efffff, 0x3f0ffff, 0x3f1ffff, 0x3f2ffff, 0x3f3ffff, 0x3f4ffff, 0x3f5ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f6ffff, 0x3f7ffff, 0x3f8ffff, 0x3f9ffff, 0x3faffff, 0x3fbffff, 0x3fcffff, 0xffffffff, 0x3fdffff, 0x3feffff, 0x3ffffff, 0x400ffff, 0x401ffff, 0x402ffff, 0x403ffff, 0x404ffff, 0x405ffff, 0x406ffff, 0x407ffff, 0x408ffff, 0x409ffff, 0x40affff, 0x40bffff, 0x40cffff, 0x40dffff, 0x40effff, 0x40fffff, 0x410ffff, 0x411ffff, 0x412ffff, 0x413ffff, 0x414ffff, 0x415ffff, 0x416ffff, 0x417ffff, 0x418ffff, 0x419ffff, 0x41affff, 0x41bffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff041c, 0xffff041d, 0x41effff, 0x41fffff, 0x420ffff, 0x421ffff, 0x422ffff, 0xffffffff, 0xffffffff, 0xffff0423, 0xffffffff, 0x424ffff, 0x425ffff, 0xffff0426, 0x427ffff, 0x428ffff, 0x429ffff, 0x42affff, 0x42bffff, 0x42cffff, 0x42dffff, 0x42effff, 0x42fffff, 0x430ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x431ffff, 0x432ffff, 0x433ffff, 0x434ffff, 0x435ffff, 0x436ffff, 0x437ffff, 0x438ffff, 0xffffffff, 0xffffffff, 0xffff0439, 0xffff043a, 0xffffffff, 0xffffffff, 0x43bffff, 0xffffffff, 0xffffffff, 0x43cffff, 0x43dffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff043e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x43fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4410440, 0x4430442, 0x4450444, 0x4470446, 0x4490448, 0x44b044a, 0x44d044c, 0x44f044e, 0x4510450, 0x4530452, 0x4550454, 0x4570456, 0x4590458, 0x45b045a, 0x45d045c, 0x45f045e, 0x4610460, 0x4630462, 0x4650464, 0x4670466, 0x4690468, 0x46b046a, 0x46d046c, 0x46f046e, 0x4710470, 0x4730472, 0x4750474, 0x4770476, 0x4790478, 0x47b047a, 0x47d047c, 0x47f047e, 0x4810480, 0x4830482, 0x4850484, 0x4870486, 0x4890488, 0x48b048a, 0x48d048c, 0x48f048e, 0x490ffff, 0x4920491, 0x4940493, 0x4960495, 0x4980497, 0x49a0499, 0x49c049b, 0x49e049d, 0x4a0049f, 0x4a204a1, 0x4a404a3, 0x4a604a5, 0x4a804a7, 0xffff04a9, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4ab04aa, 0x4ad04ac, 0x4af04ae, 0x4b104b0, 0x4b304b2, 0x4b504b4, 0x4b704b6, 0x4b904b8, 0x4bb04ba, 0x4bd04bc, 0x4bf04be, 0x4c104c0, 0x4c304c2, 0x4c504c4, 0x4c704c6, 0x4c904c8, 0x4cb04ca, 0x4cd04cc, 0x4cf04ce, 0x4d104d0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4d304d2, 0x4d504d4, 0x4d704d6, 0x4d904d8, 0x4db04da, 0x4dd04dc, 0x4df04de, 0x4e104e0, 0x4e304e2, 0x4e504e4, 0x4e704e6, 0x4e904e8, 0x4eb04ea, 0x4ed04ec, 0x4ef04ee, 0x4f104f0, 0x4f304f2, 0x4f504f4, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4f6ffff, 0x4f804f7, 0x4fa04f9, 0x4fc04fb, 0x4fe04fd, 0x50004ff, 0x501ffff, 0x5030502, 0x5050504, 0x5070506, 0x5090508, 0x50b050a, 0x50d050c, 0x50f050e, 0x510ffff, 0x5120511, 0x5140513, 0x5160515, 0x517ffff, 0xffff0518, 0xffffffff, 0x51a0519, 0x51c051b, 0x51e051d, 0x520051f, 0x5220521, 0x5240523, 0x5260525, 0x5280527, 0x52a0529, 0x52c052b, 0x52e052d, 0x530052f, 0x5320531, 0x5340533, 0x5360535, 0x5380537, 0x53a0539, 0x53c053b, 0x53e053d, 0x540053f, 0x5420541, 0x5440543, 0x5460545, 0x5480547, 0x54a0549, 0xffff054b, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x54d054c, 0x54f054e, 0x5510550, 0x5530552, 0x5550554, 0x5570556, 0x5590558, 0x55b055a, 0x55d055c, 0x55f055e, 0x5610560, 0x5630562, 0x5650564, 0x5670566, 0x5690568, 0x56b056a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x56d056c, 0x56f056e, 0x5710570, 0x5730572, 0x5750574, 0x5770576, 0x5790578, 0x57b057a, 0x57d057c, 0x57f057e, 0x5810580, 0x5830582, 0x5850584, 0x5870586, 0x5890588, 0x58b058a, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x58d058c, 0x58f058e, 0x5910590, 0x5930592, 0x5950594, 0x5970596, 0x5990598, 0x59b059a, 0x59d059c, 0x59f059e, 0x5a105a0, 0x5a305a2, 0x5a505a4, 0x5a705a6, 0x5a905a8, 0x5ab05aa, 0x5ad05ac, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff]); -@property -{ -private alias _IUA = immutable(uint[]); -_IUA toUpperTable() nothrow @nogc @safe pure { static _IUA t = [ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x39c, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x49, 0x132, 0x134, 0x136, 0x139, 0x13b, 0x13d, 0x13f, 0x141, 0x143, 0x145, 0x147, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17b, 0x17d, 0x53, 0x243, 0x182, 0x184, 0x187, 0x18b, 0x191, 0x1f6, 0x198, 0x23d, 0x220, 0x1a0, 0x1a2, 0x1a4, 0x1a7, 0x1ac, 0x1af, 0x1b3, 0x1b5, 0x1b8, 0x1bc, 0x1f7, 0x1c4, 0x1c4, 0x1c7, 0x1c7, 0x1ca, 0x1ca, 0x1cd, 0x1cf, 0x1d1, 0x1d3, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x18e, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f1, 0x1f1, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x23b, 0x2c7e, 0x2c7f, 0x241, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x2c6f, 0x2c6d, 0x2c70, 0x181, 0x186, 0x189, 0x18a, 0x18f, 0x190, 0xa7ab, 0x193, 0xa7ac, 0x194, 0xa78d, 0xa7aa, 0x197, 0x196, 0xa7ae, 0x2c62, 0xa7ad, 0x19c, 0x2c6e, 0x19d, 0x19f, 0x2c64, 0x1a6, 0xa7c5, 0x1a9, 0xa7b1, 0x1ae, 0x244, 0x1b1, 0x1b2, 0x245, 0x1b7, 0xa7b2, 0xa7b0, 0x399, 0x370, 0x372, 0x376, 0x3fd, 0x3fe, 0x3ff, 0x386, 0x388, 0x389, 0x38a, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0x392, 0x398, 0x3a6, 0x3a0, 0x3cf, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x39a, 0x3a1, 0x3f9, 0x37f, 0x395, 0x3f7, 0x3fa, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c1, 0x4c3, 0x4c5, 0x4c7, 0x4c9, 0x4cb, 0x4cd, 0x4c0, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x1c90, 0x1c91, 0x1c92, 0x1c93, 0x1c94, 0x1c95, 0x1c96, 0x1c97, 0x1c98, 0x1c99, 0x1c9a, 0x1c9b, 0x1c9c, 0x1c9d, 0x1c9e, 0x1c9f, 0x1ca0, 0x1ca1, 0x1ca2, 0x1ca3, 0x1ca4, 0x1ca5, 0x1ca6, 0x1ca7, 0x1ca8, 0x1ca9, 0x1caa, 0x1cab, 0x1cac, 0x1cad, 0x1cae, 0x1caf, 0x1cb0, 0x1cb1, 0x1cb2, 0x1cb3, 0x1cb4, 0x1cb5, 0x1cb6, 0x1cb7, 0x1cb8, 0x1cb9, 0x1cba, 0x1cbd, 0x1cbe, 0x1cbf, 0x13f0, 0x13f1, 0x13f2, 0x13f3, 0x13f4, 0x13f5, 0x412, 0x414, 0x41e, 0x421, 0x422, 0x422, 0x42a, 0x462, 0xa64a, 0xa77d, 0x2c63, 0xa7c6, 0x1e00, 0x1e02, 0x1e04, 0x1e06, 0x1e08, 0x1e0a, 0x1e0c, 0x1e0e, 0x1e10, 0x1e12, 0x1e14, 0x1e16, 0x1e18, 0x1e1a, 0x1e1c, 0x1e1e, 0x1e20, 0x1e22, 0x1e24, 0x1e26, 0x1e28, 0x1e2a, 0x1e2c, 0x1e2e, 0x1e30, 0x1e32, 0x1e34, 0x1e36, 0x1e38, 0x1e3a, 0x1e3c, 0x1e3e, 0x1e40, 0x1e42, 0x1e44, 0x1e46, 0x1e48, 0x1e4a, 0x1e4c, 0x1e4e, 0x1e50, 0x1e52, 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e60, 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72, 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c, 0x1e7e, 0x1e80, 0x1e82, 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c, 0x1e8e, 0x1e90, 0x1e92, 0x1e94, 0x1e60, 0x1ea0, 0x1ea2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc, 0x1ece, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, 0x1ef2, 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc, 0x1efe, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f59, 0x1f5b, 0x1f5d, 0x1f5f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fb8, 0x1fb9, 0x1fbc, 0x399, 0x1fcc, 0x1fd8, 0x1fd9, 0x1fe8, 0x1fe9, 0x1fec, 0x1ffc, 0x2132, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0x216c, 0x216d, 0x216e, 0x216f, 0x2183, 0x24b6, 0x24b7, 0x24b8, 0x24b9, 0x24ba, 0x24bb, 0x24bc, 0x24bd, 0x24be, 0x24bf, 0x24c0, 0x24c1, 0x24c2, 0x24c3, 0x24c4, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, 0x24ca, 0x24cb, 0x24cc, 0x24cd, 0x24ce, 0x24cf, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c60, 0x23a, 0x23e, 0x2c67, 0x2c69, 0x2c6b, 0x2c72, 0x2c75, 0x2c80, 0x2c82, 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, 0x2ceb, 0x2ced, 0x2cf2, 0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0x10c7, 0x10cd, 0xa640, 0xa642, 0xa644, 0xa646, 0xa648, 0xa64a, 0xa64c, 0xa64e, 0xa650, 0xa652, 0xa654, 0xa656, 0xa658, 0xa65a, 0xa65c, 0xa65e, 0xa660, 0xa662, 0xa664, 0xa666, 0xa668, 0xa66a, 0xa66c, 0xa680, 0xa682, 0xa684, 0xa686, 0xa688, 0xa68a, 0xa68c, 0xa68e, 0xa690, 0xa692, 0xa694, 0xa696, 0xa698, 0xa69a, 0xa722, 0xa724, 0xa726, 0xa728, 0xa72a, 0xa72c, 0xa72e, 0xa732, 0xa734, 0xa736, 0xa738, 0xa73a, 0xa73c, 0xa73e, 0xa740, 0xa742, 0xa744, 0xa746, 0xa748, 0xa74a, 0xa74c, 0xa74e, 0xa750, 0xa752, 0xa754, 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa790, 0xa792, 0xa7c4, 0xa796, 0xa798, 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b4, 0xa7b6, 0xa7b8, 0xa7ba, 0xa7bc, 0xa7be, 0xa7c0, 0xa7c2, 0xa7c7, 0xa7c9, 0xa7d0, 0xa7d6, 0xa7d8, 0xa7f5, 0xa7b3, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6, 0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf, 0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da, 0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3, 0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec, 0x13ed, 0x13ee, 0x13ef, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x10570, 0x10571, 0x10572, 0x10573, 0x10574, 0x10575, 0x10576, 0x10577, 0x10578, 0x10579, 0x1057a, 0x1057c, 0x1057d, 0x1057e, 0x1057f, 0x10580, 0x10581, 0x10582, 0x10583, 0x10584, 0x10585, 0x10586, 0x10587, 0x10588, 0x10589, 0x1058a, 0x1058c, 0x1058d, 0x1058e, 0x1058f, 0x10590, 0x10591, 0x10592, 0x10594, 0x10595, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae, 0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x16e40, 0x16e41, 0x16e42, 0x16e43, 0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a, 0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c, 0x16e5d, 0x16e5e, 0x16e5f, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x2000053, 0x53, 0x130, 0x2000046, 0x46, 0x2000046, 0x49, 0x2000046, 0x4c, 0x3000046, 0x46, 0x49, 0x3000046, 0x46, 0x4c, 0x2000053, 0x54, 0x2000053, 0x54, 0x2000535, 0x552, 0x2000544, 0x546, 0x2000544, 0x535, 0x2000544, 0x53b, 0x200054e, 0x546, 0x2000544, 0x53d, 0x20002bc, 0x4e, 0x3000399, 0x308, 0x301, 0x30003a5, 0x308, 0x301, 0x200004a, 0x30c, 0x2000048, 0x331, 0x2000054, 0x308, 0x2000057, 0x30a, 0x2000059, 0x30a, 0x2000041, 0x2be, 0x20003a5, 0x313, 0x30003a5, 0x313, 0x300, 0x30003a5, 0x313, 0x301, 0x30003a5, 0x313, 0x342, 0x2000391, 0x342, 0x2000397, 0x342, 0x3000399, 0x308, 0x300, 0x3000399, 0x308, 0x301, 0x2000399, 0x342, 0x3000399, 0x308, 0x342, 0x30003a5, 0x308, 0x300, 0x30003a5, 0x308, 0x301, 0x20003a1, 0x313, 0x20003a5, 0x342, 0x30003a5, 0x308, 0x342, 0x20003a9, 0x342, 0x2001f08, 0x399, 0x2001f09, 0x399, 0x2001f0a, 0x399, 0x2001f0b, 0x399, 0x2001f0c, 0x399, 0x2001f0d, 0x399, 0x2001f0e, 0x399, 0x2001f0f, 0x399, 0x2001f08, 0x399, 0x2001f09, 0x399, 0x2001f0a, 0x399, 0x2001f0b, 0x399, 0x2001f0c, 0x399, 0x2001f0d, 0x399, 0x2001f0e, 0x399, 0x2001f0f, 0x399, 0x2001f28, 0x399, 0x2001f29, 0x399, 0x2001f2a, 0x399, 0x2001f2b, 0x399, 0x2001f2c, 0x399, 0x2001f2d, 0x399, 0x2001f2e, 0x399, 0x2001f2f, 0x399, 0x2001f28, 0x399, 0x2001f29, 0x399, 0x2001f2a, 0x399, 0x2001f2b, 0x399, 0x2001f2c, 0x399, 0x2001f2d, 0x399, 0x2001f2e, 0x399, 0x2001f2f, 0x399, 0x2001f68, 0x399, 0x2001f69, 0x399, 0x2001f6a, 0x399, 0x2001f6b, 0x399, 0x2001f6c, 0x399, 0x2001f6d, 0x399, 0x2001f6e, 0x399, 0x2001f6f, 0x399, 0x2001f68, 0x399, 0x2001f69, 0x399, 0x2001f6a, 0x399, 0x2001f6b, 0x399, 0x2001f6c, 0x399, 0x2001f6d, 0x399, 0x2001f6e, 0x399, 0x2001f6f, 0x399, 0x2000391, 0x399, 0x2000391, 0x399, 0x2000397, 0x399, 0x2000397, 0x399, 0x20003a9, 0x399, 0x20003a9, 0x399, 0x2001fba, 0x399, 0x2000386, 0x399, 0x2001fca, 0x399, 0x2000389, 0x399, 0x2001ffa, 0x399, 0x200038f, 0x399, 0x3000391, 0x342, 0x399, 0x3000397, 0x342, 0x399, 0x30003a9, 0x342, 0x399]; return t; } -_IUA toLowerTable() nothrow @nogc @safe pure { static _IUA t = [ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12b, 0x12d, 0x12f, 0x69, 0x133, 0x135, 0x137, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14b, 0x14d, 0x14f, 0x151, 0x153, 0x155, 0x157, 0x159, 0x15b, 0x15d, 0x15f, 0x161, 0x163, 0x165, 0x167, 0x169, 0x16b, 0x16d, 0x16f, 0x171, 0x173, 0x175, 0x177, 0xff, 0x17a, 0x17c, 0x17e, 0x253, 0x183, 0x185, 0x254, 0x188, 0x256, 0x257, 0x18c, 0x1dd, 0x259, 0x25b, 0x192, 0x260, 0x263, 0x269, 0x268, 0x199, 0x26f, 0x272, 0x275, 0x1a1, 0x1a3, 0x1a5, 0x280, 0x1a8, 0x283, 0x1ad, 0x288, 0x1b0, 0x28a, 0x28b, 0x1b4, 0x1b6, 0x292, 0x1b9, 0x1bd, 0x1c6, 0x1c6, 0x1c9, 0x1c9, 0x1cc, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1df, 0x1e1, 0x1e3, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1ed, 0x1ef, 0x1f3, 0x1f3, 0x1f5, 0x195, 0x1bf, 0x1f9, 0x1fb, 0x1fd, 0x1ff, 0x201, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20d, 0x20f, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21b, 0x21d, 0x21f, 0x19e, 0x223, 0x225, 0x227, 0x229, 0x22b, 0x22d, 0x22f, 0x231, 0x233, 0x2c65, 0x23c, 0x19a, 0x2c66, 0x242, 0x180, 0x289, 0x28c, 0x247, 0x249, 0x24b, 0x24d, 0x24f, 0x371, 0x373, 0x377, 0x3f3, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3cc, 0x3cd, 0x3ce, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3d7, 0x3d9, 0x3db, 0x3dd, 0x3df, 0x3e1, 0x3e3, 0x3e5, 0x3e7, 0x3e9, 0x3eb, 0x3ed, 0x3ef, 0x3b8, 0x3f8, 0x3f2, 0x3fb, 0x37b, 0x37c, 0x37d, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x461, 0x463, 0x465, 0x467, 0x469, 0x46b, 0x46d, 0x46f, 0x471, 0x473, 0x475, 0x477, 0x479, 0x47b, 0x47d, 0x47f, 0x481, 0x48b, 0x48d, 0x48f, 0x491, 0x493, 0x495, 0x497, 0x499, 0x49b, 0x49d, 0x49f, 0x4a1, 0x4a3, 0x4a5, 0x4a7, 0x4a9, 0x4ab, 0x4ad, 0x4af, 0x4b1, 0x4b3, 0x4b5, 0x4b7, 0x4b9, 0x4bb, 0x4bd, 0x4bf, 0x4cf, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d1, 0x4d3, 0x4d5, 0x4d7, 0x4d9, 0x4db, 0x4dd, 0x4df, 0x4e1, 0x4e3, 0x4e5, 0x4e7, 0x4e9, 0x4eb, 0x4ed, 0x4ef, 0x4f1, 0x4f3, 0x4f5, 0x4f7, 0x4f9, 0x4fb, 0x4fd, 0x4ff, 0x501, 0x503, 0x505, 0x507, 0x509, 0x50b, 0x50d, 0x50f, 0x511, 0x513, 0x515, 0x517, 0x519, 0x51b, 0x51d, 0x51f, 0x521, 0x523, 0x525, 0x527, 0x529, 0x52b, 0x52d, 0x52f, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x2d00, 0x2d01, 0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d12, 0x2d13, 0x2d14, 0x2d15, 0x2d16, 0x2d17, 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c, 0x2d1d, 0x2d1e, 0x2d1f, 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 0x2d27, 0x2d2d, 0xab70, 0xab71, 0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab7f, 0xab80, 0xab81, 0xab82, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, 0xab93, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7, 0xaba8, 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, 0xabb0, 0xabb1, 0xabb2, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, 0xabb8, 0xabb9, 0xabba, 0xabbb, 0xabbc, 0xabbd, 0xabbe, 0xabbf, 0x13f8, 0x13f9, 0x13fa, 0x13fb, 0x13fc, 0x13fd, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x10f7, 0x10f8, 0x10f9, 0x10fa, 0x10fd, 0x10fe, 0x10ff, 0x1e01, 0x1e03, 0x1e05, 0x1e07, 0x1e09, 0x1e0b, 0x1e0d, 0x1e0f, 0x1e11, 0x1e13, 0x1e15, 0x1e17, 0x1e19, 0x1e1b, 0x1e1d, 0x1e1f, 0x1e21, 0x1e23, 0x1e25, 0x1e27, 0x1e29, 0x1e2b, 0x1e2d, 0x1e2f, 0x1e31, 0x1e33, 0x1e35, 0x1e37, 0x1e39, 0x1e3b, 0x1e3d, 0x1e3f, 0x1e41, 0x1e43, 0x1e45, 0x1e47, 0x1e49, 0x1e4b, 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, 0x1e59, 0x1e5b, 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, 0x1e69, 0x1e6b, 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, 0x1e79, 0x1e7b, 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, 0x1e89, 0x1e8b, 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0xdf, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, 0x1eb9, 0x1ebb, 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ec9, 0x1ecb, 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, 0x1ee9, 0x1eeb, 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1efb, 0x1efd, 0x1eff, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f51, 0x1f53, 0x1f55, 0x1f57, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x3c9, 0x6b, 0xe5, 0x214e, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, 0x2184, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c61, 0x26b, 0x1d7d, 0x27d, 0x2c68, 0x2c6a, 0x2c6c, 0x251, 0x271, 0x250, 0x252, 0x2c73, 0x2c76, 0x23f, 0x240, 0x2c81, 0x2c83, 0x2c85, 0x2c87, 0x2c89, 0x2c8b, 0x2c8d, 0x2c8f, 0x2c91, 0x2c93, 0x2c95, 0x2c97, 0x2c99, 0x2c9b, 0x2c9d, 0x2c9f, 0x2ca1, 0x2ca3, 0x2ca5, 0x2ca7, 0x2ca9, 0x2cab, 0x2cad, 0x2caf, 0x2cb1, 0x2cb3, 0x2cb5, 0x2cb7, 0x2cb9, 0x2cbb, 0x2cbd, 0x2cbf, 0x2cc1, 0x2cc3, 0x2cc5, 0x2cc7, 0x2cc9, 0x2ccb, 0x2ccd, 0x2ccf, 0x2cd1, 0x2cd3, 0x2cd5, 0x2cd7, 0x2cd9, 0x2cdb, 0x2cdd, 0x2cdf, 0x2ce1, 0x2ce3, 0x2cec, 0x2cee, 0x2cf3, 0xa641, 0xa643, 0xa645, 0xa647, 0xa649, 0xa64b, 0xa64d, 0xa64f, 0xa651, 0xa653, 0xa655, 0xa657, 0xa659, 0xa65b, 0xa65d, 0xa65f, 0xa661, 0xa663, 0xa665, 0xa667, 0xa669, 0xa66b, 0xa66d, 0xa681, 0xa683, 0xa685, 0xa687, 0xa689, 0xa68b, 0xa68d, 0xa68f, 0xa691, 0xa693, 0xa695, 0xa697, 0xa699, 0xa69b, 0xa723, 0xa725, 0xa727, 0xa729, 0xa72b, 0xa72d, 0xa72f, 0xa733, 0xa735, 0xa737, 0xa739, 0xa73b, 0xa73d, 0xa73f, 0xa741, 0xa743, 0xa745, 0xa747, 0xa749, 0xa74b, 0xa74d, 0xa74f, 0xa751, 0xa753, 0xa755, 0xa757, 0xa759, 0xa75b, 0xa75d, 0xa75f, 0xa761, 0xa763, 0xa765, 0xa767, 0xa769, 0xa76b, 0xa76d, 0xa76f, 0xa77a, 0xa77c, 0x1d79, 0xa77f, 0xa781, 0xa783, 0xa785, 0xa787, 0xa78c, 0x265, 0xa791, 0xa793, 0xa797, 0xa799, 0xa79b, 0xa79d, 0xa79f, 0xa7a1, 0xa7a3, 0xa7a5, 0xa7a7, 0xa7a9, 0x266, 0x25c, 0x261, 0x26c, 0x26a, 0x29e, 0x287, 0x29d, 0xab53, 0xa7b5, 0xa7b7, 0xa7b9, 0xa7bb, 0xa7bd, 0xa7bf, 0xa7c1, 0xa7c3, 0xa794, 0x282, 0x1d8e, 0xa7c8, 0xa7ca, 0xa7d1, 0xa7d7, 0xa7d9, 0xa7f6, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, 0x104d8, 0x104d9, 0x104da, 0x104db, 0x104dc, 0x104dd, 0x104de, 0x104df, 0x104e0, 0x104e1, 0x104e2, 0x104e3, 0x104e4, 0x104e5, 0x104e6, 0x104e7, 0x104e8, 0x104e9, 0x104ea, 0x104eb, 0x104ec, 0x104ed, 0x104ee, 0x104ef, 0x104f0, 0x104f1, 0x104f2, 0x104f3, 0x104f4, 0x104f5, 0x104f6, 0x104f7, 0x104f8, 0x104f9, 0x104fa, 0x104fb, 0x10597, 0x10598, 0x10599, 0x1059a, 0x1059b, 0x1059c, 0x1059d, 0x1059e, 0x1059f, 0x105a0, 0x105a1, 0x105a3, 0x105a4, 0x105a5, 0x105a6, 0x105a7, 0x105a8, 0x105a9, 0x105aa, 0x105ab, 0x105ac, 0x105ad, 0x105ae, 0x105af, 0x105b0, 0x105b1, 0x105b3, 0x105b4, 0x105b5, 0x105b6, 0x105b7, 0x105b8, 0x105b9, 0x105bb, 0x105bc, 0x10cc0, 0x10cc1, 0x10cc2, 0x10cc3, 0x10cc4, 0x10cc5, 0x10cc6, 0x10cc7, 0x10cc8, 0x10cc9, 0x10cca, 0x10ccb, 0x10ccc, 0x10ccd, 0x10cce, 0x10ccf, 0x10cd0, 0x10cd1, 0x10cd2, 0x10cd3, 0x10cd4, 0x10cd5, 0x10cd6, 0x10cd7, 0x10cd8, 0x10cd9, 0x10cda, 0x10cdb, 0x10cdc, 0x10cdd, 0x10cde, 0x10cdf, 0x10ce0, 0x10ce1, 0x10ce2, 0x10ce3, 0x10ce4, 0x10ce5, 0x10ce6, 0x10ce7, 0x10ce8, 0x10ce9, 0x10cea, 0x10ceb, 0x10cec, 0x10ced, 0x10cee, 0x10cef, 0x10cf0, 0x10cf1, 0x10cf2, 0x118c0, 0x118c1, 0x118c2, 0x118c3, 0x118c4, 0x118c5, 0x118c6, 0x118c7, 0x118c8, 0x118c9, 0x118ca, 0x118cb, 0x118cc, 0x118cd, 0x118ce, 0x118cf, 0x118d0, 0x118d1, 0x118d2, 0x118d3, 0x118d4, 0x118d5, 0x118d6, 0x118d7, 0x118d8, 0x118d9, 0x118da, 0x118db, 0x118dc, 0x118dd, 0x118de, 0x118df, 0x16e60, 0x16e61, 0x16e62, 0x16e63, 0x16e64, 0x16e65, 0x16e66, 0x16e67, 0x16e68, 0x16e69, 0x16e6a, 0x16e6b, 0x16e6c, 0x16e6d, 0x16e6e, 0x16e6f, 0x16e70, 0x16e71, 0x16e72, 0x16e73, 0x16e74, 0x16e75, 0x16e76, 0x16e77, 0x16e78, 0x16e79, 0x16e7a, 0x16e7b, 0x16e7c, 0x16e7d, 0x16e7e, 0x16e7f, 0x1e922, 0x1e923, 0x1e924, 0x1e925, 0x1e926, 0x1e927, 0x1e928, 0x1e929, 0x1e92a, 0x1e92b, 0x1e92c, 0x1e92d, 0x1e92e, 0x1e92f, 0x1e930, 0x1e931, 0x1e932, 0x1e933, 0x1e934, 0x1e935, 0x1e936, 0x1e937, 0x1e938, 0x1e939, 0x1e93a, 0x1e93b, 0x1e93c, 0x1e93d, 0x1e93e, 0x1e93f, 0x1e940, 0x1e941, 0x1e942, 0x1e943, 0xdf, 0x2000069, 0x307, 0xfb00, 0xfb01, 0xfb02, 0xfb03, 0xfb04, 0xfb05, 0xfb06, 0x587, 0xfb13, 0xfb14, 0xfb15, 0xfb16, 0xfb17, 0x149, 0x390, 0x3b0, 0x1f0, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1f50, 0x1f52, 0x1f54, 0x1f56, 0x1fb6, 0x1fc6, 0x1fd2, 0x1fd3, 0x1fd6, 0x1fd7, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe6, 0x1fe7, 0x1ff6, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fb3, 0x1fb3, 0x1fc3, 0x1fc3, 0x1ff3, 0x1ff3, 0x1fb2, 0x1fb4, 0x1fc2, 0x1fc4, 0x1ff2, 0x1ff4, 0x1fb7, 0x1fc7, 0x1ff7]; return t; } -_IUA toTitleTable() nothrow @nogc @safe pure { static _IUA t = [ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x39c, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x49, 0x132, 0x134, 0x136, 0x139, 0x13b, 0x13d, 0x13f, 0x141, 0x143, 0x145, 0x147, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17b, 0x17d, 0x53, 0x243, 0x182, 0x184, 0x187, 0x18b, 0x191, 0x1f6, 0x198, 0x23d, 0x220, 0x1a0, 0x1a2, 0x1a4, 0x1a7, 0x1ac, 0x1af, 0x1b3, 0x1b5, 0x1b8, 0x1bc, 0x1f7, 0x1c5, 0x1c5, 0x1c5, 0x1c8, 0x1c8, 0x1c8, 0x1cb, 0x1cb, 0x1cb, 0x1cd, 0x1cf, 0x1d1, 0x1d3, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x18e, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f2, 0x1f2, 0x1f2, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x23b, 0x2c7e, 0x2c7f, 0x241, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x2c6f, 0x2c6d, 0x2c70, 0x181, 0x186, 0x189, 0x18a, 0x18f, 0x190, 0xa7ab, 0x193, 0xa7ac, 0x194, 0xa78d, 0xa7aa, 0x197, 0x196, 0xa7ae, 0x2c62, 0xa7ad, 0x19c, 0x2c6e, 0x19d, 0x19f, 0x2c64, 0x1a6, 0xa7c5, 0x1a9, 0xa7b1, 0x1ae, 0x244, 0x1b1, 0x1b2, 0x245, 0x1b7, 0xa7b2, 0xa7b0, 0x399, 0x370, 0x372, 0x376, 0x3fd, 0x3fe, 0x3ff, 0x386, 0x388, 0x389, 0x38a, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0x392, 0x398, 0x3a6, 0x3a0, 0x3cf, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x39a, 0x3a1, 0x3f9, 0x37f, 0x395, 0x3f7, 0x3fa, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c1, 0x4c3, 0x4c5, 0x4c7, 0x4c9, 0x4cb, 0x4cd, 0x4c0, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x10f7, 0x10f8, 0x10f9, 0x10fa, 0x10fd, 0x10fe, 0x10ff, 0x13f0, 0x13f1, 0x13f2, 0x13f3, 0x13f4, 0x13f5, 0x412, 0x414, 0x41e, 0x421, 0x422, 0x422, 0x42a, 0x462, 0xa64a, 0xa77d, 0x2c63, 0xa7c6, 0x1e00, 0x1e02, 0x1e04, 0x1e06, 0x1e08, 0x1e0a, 0x1e0c, 0x1e0e, 0x1e10, 0x1e12, 0x1e14, 0x1e16, 0x1e18, 0x1e1a, 0x1e1c, 0x1e1e, 0x1e20, 0x1e22, 0x1e24, 0x1e26, 0x1e28, 0x1e2a, 0x1e2c, 0x1e2e, 0x1e30, 0x1e32, 0x1e34, 0x1e36, 0x1e38, 0x1e3a, 0x1e3c, 0x1e3e, 0x1e40, 0x1e42, 0x1e44, 0x1e46, 0x1e48, 0x1e4a, 0x1e4c, 0x1e4e, 0x1e50, 0x1e52, 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e60, 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72, 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c, 0x1e7e, 0x1e80, 0x1e82, 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c, 0x1e8e, 0x1e90, 0x1e92, 0x1e94, 0x1e60, 0x1ea0, 0x1ea2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc, 0x1ece, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, 0x1ef2, 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc, 0x1efe, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f59, 0x1f5b, 0x1f5d, 0x1f5f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fb8, 0x1fb9, 0x1fbc, 0x399, 0x1fcc, 0x1fd8, 0x1fd9, 0x1fe8, 0x1fe9, 0x1fec, 0x1ffc, 0x2132, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0x216c, 0x216d, 0x216e, 0x216f, 0x2183, 0x24b6, 0x24b7, 0x24b8, 0x24b9, 0x24ba, 0x24bb, 0x24bc, 0x24bd, 0x24be, 0x24bf, 0x24c0, 0x24c1, 0x24c2, 0x24c3, 0x24c4, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, 0x24ca, 0x24cb, 0x24cc, 0x24cd, 0x24ce, 0x24cf, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c60, 0x23a, 0x23e, 0x2c67, 0x2c69, 0x2c6b, 0x2c72, 0x2c75, 0x2c80, 0x2c82, 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, 0x2ceb, 0x2ced, 0x2cf2, 0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0x10c7, 0x10cd, 0xa640, 0xa642, 0xa644, 0xa646, 0xa648, 0xa64a, 0xa64c, 0xa64e, 0xa650, 0xa652, 0xa654, 0xa656, 0xa658, 0xa65a, 0xa65c, 0xa65e, 0xa660, 0xa662, 0xa664, 0xa666, 0xa668, 0xa66a, 0xa66c, 0xa680, 0xa682, 0xa684, 0xa686, 0xa688, 0xa68a, 0xa68c, 0xa68e, 0xa690, 0xa692, 0xa694, 0xa696, 0xa698, 0xa69a, 0xa722, 0xa724, 0xa726, 0xa728, 0xa72a, 0xa72c, 0xa72e, 0xa732, 0xa734, 0xa736, 0xa738, 0xa73a, 0xa73c, 0xa73e, 0xa740, 0xa742, 0xa744, 0xa746, 0xa748, 0xa74a, 0xa74c, 0xa74e, 0xa750, 0xa752, 0xa754, 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa790, 0xa792, 0xa7c4, 0xa796, 0xa798, 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b4, 0xa7b6, 0xa7b8, 0xa7ba, 0xa7bc, 0xa7be, 0xa7c0, 0xa7c2, 0xa7c7, 0xa7c9, 0xa7d0, 0xa7d6, 0xa7d8, 0xa7f5, 0xa7b3, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6, 0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf, 0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da, 0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3, 0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec, 0x13ed, 0x13ee, 0x13ef, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x10570, 0x10571, 0x10572, 0x10573, 0x10574, 0x10575, 0x10576, 0x10577, 0x10578, 0x10579, 0x1057a, 0x1057c, 0x1057d, 0x1057e, 0x1057f, 0x10580, 0x10581, 0x10582, 0x10583, 0x10584, 0x10585, 0x10586, 0x10587, 0x10588, 0x10589, 0x1058a, 0x1058c, 0x1058d, 0x1058e, 0x1058f, 0x10590, 0x10591, 0x10592, 0x10594, 0x10595, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae, 0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x16e40, 0x16e41, 0x16e42, 0x16e43, 0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a, 0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c, 0x16e5d, 0x16e5e, 0x16e5f, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x2000053, 0x73, 0x130, 0x2000046, 0x66, 0x2000046, 0x69, 0x2000046, 0x6c, 0x3000046, 0x66, 0x69, 0x3000046, 0x66, 0x6c, 0x2000053, 0x74, 0x2000053, 0x74, 0x2000535, 0x582, 0x2000544, 0x576, 0x2000544, 0x565, 0x2000544, 0x56b, 0x200054e, 0x576, 0x2000544, 0x56d, 0x20002bc, 0x4e, 0x3000399, 0x308, 0x301, 0x30003a5, 0x308, 0x301, 0x200004a, 0x30c, 0x2000048, 0x331, 0x2000054, 0x308, 0x2000057, 0x30a, 0x2000059, 0x30a, 0x2000041, 0x2be, 0x20003a5, 0x313, 0x30003a5, 0x313, 0x300, 0x30003a5, 0x313, 0x301, 0x30003a5, 0x313, 0x342, 0x2000391, 0x342, 0x2000397, 0x342, 0x3000399, 0x308, 0x300, 0x3000399, 0x308, 0x301, 0x2000399, 0x342, 0x3000399, 0x308, 0x342, 0x30003a5, 0x308, 0x300, 0x30003a5, 0x308, 0x301, 0x20003a1, 0x313, 0x20003a5, 0x342, 0x30003a5, 0x308, 0x342, 0x20003a9, 0x342, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fbc, 0x1fbc, 0x1fcc, 0x1fcc, 0x1ffc, 0x1ffc, 0x2001fba, 0x345, 0x2000386, 0x345, 0x2001fca, 0x345, 0x2000389, 0x345, 0x2001ffa, 0x345, 0x200038f, 0x345, 0x3000391, 0x342, 0x345, 0x3000397, 0x342, 0x345, 0x30003a9, 0x342, 0x345]; return t; } +//2112 bytes +enum lowerCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000E0", +x" +000001000000014000002600", +x" +020201000402030206020205080702020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000030002000500040006000600060006000600060006000600060006 +000600070008000600060006000600060006000600060006000A0009000C000B000E000D000600060006000F00060006 +000600060006000600110010000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060013001200060006001400060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006001500060006000600160006 +000600060006000600180017001900060006000600060006001B001A0006000600060006000600060006000600060006 +0006001C000600060006000600060006000600060006000600060006000600060006000600060006000600060006001D +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006001F001E0021002000060006000600060006000600220006 +000600230006000600060006000600060024000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600000000000000000000000007FFFFFE +000000000420040080000000FF7FFFFFAAAAAAAA55AAAAAAAAAAAB55D4AAAAAA4E243129E6512D2AB5555240AA29AAAA +AAAAAAAA93FAAAAAFFFFAA85FFFFFFFFFFEFFFFF01FFFFFF000000030000001F0000000000000000000000203C8A0000 +00010000FFFFF000AAE37FFF192FAAAA00000000FFFF0000FFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554AAAAAAAA +AAAAAAAA0000AAAA00000000FFFFFFFF000001FF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF0000F7FFFFFF +000000000000000000000000000000000000000000000000000000003F00000000000000000000000000000000000000 +000005FF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA003F00FF00FF00FF00FF003F3FFF00FF +00FF00FF40DF00FF00CF00DC00DC00FF000000000000000000000000800200001FFF0000000000000000000000000000 +0008C40032108000000043C0FFFF00000000001000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFF0000000003FF00000000FFFF0000FFFFFFFF3FDA1562AAAAAAAAAAAAAAAAAAAAAAAA0008501A +FFFFFFFF000020BF0000000000000000000000000000000000000000000000000000000000000000AAAAAAAA00002AAA +3AAAAAAA00000000000000000000000000000000AAABAAA8AAAAAAAA95FFAAAAAABA50AAAAA082AA0AAA250A075C0000 +00000000FFFF0000F7FFFFFFFFFF03FFFFFFFFFFFFFFFFFF000000000000000000F8007F000000000000000000000000 +00000000000000000000000000000000000000000000000007FFFFFE0000000000000000000000000000000000000000 +00000000FFFFFF000000FFFF000000000000000000000000FF0000000FFFFFFF00000000000000000000000000000000 +FF8000001BFBFFFB000000000000000000000000000000000000000000000000FFFFFFB907FDFFFF0000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF0007FFFF000000000000000000000000FFFF0000 +0000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF00000000 +000000000000000000000000FFFFFFFF00000000000000000000000000000000FC000000000FFFFFFFDFC000000000FF +0FFFFFFCEBC000000000FFEFFFFFFC00C000000F00FFFFFFFFFC000000000FFFFFFFFFC0FC000000000FFFFFFFFFC000 +000000FF0FFFFFFCFFC000000000FFFFFFFFFC000000003FF7FFFFFCF00000030FDFFFFFFFC00000003F7FFFFFFF0000 +0000FDFFFFFFFC0000000BF7000000007FFFFBFF000007E0000000000000000000000000000000000000000000000000 +00000000FFFF0000FFFFFFFF00003FFF0000000000000000000000000000000000000000FFFFFFFC0000000F00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//1888 bytes +enum upperCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000000E0", +x" +000001000000014000001F00", +x" +020201000402030206020205080702020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000030002000500040006000600060006000600060006000600060006 +00060007000800060006000600060006000600060006000600060009000B000A000C0006000600060006000D00060006 +00060006000600060006000E000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060010000F00060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600110006 +000600060006000600130012000600060006000600060006001500140006000600060006000600060006000600060006 +000600160006000600060006000600060006000600060006000600060006000600060006000600060006000600060017 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +00060006000600060006000600060006000600060006000600190018001B001A00060006000600060006000600060006 +00060006000600060006000600060006001C0006000600060006000600060006001D0006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +0006000600060006000600060006000600060006000600060006000600060006000000000000000007FFFFFE00000000 +00000000000000007F7FFFFF0000000055555555AA555555555554AA2B555555B1DBCED611AED2D54AAAA49055D25555 +555555556C0555550000557A000000000000000000000000000000000000000000000000000000000000000080450000 +FFFED74000000FFB551C8000E6905555FFFFFFFF0000FFFF0000000055555555555554015555555555552AAB55555555 +55555555FFFE5555007FFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000020BF00000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFFFF003FFFFF00000000000000000000000000000000 +FFFF0200E7FFFFFF00000000000000005555555555555555555555555555555540155555555555555555555555555555 +3F00FF00FF00FF00AA003F000000FF00000000000F0000000F000F000F001F003E273884C00F3D50000000200000FFFF +000000080000000000000000000000000000000000000000000000000000000000000000FFC000000000FFFF00000000 +FFFFFFFF0000FFFF00000000C025EA9D5555555555555555555555550004280500000000000000005555555500001555 +055555550000000000000000000000000000000055545554555555556A00555555452855555F7D5515411AF500200000 +0000000007FFFFFE000000000000000000000000000000000000000000000000FFFFFFFF000000FF0000000000000000 +00000000FFFF0000000FFFFF00000000000000000000000000000000F7FF00000037F7FF000000000000000000000000 +00000000000000000000000000000000FFFFFFFF0007FFFF00000000000000000000000000000000FFFF00000000003F +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000000 +0000000000000000FFFFFFFF000000000000000000000000000000000000000003FFFFFFFFF0000000003FFFFFFFFF00 +D0000003003FDE64FFFF0000000003FF1FDFE7B07B0000000001FC5FFFFFF0000000003F03FFFFFFFFF0000000003FFF +FFFFFF00F0000003003FFFFFFFFF0000000003FFFFFFFF000000000107FFFFFCF0000000001FFFFFFFC0000000007FFF +FFFF0000000001FF0000040000000000FFFFFFFF00000003000000000000000000000000000000000000000000000000 +00000000FFFF0000FFFF03FFFFFF03FF000003FF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//11904 bytes +enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000001240", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000016001500000000000000000000000000000000000000000018001700000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000019001A00000000001B001D001C001F001E002100200023002200000000000000000025002400000026 +000000000000000000000000000000000000000000280027000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000002A0029002C002B0000002D00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002E00000000002F003100300033003200000000000000000000000000000000 +000000000000000000340000000000350000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000036000000000000000000000000000000000000000000000000000000000038003700000000 +0000000000000000000000000000000000000000000000000000000000000000003A0039003C003B003D00000000003E +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000040003F00410000000000420000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000470046000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0947FFFF090D008203250611093500BF09FE0BD00B61006D084606E10B0400E20475085805E705AA0A6307A301950182 +04EB0534FFFF0303FFFFFFFFFFFFFFFF0948FFFF090E008303260612093600C009FF0BD10B62006E084706E20B0500E3 +0476085905E805AB0A6407A40196018304EC0535FFFF0304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF098FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C407990876011A09E70B0A03E70261039B056F0B83012A03A3064103210049 +0905060902A9008805A1072BFFFF00CD09AC0B160511021D08A0071B09190A7505C5079A0877011B09E80B0B03E80262 +039C05700B84012B03A406420322004A0906060A02AA008905A2072CFFFF00CE09AD0B170512021E08A1071C03760A76 +0A0D0A0C04DE04DD01D501D40B8E0B8D020A0209074E074D00D000CF08D708D6005E005D062A06290054005306360635 +02BC02BB067B067A015C015B081F081E0BBF0BBE0805080404D004CF0A940A9301BA01B905A905A80226022509970996 +FFFFFFFF0899089809630962032803270096FFFF0717009700900718083C00910B66083D07E80B67012207E90A530123 +FFFF0A5404EE04ED07E307E20B9C0B9B06D706D601640163069B069A02B402B30620061F000D000C0659065800720071 +085B085A00D400D30744074301E901E80BB70BB601A601A504D804D70A840A8307ED07EC057C057B09A109A00A2B0A2A +063B03770023063C0613002405E9061406A006A90B4E0B4D02740273027F053C0B6F028001B30818FFFF01B40AF40787 +08DC0A77053608DD0233028509BA0B3F00990098044704DB091500AC033700D5001B001A064406430107010603DB0569 +09D203DCFFFFFFFF016B016A0777080C01AB07780542079D030B05430AF2030C0260025FFFFFFFFF094A094901B1FFFF +FFFFFFFFFFFFFFFF0954095305F6095505F805F70B190B1805130B1A07B605140A8F07B707890A90044F078A0AB20450 +03070AB305670308078805680B8A0B89066D066C016D016C0610060F02CA02C9065F065E00F400F306C106C005860585 +0AECFFFF0AEE0AED0766076501B202340BA40BA301F501F404260425099B099A0861086005B505B4096A096908E608E5 +03BA03B908BC08BB0B480B4704280427041704160AC10AC002BE02BD05470546016F016E080F080E05CD05CC086B086A +FFFF00D606E806E7006600650BB90BB800C400C3075C075B007B007A08AA08A90590058F070F070EFFFFFFFFFFFFFFFF +FFFFFFFF07B40A3E04DC07B5098707DC014D029506AA014E02DD04290A030A020950094F0330032F097E097D0A270A26 +0B55040E06A10227FFFF053D08190B700AF5FFFF0A78FFFFFFFF096BFFFFFFFF0B6405370286FFFF0BAC069EFFFF00B7 +0B4009BB065400FBFFFF09B400ADFFFF05B6FFFFFFFF09160338FFFFFFFFFFFFFFFFFFFFFFFFFFFF0033FFFFFFFFFFFF +FFFF056A09D3052CFFFFFFFF035CFFFF042A080D079E01ACFFFF02DEFFFFFFFFFFFFFFFFFFFF0AF3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0094FFFFFFFF0729FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF099CFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B504B401D701D6FFFFFFFF020001FF +FFFFFFFF0A67FFFF088E0124038EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02A3084806F1FFFF00EDFFFF081009F80BD6 +04C50392017E04BE0AEF0A47016801DA099D05B00B3D0B68083E0990010803A706450BA906A2FFFF061D033900AE0351 +07140927009C086C06F202A400EE084904C609FC017F04BF0AF00A48016901DB099E05B10B3E0B69083F0991010903A8 +06460BAA06A406A3061E033A00AF035207150928009D086D0BD7081109A209F905B204C0FFFFFFFF0353FFFF09A30BAB +018E018D04B904B80ABB0ABA087F087E0598059709B309B20A0F0A0E03C803C7030002FF08EA08E904580457036F036E +06470B6A038F01DE0AF105B30AB6FFFF01DF0AB705F105F00A68FFFF088F0125053005050998029B09B80B2B05C20092 +09230719092100A203290605039D009E0B7B073903CD055603DF07010AE80287088A0ABE04C9012807C8082801BF0A44 +0527080A02E90AA50B0009D0015D024F067C05910B91096406370A20005503CF0B7C073A03CE055703E007020AE90288 +088B0ABF04CA012907C9082901C00A450528080B02EA0AA60B0109D1015E0250067D05920B92096506380A21005603D0 +053105060999029C09B90B2C05C300930924071A092200A3032A0606039E009F0AD50AD405E305E2024E024D0B800B7F +0204020303F203F109E209E10879087805B905B80908090708EE08ED03A603A508A808A70961096003EA03E904240423 +0B580B57FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BD05BC084B084A00E800E706EA06E90060005F0632063100050004 +074C074B00CC00CB08D508D4057E057D06CF06CE010D010C0504050301A401A30A410A400466046507D907D80BA60BA5 +085108500413041209EB09EA0918091703320331090209010A290A2803C403C306DC02E5022906DD05EE022A024105EF +0A51024204B00A5207B004B102E607B10246024505720571026C026B06FE06FD005A0059063E063D0020001F06910690 +01150114068F068E025202510580057F011D011C07C707C604AB04AA079607950AC30AC2047804770240023F0B360B35 +03980397043804370938093708F208F103440343094E094D0A310A3003E403E3084508440AC70AC607B907B801D101D0 +0A4C0A4B02CE02CD050004FF0173017206BD06BC05D105D006650664002E002D06510650003A00390BA00B9F00B600B5 +075607550AFF0AFE08AE08AD050205010BD8FFFF02310180073304C70ACC029D08720AF6059F048D06EF03B301350B99 +06940390030D035E0696092D0137095606F305CA0B5D0973087A0A360517053A072F029F02390A6D05F20186FFFF07A5 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BD9FFFF02320181073404C80ACD029E08730AF705A0048E06F003B401360B9A +06950391030E035F0697092E0138095706F405CB0B5E0974087B0A370518053B073002A0023A0A6E05F30187FFFF07A6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF084209E3052303F7071001FA01B50BC4 +0495024B01BD04A80AD00ACE047B089C081C05810B2D06B8039F00F9043D0660093302E308EB06A7034701510941068A +0A1A0B8503DD086E02EB010A0ADAFFFFFFFFFFFFFFFFFFFF0A87FFFFFFFFFFFF0B1B0155040806B1043905DA095C0680 +0323002F03D506070A22002709510B710573008E087C06CA09D70B14043508A2021F05150A3A077F025301E4072D04E5 +0AE002AB083809C2059D03ED070603D701200B6BFFFF03AB000EFFFF06AD092FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +043F05EC036C00C5083606DA095E006F038008B30A2C0B5F08E306190341008002010A9F0A8D02D7097F06D205750139 +0BB407F807E6058B04F1049B077B0A1E02F1045D066603840143087006BA09CA0043046B08BF094300470BD2064C031F +023D09DD0B9D0A100084027B075705590A3C0B10079B073101EE053E04CB08DE0A2E029303BB06F505CE020508320B59 +035805F40366069202B7013B095806C60BBA004D0399063904450063FFFFFFFF0BBB004E039A063A04460064FFFFFFFF +0703055805290A460AA80AA705E40966082406B5FFFF0825FFFFFFFFFFFFFFFF0B1C0156040906B2043A05DB095D0681 +0324003003D606080A23002809520B720574008F087D06CB09D80B15043608A3022005160A3B0780025401E5072E04E6 +0AE102AC083909C3059E03EE070703D801210B6CFFFF03AC000FFFFF06AE0930FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +051DFFFFFFFFFFFF0319FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BC8 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +070D070C04DA04D9079407930BBD0BBC082108200482048109AF09AE026A0269058E058D09320931091E091D0340033F +02D602D5093E093D046A046903E203E10B3A0B3907E507E404F004EF0A4E0A4D01B001AF05E105E0024A024907480747 +00DD00DC085F085E00620061062C062B001300120624062302AE02AD06AC06AB0160015F06D106D005C705C607BD07BC +0A960A9504A304A2021202110B900B8F0218021703EC03EB0970096F089B089A03610360092A092908FA08F903890388 +08A508A4098C098B03E603E5020E020D0B740B7301BC01BB0490048F0A720A7107FB07FA05D905D8082F082E0150014F +0675067402B602B506490648004C004B06340633008B008A08C708C605550554075407530210020F04D404D301D901D8 +0A8C0A8B044E044D07EF07EEFFFFFFFFFFFFFFFF08A6FFFFFFFFFFFFFFFF091A031203110910090F09F709F603B003AF +025E025D0B0F0B0E043C043B080308020A560A5507CF07CE04D604D5073C073B02240223055C055B009B009A071E071D +00A500A4060E060D0050004F066B066A012701260B300B2F02FE02FD05490548011901180790078F04A704A607D307D2 +0AA20AA104030402025802570BB30BB203CA03C9044A044908FC08FB0920091F036B036A094C094B09BF09BE05620561 +08C908C80AAA0AA90460045F019C019B0A7A0A7901DD01DC06FA06F900F000EF03B5061B0A32003709790B77056B00F5 +03B6061C0A330038097A0B78056C00F60A65078B0235019F071204DFFFFFFFFF0A66078C023601A0071304E0FFFFFFFF +061503A90018030F0698091301740890061603AA0019031006990914017508910A6902EF01840AFA04BA01A701EA07AC +0A6A02F001850AFB04BB01A801EB07AD035A0076036205F908E7000AFFFFFFFF035B0077036305FA08E8000BFFFFFFFF +01F0FFFF0A91FFFF04E7FFFF078DFFFF01F1FFFF0A92FFFF04E8FFFF078EFFFF02CF09BC066E044B002B03BF05FB0BC2 +02D009BD066F044C002C03C005FC0BC302F704550A0602DF02130AA3042B05E50008090B0A890AE2062F032DFFFFFFFF +09920B5103B1028F02CB067E091B012C09930B5203B2029002CC067F091C012D03C506FB0A24029908120B4905C80207 +03C606FC0A25029A08130B4A05C902080BB00A1400DE09DF075D05A6007E028B0BB10A1500DF09E0075E05A7007F028C +0682037C09A6FFFFFFFFFFFFFFFFFFFF0683037D02F80456FFFF09A7FFFF099FFFFFFFFF00F7FFFFFFFFFFFFFFFFFFFF +0A0702E002140AA4FFFF00F8FFFFFFFF036800BD0393FFFFFFFFFFFFFFFFFFFF036900BE042C05E6FFFFFFFFFFFFFFFF +01C9017809FDFFFF02A5FFFFFFFFFFFF01CA01790A8A0AE3FFFF02A6FFFFFFFFFFFFFFFF03CBFFFFFFFFFFFFFFFFFFFF +0009090C0630032EFFFF03CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0716 +FFFFFFFF09E90B63FFFFFFFFFFFFFFFFFFFFFFFFFFFF097BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF097CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAB07D0046704A4017A07850A730A0A01F6054A072302FB00E00B1F084E045B +0AAC07D1046804A5017B07860A740A0B01F7054B072402FC00E10B20084F045CFFFFFFFF0894FFFFFFFF0895FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AC038600A80B5B0763083A0540040A08BD09FA +0AC4021907D40497018F022B0AD2073702A70104052E088009A40B53096D067605AD038700A90B5C0764083B0541040B +08BE09FB0AC5021A07D504980190022C0AD3073802A80105052F088109A50B54096E0677FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF067003D3010E0B2106CC084C05210451 +088C0A810AE401CE077104AC022F02150B9507250281054E0418083009B000AA0967071F05BA00310985065208F7003D +03AD0688089601530B41069C03F305EA041007F00AD6011602ED04CD055001C1067103D4010F0B2206CD084D05220452 +088D0A820AE501CF077204AD023002160B9607260282054F0419083109B100AB0968072005BB00320986065308F8003E +03AE0689089701540B42069D03F405EB041107F10AD7011702EE04CE055101C2003C003B031A06550A3F00340A0807DD +038A0A09026F038B0B560270040F05B7FFFF02280A4A0A49076BFFFFFFFF076CFFFFFFFFFFFFFFFFFFFFFFFF02960988 +02B002AF0346034508F408F3093C093B037F037E02C302C209C109C0047E047D081B081A0B8C0B8B0798079704C204C1 +0A980A9701F301F20584058300D800D7074607450068006708D108D0002200210640063F005C005B0B500B4F026E026D +06D906D80192019107DF07DE05D305D2076E076D0A6C0A6B04F404F3028A02890B380B3703B803B70480047F09820981 +08FE08FD03340333095B095A09ED09EC05940593085308520ADF0ADE042E042D022202210A430A4201AA01A907280727 +0111011008410840FFFFFFFFFFFFFFFFFFFFFFFF0364FFFF03350365FFFF0336FFFFFFFF06EC06EBFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF084309E4052403F8071101FB01B60BC50496024C01BE04A90AD10ACF047C089D +081D05820B2E06B903A000FA043E0661093402E408EC06A8034801520942068B0A1B0B8603DE086F02EC010B0ADBFFFF +FFFFFFFFFFFFFFFF0A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01E101E00A500A4F0ACB0ACA07BB07BA0142014106B706B602C502C4050A05090040003F065B065A05D505D406630662 +00790078075A0759004200410BA20BA104FE04FD07A207A10B070B0608B208B102D202D10AF90AF8017D017CFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052B052A02A202A1097609750A350A34 +07CD07CC0AB50AB40A700A6F018C018B0768076700B100B008AC08AB054505440602060100360035FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0007000608D308D200C800C7 +070B070A00EA00E906260625006A0069FFFFFFFF015A0159085508540B820B81051A051909EF09EE0A5C0A5B02BA02B9 +089F089E098A098909AB09AA03A203A10B940B9308750874031E031D033C033B021C021B05BF05BE041D041C09B709B6 +0533053208890888024802470A580A5701010100068506840B460B4506BF06BE015801570679067802F402F306B406B3 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C0FFFF04E907C1051E04EA0BA80BA7059C059B09E609E50B030B0208650864 +FFFFFFFF0051FFFF0BAD0052FFFFFFFF0B440B4302560255FFFF07AE03BE03BD07F707F604AF04AE040704060A130A12 +0526052502840283082D082C011F011E07220721096C00B809B50B65FFFF00FC035D072A0B970095060005FF00A100A0 +070006FF0140013F05660565029802970823082204420441052D07AF07790BC90176077A069F017709C509C4FFFFFFFF +03020301FFFFFFFFFFFFFFFF031C031B0B260B2508870886FFFF0448FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A1CFFFFFFFF0A1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B98FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +044005ED036D00C6083706DB095F0070038108B40A2D0B6008E4061A0342008102020AA00A8E02D8098006D30576013A +0BB507F907E7058C04F2049C077C0A1F02F2045E066703850144087106BB09CB0044046C08C0094400480BD3064D0320 +023E09DE0B9E0A110085027C0758055A0A3D0B11079C073201EF053F04CC08DF0A2F029403BC06F605CF020608330B5A +035905F50367069302B8013C095906C7FFFFFFFFFFFFFFFF082AFFFFFFFF082BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09F0FFFF02710B2705C001450977065C076904E10BAE079107E0013D040C050B +0563026302F903F90AB80AE6019907C2061708EFFFFF0461FFFFFFFFFFFFFFFF09F1FFFF02720B2805C101460978065D +076A04E20BAF079207E1013E040D050C0564026402FA03FA0AB90AE7019A07C3061808F0FFFF0462FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF076F0A9905D6077D0808013109DB0ADC0B31098302E709C804F5050F014707F2 +048900EB08F5064E02D900450378073D041402DB0267055F0BC00149038C068C0AFC0AAD048B07AA023B04930B87079F +07700A9A05D7077E0809013209DC0ADD0B32098402E809C904F60510014807F3048A00EC08F6064F02DA00460379073E +041502DC026805600BC1014A038D068D0AFD0AAE048C07AB023C04940B8807A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B080A7D075F07F4022D05870B3B09CE +09F4023707B20B7504B202590781049105DC033D06C2034F01C50B6D06E3028D029109D9066803D1002902F5062108FF +0A5D077308D80A5FFFFFFFFFFFFFFFFF0B090A7E076007F5022E05880B3C09CF09F5023807B30B7604B3025A07820492 +05DD033E06C3035001C60B6E06E4028E029209DA066903D2002A02F6062209000A5E077408D90A60FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +047108AF027500A60B1D06C4025B011209710B79FFFF00B9092505FD092B00BB07EA082601330B7D05770856030903EF +042F0599FFFF02B107830A5904F9048706560A61FFFF03C106ED02D308B0FFFF00A7047206C5027601130B1E0B7A025C +00BA097205FEFFFF00BC09260827092C0B7E07EB0857013403F00578059A030A02B204300A5AFFFF048807840A6204FA +03C2065702D4FFFFFFFF06EEFFFFFFFF049904E3014B019308000BCA058901EC03F506AF045305DE0ABC080603130A7F +0BC6093F00C909390749034D008C08B50892046F01020994073508C1007C03720538020B034B04D10B0C0A9B047307BE +085C098D055204790704024301C30BCC0A160305FFFF0686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +049A04E4014C019408010BCB058A01ED03F606B0045405DF0ABD080703140A800BC7094000CA093A074A034E008D08B6 +0893047001030995073608C2007D03730539020C034C04D20B0D0A9C047407BF085D098E0553047A0705024401C40BCD +0A170306FFFF0687FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01C70197075104BC0B1201F808CA09F209C60B23050D08CC01D204F70A7B0741 +001004830627090301B708B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01C80198075204BD0B1301F908CB09F3 +09C70B24050E08CD01D304F80A7C0742001104840628090401B808BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E605950BCE07C401E201AD04FB04A0037A00D10862074F09A800F1046D0868 +01610B4B06A508B702E10356064A09090A9D037008660AEA056D046306D403D901E705960BCF07C501E301AE04FC04A1 +037B00D20863075009A900F2046E086901620B4C06A608B802E20357064B090A0A9E037108670AEB056E046406D503DA +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A000086032B073F041E0265041A060B0945006B057906F7035400160A38062D +04C3048501A107CA0708031503170AD808CE05070B2906E50A180A85051B07D60A010087032C0740041F0266041B060C +0946006C057A06F8035500170A39062E04C4048601A207CB0709031603180AD908CF05080B2A06E60A190A86051C07D7 +0404067208DA00570911060304430025038205AE000000C108340761051F054C000207DA0775019D045904B60AC80349 +027D0B33055D017009CC06C80A040BD4001403740405067308DB00580912060404440026038305AF000100C208350762 +0520054D000307DB0776019E045A04B70AC9034A027E0B34055E017109CD06C90A050BD500150375FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//11904 bytes +enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000001240", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000016001500000000000000000000000000000000000000000018001700000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000019001A00000000001B001D001C001F001E002100200023002200000000000000000025002400000026 +000000000000000000000000000000000000000000280027000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000002A0029002C002B0000002D00000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002E00000000002F003100300033003200000000000000000000000000000000 +000000000000000000340000000000350000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000036000000000000000000000000000000000000000000000000000000000038003700000000 +0000000000000000000000000000000000000000000000000000000000000000003A0039003C003B003D00000000003E +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000040003F00410000000000420000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000044004300000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000470046000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +09E8FFFF09AC008C0350066E09D600C90AAA0CA00C2A007608D107500BC300F104B408E3063F05FC0B16081C01AE019B +0533057FFFFF032AFFFFFFFFFFFFFFFF09E9FFFF09AD008D0351066F09D700CA0AAB0CA10C2B007708D207510BC400F2 +04B508E4064005FD0B17081D01AF019C05340580FFFF032BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A35FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061B0810090301300A900BCC041E028103CD05BC0C4E014003D506A0034C0050 +09A4066602CC009205F0079BFFFF00D70A540BDB0559023A0931078B0BD60B29061C0811090401310A910BCD041F0282 +03CE05BD0C4F014103D606A1034D005109A5066702CD009305F1079CFFFF00D80A550BDC055A023B0932078C03A70B2A +0AB90AB80524052301EE01ED0C590C580227022607C207C100DA00D9096C096B0067006606890688005D005C06950694 +02E202E106DC06DB0175017408A708A60C8B0C8A08860885051605150B4A0B4901D301D205FB05FA024302420A3E0A3D +FFFF0402092A09290A070A060353035200A0FFFF078700A1009A078808C7009B0C2F08C808620C30013808630B060139 +03240B0705360535085D085C0C670C6607440743017D017C0703070202DA02D9067F067E000F000E06B806B7007B007A +08E608E500DE00DD07B807B7020502040C830C8201BF01BE051E051D0B3A0B390869086805C905C80A480A470ADB0ADA +069A03A80027069B0670002806410671070807110C160C1502940293029F05870C3802A001CC089FFFFF01CD0BB307FE +09760B2B05810977025102A50A620C0600A300A20482052109B400B6036200DF001F001E06A306A2011A0119041205B6 +0A7A0413FFFFFFFF0184018307EE089201C407EF058D08160332058E0BB103330280027FFFFFFFFF09EB09EA01CAFFFF +FFFFFFFFFFFFFFFF09F809F7065109F9065306520BDE0BDD055B0BDF0830055C0B45083108000B46048A08010B6B048B +032E0B6C05B4032F07FF05B50C550C5406CE06CD01860185066D066C02F002EF06BE06BD01030102072C072B05D305D2 +0BAB09480BAD0BAC07DD07DC01CB02520C6F0C6E02110210046104600A420A4108EE08ED060706060A0E0A0D09830982 +03ED03EC095109500C0F0C0E04630462045204510B7A0B7902E402E30592059101880187089508940625062408F808F7 +FFFF00E007570756006F006E0C850C8400CE00CD07D207D100840083093B093A05DF05DE077F077EFFFFFFFFFFFFFFFF +FFFFFFFF082E0AEE0522082F0A2D0856016602B707120167030404640AAF0AAE09F109F0035B035A0A240A230AD70AD6 +0C1E044707090244FFFF058808A00C390BB4FFFF0B2CFFFFFFFF0A0FFFFFFFFF0C2D058202A6FFFF0C770706FFFF00C1 +0C070A6306B3010BFFFF0A5C00B7FFFF060DFFFFFFFF09B50363FFFFFFFFFFFFFFFFFFFFFFFFFFFF0037FFFFFFFFFFFF +FFFF05B70A7B0575FFFFFFFF038CFFFF04650893081701C5FFFF0305FFFFFFFFFFFFFFFFFFFF0BB2FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF009EFFFFFFFF0799FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A43FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F404F301F001EFFFFFFFFF021C021B +FFFFFFFF0B1AFFFF091F013A03BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C608D30760FFFF00FCFFFF08960AA30CA6 +050B08A1019705010BAE0AFA018101F30A4406020C040C3108C90A36011B03D906A40C74070AFFFF067C036400B8037E +078409C800A608F9076102C700FD08D4050C0AA7019805020BAF0AFB018201F40A4506030C050C3208CA0A37011C03DA +06A50C75070C070B067D036500B9037F078509C900A708FA0CA708970A490AA406040503FFFFFFFF0380FFFF0A4A0C76 +01A701A604FC04FB0B740B730910090F05E705E60A5B0A5A0ABB0ABA03FC03FB03270326098709860493049203A0039F +06A60C3303C001F70BB006050B6FFFFF01F80B70064706460B1BFFFF0920013B057B054D0A3F02BE0A600BF00619009C +09C4078909C200AC0354066003CF00A80C4407AA040405A3041607710BA402A7091B0B77050F013E084208B201D80AF4 +0570089003100B5E0BBF0A780176026F06DD05E00C5C0A0806960ACD005E04080C4507AB040505A4041707720BA502A8 +091C0B780510013F084308B301D90AF50571089103110B5F0BC00A790177027006DE05E10C5D0A0906970ACE005F0409 +057C054E0A4002BF0A610BF1061A009D09C5078A09C300AD0355066103D000A90B8E0B8D063B063A026E026D0C490C48 +0220021F042904280A8B0A8A09060905060C060B09A709A6098B098A03D803D7093909380A050A0404210420045F045E +0C210C20FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0614061308D608D500F700F607590758006900680691069000050004 +07C007BF00D600D5096A096905CB05CA073C073B0120011F054C054B01BD01BC0AF10AF004A304A2085308520C710C70 +08DC08DB044E044D0A940A9309B709B6035D035C099F099E0AD90AD803F703F6074B030C0246074C06480247025F0649 +0B04026004EF0B05082A04F0030D082B0264026305BF05BE028C028B076E076D00630062069D069C0024002306F806F7 +012B012A06F306F20272027105CD05CC013301320841084004EA04E9080D080C0B7C0B7B04B704B6025E025D0BFB0BFA +03CA03C90473047209D909D8098F098E0371037009EF09EE0AE10AE0041B041A08D008CF0B800B7F0833083201EA01E9 +0AFF0AFE02F502F405480547018C018B072807270629062806C406C30032003106B006AF003E003D0C6B0C6A00C000BF +07CA07C90BBE0BBD09430942054A05490CA8FFFF024F019907A3050D0B8502C008FF0BB505EE04CC075E03E6014C0C64 +06FC03C10334038E06FE09CE014E09FA076206220C260A1709070AE6055F0585079F02C202570B20064D019FFFFF081E +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0CA9FFFF0250019A07A4050E0B8602C109000BB605EF04CD075F03E7014D0C65 +06FD03C20335038F06FF09CF014F09FB076306230C270A1809080AE70560058607A002C302580B21064E01A00678081F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08CD0A8C056C042E0780021601CE0C94 +04D4026B01D604E70B890B8704BA092D08A405CE0BF2072303D10109047806BF09D4030A0988070F0374016A09E206EC +0AC70C50041408FB0312011D0B93FFFFFFFFFFFFFFFFFFFF0B3DFFFFFFFFFFFF0BE0016E0441071A047406320A0006E2 +034E0033040A06620AD1002B09F50C3A05C00098090B07370A7F0BD904700933023C055D0AEA07F6027301FD079D052B +0B9A02CE08C30A6A05EC04240776040C01360C34FFFF03DD0010FFFF071509D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +047A0644039D00CF08C107490A02007803B1095F0ADC0C2809800676036E008E021D0B560B4302FE0A25073F05C20150 +0C800879086005DA053904DA07F20ACB0318049806C503B5015A08FD07250A72004C04A8095409E4004E0CA206AB034A +025B0A850C680ABC0096029B07CD05A60AEC0BD2081407A1020A05890511097B0ADE02B503EE07640626022108BD0C3E +0386064F03A5072F02DD015209FC07330C86005603CB06980480006CFFFFFFFF0C87005703CC06990481006DFFFFFFFF +077305A505720AF60B610B60063C0A0A08AE0720FFFF08AFFFFFFFFFFFFFFFFF0BE1016F0442071B047506330A0106E3 +034F0034040B06630AD2002C09F60C3B05C10099090C07380A800BDA04710934023D055E0AEB07F7027401FE079E052C +0B9B02CF08C40A6B05ED04250777040D01370C35FFFF03DE0011FFFF071609D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0577FFFFFFFFFFFF0344FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C98 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +077D077C0520051F080B080A0C890C8808A908A804C104C00A570A56028A028905DD05DC09D309D209BF09BE036D036C +02FD02FC09DF09DE04A704A6041904180BFF0BFE085F085E053805370B010B0001C901C806390638026A026907BC07BB +00E700E608EA08E9006B006A068B068A001500140683068202D102D00714071301790178073E073D061E061D08370836 +0B4C0B4B04E204E1022F022E0C5B0C5A02350234042304220A140A13092C092B0391039009CB09CA0997099603BA03B9 +093609350A320A31041D041C022B022A0C3D0C3C01D501D404CF04CE0B260B25087C087B0631063008BA08B901690168 +06D606D502DC02DB06A806A7005300520693069200950094095C095B05A205A107C807C7022D022C051A051901F201F1 +0B420B4104890488086B086A00E10C9205D00406093704ACFFFFFFFFFFFF0BD7033B033A09AF09AE0AA20AA103E203E1 +027E027D0BD10BD004770476088408830B090B0808490848051C051B07AD07AC0241024005A905A800A500A4078E078D +00AF00AE066B066A0059005806CC06CB013D013C0BF50BF40331033005940593012F012E0807080604E604E5084D084C +0B590B58043C043B027802770C7F0C7E03FE03FD048504840999099809C109C0039C039B09ED09EC0A670A6605AF05AE +095E095D0B630B62049B049A01B501B40B300B2F01F601F50769076800FF00FE03E8067A0AE2003B0A1D0C4005B80104 +03E9067B0AE3003C0A1E0C4105B901050B180802025301B807820525FFFFFFFF0B190803025401B907830526FFFFFFFF +067203DB001A0336070009B2018D0921067303DC001B0337070109B3018E09220B1C0316019D0BB904FD01C002060825 +0B1D0317019E0BBA04FE01C102070826038A007F039206540984000CFFFFFFFF038B0080039306550985000DFFFFFFFF +020C00870B47090D052D0C2208040745020DFFFF0B48FFFF052EFFFF0805FFFF02F60A6406CF0486002F03F206560C90 +02F70A6506D00487003003F306570C91031E04900AB2030602300B5C0466063D000A09AA0B3F0B9C068E0358FFFFFFFF +0AF70C1908740BA8060807AE09BB01420AF80C1A08750BA9060907AF09BC014303F8076A0AD3064A09F20C10061F0223 +03F9076B0AD4064B09F30C11062002240C7B0AC00B510BC707D3096F020105650C7C0AC10B520BC807D4097002020566 +06E403AD0A4D049CFFFF034000410C7906E503AE031F0491FFFF0A4EFFFF0A46FFFFFFFF0B22086CFFFF0ACF05310597 +0AB3030702310B5DFFFF0B23FFFFFFFF039900C708A2093EFFFFFFFF09940664039A00C80467063EFFFFFFFFFFFFFFFF +01E201910AA8090902C80C4C04F5081201E301920B400B9DFFFF02C9FFFFFFFFFFFFFFFF07170A97FFFF05E806F0093C +000B09AB068F0359FFFF0718FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0786 +FFFFFFFF0A920C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A22FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B64084A04A404E3019307FC0B270AB6021205950793032200ED0BE408D90496 +0B65084B04A504E4019407FD0B280AB7021305960794032300EE0BE508DA0497FFFFFFFF0925FFFFFFFF0926FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FE03B700B20C2407DA08C5058B044309520AA5 +0B7D0236084E04D601A8024B0B8B07A802CA0117057909110A4B0C1C0A1106D705FF03B800B30C2507DB08C6058C0444 +09530AA60B7E0237084F04D701A9024C0B8C07A902CB0118057A09120A4C0C1D0A1206D8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06D1040E01210BE6073908D7056A048C +091D0B370B9E01E707E804EB024D02320C60079502A10599045308BB0A5800B40A0B078F060F00350A2B06B1099C0047 +03DF06EA0927016C0C080704042A06420449086E0B8F012C03140513059B01DA06D2040F01220BE7073A08D8056B048D +091E0B380B9F01E807E904EC024E02330C61079602A2059A045408BC0A5900B50A0C0790061000360A2C06B2099D0048 +03E006EB0928016D0C090705042B0643044A086F0B90012D03150514059C01DB0040003F034506B40AEF00380AB40857 +03BB0AB5028F03BC0C1F02900448060EFFFF02450AFD0AFC07E2FFFFFFFF07E3FFFFFFFFFFFFFFFFFFFFFFFF02B80A2E +02D302D2037303720991099009DD09DC03B003AF02E902E80A690A6804BD04BC08AB08AA0C570C56080F080E05050504 +0B4E0B4D020F020E05D505D400F000EF07BA07B9007100700966096500260025069F069E006500640C180C17028E028D +0748074701AB01AA08590858062B062A07E507E40B1F0B1E053C053B02AA02A90BFD0BFC03EB03EA04BF04BE0A280A27 +099B099A035F035E09FF09FE0A960A9505E305E208DE08DD0B990B9804690468023F023E0AF30AF201C301C207980797 +0124012308CC08CBFFFFFFFFFFFFFFFFFFFFFFFF0397FFFF03600398FFFF0361FFFFFFFF075B075AFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08CE0A8D056D042F0781021701CF0C9504D5026C01D704E80B8A0B8804BB092E +08A505CF0BF3072403D2010A047906C009D5030B098907100375016B09E306ED0AC80C51041508FC0313011E0B94FFFF +FFFFFFFFFFFFFFFF0B3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01FA01F90B030B020B840B8308350834015901580722072102EB02EA055205510044004306BA06B9062D062C06C206C1 +0082008107D007CF004600450C6D0C6C05460545081B081A0BC60BC50947094602F902F80BB80BB701960195FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0574057302C502C40A1A0A190AE50AE4 +084708460B6E0B6D0B2E0B2D01A501A407DF07DE00BB00BA094109400590058F065D065C003A0039FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000900080968096700D200D1 +077B077A00F900F80685068400730072FFFFFFFF0173017208E008DF0C4B0C4A056205610A9C0A9B0B0F0B0E02E002DF +0930092F0A300A2F0A530A5203D403D30C5F0C5E0902090103490348036903680239023806160615045804570A5F0A5E +057E057D091A0919026602650B0B0B0A0116011506E706E60C0D0C0C072A07290171017006DA06D9031B031A071D071C +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF083AFFFF052F083B057805300C730C7205EB05EA0A8F0A8E0BC20BC108F208F1 +FFFFFFFF005AFFFF0C78005BFFFFFFFF0C0B0C0A02760275FFFF084403F103F00878087704EE04ED0440043F0ABF0ABE +056F056E02A402A308B808B701350134079207910A1000C20A5D0C2EFFFF010C038D079A0C62009F065B065A00AB00AA +0770076F0157015605B305B202BA02B908AD08AC047D047C0576084507F00C99018F07F1070701900A6D0A6CFFFFFFFF +03290328FFFFFFFFFFFFFFFF034703460BEB0BEA09180917FFFF0483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AC9FFFFFFFF0ACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C63FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +047B0645039E00D008C2074A0A03007903B209600ADD0C2909810677036F008F021E0B570B4402FF0A26074005C30151 +0C81087A086105DB053A04DB07F30ACC0319049906C603B6015B08FE07260A73004D04A9095509E5004F0CA306AC034B +025C0A860C690ABD0097029C07CE05A70AED0BD3081507A2020B058A0512097C0ADF02B603EF07650627022208BE0C3F +0387065003A6073002DE015309FD073408E10C000611014A0B950864FFFF0B96FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0A1FFFFF04C206B503660016FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A99FFFF02910BEC0617015C0A1B06BB07E005270C9C0808085A015404450553 +05B00283032004320B710BA001B2083C0674098CFFFF049EFFFFFFFFFFFFFFFF0A9AFFFF02920BED0618015D0A1C06BC +07E105280C9D0809085B01550446055405B10284032104330B720BA101B3083D0675098DFFFF049FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07E60B4F062E07F4088B01480A830BA20BF60A29030E0A70053D0557015E0872 +04C800FA099206AD0300005403A907B1044F0302028705AC0C8C016003BD06EE0BBB0B6604CA0823025904D20C520818 +07E70B50062F07F5088C01490A840BA30BF70A2A030F0A71053E0558015F087304C900FB099306AE0301005503AA07B2 +04500303028805AD0C8D016103BE06EF0BBC0B6704CB0824025A04D30C530819FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCA0B3307D60887026105D60C020A76 +0A9D0255082C0C4604F1027907F804D00634036A072D037C01DE0C36075202AE02B30A8106C9042C002D031C068009A0 +0B1007EA09720B12FFFFFFFFFFFFFFFF0BCB0B3407D70888026205D70C030A770A9E0256082D0C4704F2027A07F904D1 +0635036B072E037D01DF0C37075302AF02B40A8206CA042D002E031D068109A10B1107EB09730B13FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04AE0944029500B00BE20731027B01250A150C42FFFF00C309C6065809CC00C5086608B001620C8E05C408E703380426 +046A05F2FFFF02D707FA0B0C054104C606C70B14FFFF03F4075C02FA0945FFFF00B104AF0732029601260BE30C43027C +00C40A160659FFFF00C609C708B109CD0C8F086708E80163042705C505F3033902D8046B0B0DFFFF04C707FB0B150542 +03F506C802FBFFFFFFFF075DFFFFFFFF04D80529016401AC08810C9A05D802080430071E048E06360B750889033C0B35 +0C9609E000D309DA07BD037A00DB094A092304B201130A3B07C30956008503A305830228037805170BCE0B5A04B00838 +08EB0A33059F04B80774026701DC00020AC3032CFFFF06E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04D9052A016501AD08820C9B05D902090431071F048F06370B76088A033D0B360C9709E100D409DB07BE037B00DC094B +092404B301140A3C07C40957008603A405840229037905180BCF0B5B04B1083908EC0A3405A004B90775026801DD0003 +0AC4032DFFFF06E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E001B007C504FF0BD4021409630A9F0A6E0BE80555096101EB053F0B3107B5 +001204C4068609A201D0094EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01E101B107C605000BD5021509640AA0 +0A6F0BE90556096201EC05400B3207B6001304C5068709A301D1094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FF05E40C9E083E01FB01C6054304DF03AB00EB08EF07CB0A50010004AA08F5 +017A0C13070D094C0308038406A909A80B5403A108F30BA605BA04A007410410020005E50C9F083F01FC01C7054404E0 +03AC00EC08F007CC0A51010104AB08F6017B0C14070E094D0309038506AA09A90B5503A208F40BA705BB04A107420411 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AAC0090035607B3045902850455066809E6007405C60766038800180AE8068C +050604F701BA08540778033E03420B91096D054F0BEE07540AC50B3B056308500AAD0091035707B4045A028604560669 +09E7007505C70767038900190AE9068D050704F801BB08550779033F03430B92096E05500BEF07550AC60B3C05640851 +043D06D30974006009B0065E047E002903B30600000000CB08BF07D80568059D0006087007EC01B6049404F90B810376 +029D0BF805AA01890A7407350AB00CA4001C044B043E06D40975006109B1065F047F002A03B40601000100CC08C007D9 +0569059E0007087107ED01B7049504FA0B820377029E0BF905AB018A0A7507360AB10CA5001D044CFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//5760 bytes +enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000001A0", +x" +00000100000002C000008000", +x" +03020100060504030A0908070E0D0C0B0303030311100F03141413121414141414141414141414141414141414141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414140000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000030002000500040007000600090008000B000A000D000C000F000E +000100100012001100010013001500140017001600190018001B001A001C0001001E001D001F001F001F0020001F001F +001F001F001F001F00220021001F002300250024001F001F000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001002600010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001002700290028 +002B002A002D002C00010001000100010001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001002E0001 +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F0001001F0030002F0031000100330032003500340037003600390038003A0001 +003C003B003E003D0040003F00420041004400430046004500480047004A0049004C004B004E004D0050004F00520051 +000100010053000100550054001F001F001F001F001F001F001F001F0056001F00010001000100010001005700010001 +00010001000100010001000100010001000100010058000100010001001F0059001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F001F001F +00010001005C005B005D001F005F005E0001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100600001000100010001000100620061001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0063001F +00640001001F0065001F001F001F001F001F001F001F001F001F0066001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F00680067006A0069001F001F001F001F001F001F006B001F +006D006C001F006E0070006F0071001F00730072001F001F001F001F001F00740075001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F0001000100010001000100010001007600010001000100010001000100010001 +000100010001000100010001007700010001007800010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100790001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100010001007A000100010001001F007B001F001F001F001F001F001F001F001F +00010001001F007C001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001 +00010001007D000100010001000100010001000100010001000100010001000100010001007E0001001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE +0000000004200400FF7FFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFC30000501F000000000000000000000020BCDFFFF8 +FFFFD740FFFFFFFBFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFEFFFF027FFFFFFFFFFFFF000001FFBFFF0000FFFF00B6000787FF07FF0000FFFFFFFFFEFFFFFFFFFFC000 +FFFFFFFFFFFFFFFF1FEFFFFF9C00E1FEFFFF0000FFFFFFFFFFFFE000FFFFFFFFFFFFFFFF0003FFFFFFFFFC00043007FF +FCFFFFFF00001FFF01FFFFFFFFFF07FF00807EFFFFFFFFFFFFF003FFFFFF03F8FFFFFFFFEFFFFFFFFFE1DFFFFFFE000F +FFF99FEFE3C5FDFFB080599F1003000FFFF987EEC36DFDFF5E021987003F0000FFFBBFEEE3EDFDFF00011BBF1E00000F +FFF99FEEE3EDFDFFB0C0199F0002000FD63DC7ECC3FFC71800811DC700000000FFFDDFFFE3FFFDFF27601DDF0000000F +FFFDDFEFE3EFFDFF60601DDF000E000FFFFDDFFFE7FFFFFF80F05DDFFC00000FFC7FFFEE2FFBFFFFFF5F807F000C0000 +FFFFFFFE07FFFFFF0000207F00000000FFFFF7D63BFFFFAFF000205F000000000000000100000000FFFFFEFFFFFE1FFF +FEFFFF0F1FFFFFFF0000000000000000FFFFFFFFF97FFFFFFFFF0000FFFFFFFF3C00FFFFFFFFFFFFFFFF20BFF7FFFFFF +FFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFFFFFF3DFF7F3DFFFFFF7FFF3DFFFFFFFFFF3DFFFFFFFFFFFF07FFFFFF00000000 +0000FFFFFFFFFFFFFFFFFFFF3F3FFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFF07FFFFFEFFFFFFFFFFFFFFFF01FFC7FF800FFFFF000FFFFF000FFFFF000DDFFF +FFFFFFFFFFCFFFFF108001FF0000000000000000FFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFF +7FFFFFFF01FF0FFFFFFF0000001F3FFFFFFFFFFFFFFF0FFF000003FF000000000FFFFFFFFFFFFFFF7FFFFFFF001FFFFE +00000000800000800000700100000000FFFFFFFFFFEFFFFF00001FEF00000000FFFFFFFFFC00F3FFFFFFFFFF0003FFBF +FFFFFFFF007FFFFFFC00E0003FFFFFFFFFFF07FFE7FFFFFF00000000046FDE00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF80000001FFFFF3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFFFFFFFFFF5FDFFFFF0FCF1FDC1FDC1FFF +000000000000000000000000800200001FFF00000000000000000000000000003E2FFC84F3FFBD50000043E0FFFFFFFF +000001FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFC00000FFFFFFFF000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000C781FFFFFFFFFFFFF20BFFFFFFFFF000080FF007FFFFF7F7F7F7F7F7F7F7FFFFFFFFF +0000000000008000000000000000000000000000000000000000000000000000000000E01F3E03FEFFFFFFFEFFFFFFFF +E07FFFFFFFFFFFFEFFFFFFFFF7FFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFF00007FFFFFFFFFFF00000000FFFF0000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00001FFF00000000FFFF00003FFFFFFFFFFF1FFF00000C00FFFFFFFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +FF800000FFFFFFFCFFFFFFFFFFFFFFFFFFFFF9FFFFFFFFFF1FEB3FFFFFFC0000FFFFFFBF000000FFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFF0000002FE8FC0000FFFFFC00FFFF07FF0007FFFF1FFFFFFFFFFFFFFFFFF7FFFF000080007C00FFFF +FFFFFFFF007FFFFF00003FFFFC7FFFFFFFFFFFFF7FFFFFFF38000005003CFFFF007E7E7EFFFF7F7FF7FFFFFFFFFF03FF +FFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFF03FFFFFF00000000E0F8007F5F7FFDFFFFFFFFDBFFFFFFFF +FFFFFFFF0003FFFFFFF80000FFFFFFFFFFFFFFFF3FFFFFFFFFFF0000FFFFFFFFFFFCFFFFFFFFFFFF000000FF0FFF0000 +000000000000000000000000FFDF0000FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFF0000000007FFFFFE07FFFFFEFFFFFFC0 +FFFFFFFF7FFFFFFF1CFCFCFC00000000FFFFEFFFB7FFFF7F3FFF3FFF00000000FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFF +0000000000000000FFFFFFFF001FFFFF0000000000000000000000000000000000000000000000000000000000000000 +1FFFFFFFFFFFFFFF0001FFFF00000000FFFFFFFFFFFFE000FFFF07FF07FFFFFF3FFFFFFFFFFFFFFF003EFF0F00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF0000FF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF000F +FFB7F7FF1BFBFFFBFFFFFFFF000FFFFFFFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000 +FFFFFD3F91BFFFFF003FFFFF007FFFFF7FFFFFFF00000000000000000037FFFF003FFFFF03FFFFFF0000000000000000 +FFFFFFFFC0FFFFFF0000000000000000FEEFF06F003FFFFF000000001FFFFFFF1FFFFFFF00000000FFFFFEFF0000001F +FFFFFFFF003FFFFF003FFFFF0007FFFF0003FFFF000000000000000000000000FFFFFFFFFFFFFFFF000001FF00000000 +FFFFFFFF0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFC00FFFF823F0000003F000000000000000000000000 +00000000000000000000000000000000FFFFFFFF00031BFF0000001C100000001FFFFFFFFFFF00800000003FFFFF0000 +00000003FFFF00000000001F007FFFFFFFFFFFFFFFFFFFFF0000003F003E0000FFFFFFFF01FFFFFFFFFF0004000001FF +FFFFFFFF0007FFFFFFFF00F00047FFFFFFFFFFFFFFFFFFFF1400C01E00000000FFFBFFFFC09FFFFF0000000300000000 +BFFFBD7FFFFF01FFFFFFFFFF000001FFFFF99FEFE3EDFDFFE081199F0000000FFFFF4BFFFFBFFFFF000A37A500000000 +FFFFFFFFFFFFFFFF800007BB00000003FFFFFFFFFFFFFFFF000000B30000000000000000000000000000000000000000 +FFFFFFFF7F3FFFFF3F00000000000000FFFFFFFF7FFFFFFF0000001100000000FFFFFFFF013FFFFF0000000000000000 +E7FFFFFF000007FF0000007F0000000000000000000000000000000000000000FFFFFFFF01FFFFFF0000000000000000 +00000000FFFFFFFFFFFFFFFF80000000FF6FF27F99BFFFFF000000070000000000000000FFFFFCFFFCFFFFFF0000001A +FFFFFFFF7FE7FFFFFFFF0000FFFFFFFF20FFFFFFFFFF0000FFFFFFFF01FFFFFF00000000000000000000000000000000 +0000000000000000FFFFFFFF00000001FFFFFDFF7F7FFFFF00000001FFFC0000FFFCFFFF007FFEFF0000000000000000 +FFFFFB7FB47FFFFF000000CBFFFFFDBF017B7FFF00000000000000000000000000000000000000000000000000000000 +000000000000000000000000007FFFFFFFFDFFFFC7FFFFFF000000010000000000000000000100000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00007FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000F0000000000000000000000000000000000000000 +00000000000000000000000000000000FFFF0000FFFFFFFFFFFFFFFF0001FFFFFFFFFFFF0000FFFF0000007EFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFF +FFFFFFFFFFFFFFFF0000007F0000000000000000000000000000000000000000FFFFFFFF00007FFF0000000000000000 +00000000000000000000000000000000FFFFFFFF01FFFFFF7FFFFFFFFFFF0000FFFFFFFF7FFFFFFFFFFF000000003FFF +FFFFFFFF0000FFFF0000000FE0FFFFF80000FFFF0000000000000000000000000000000000000000FFFFFFFF00001FFF +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFFF80FF00000000000000000003000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF80000000 +000001FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000006FEF0000FFFFFFFF0004000700270000FFFF00F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FF +43FF01FF000000000000000000000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFDFFFFFFFEBFFDE64FFFFFFEFFFFFFFFF +DFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF3FF7FFFFFDF7FFFFFFFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFFFFFFFDFFFFFFFDFF00000FF700000000 +7FFFFFFF000007E0000000000000000000000000000000000000000000000000F9FFFF7FFFFF07DBFFFFFFFF00003FFF +00008000000000000000000000000000FFFFFFFF3F801FFF000040000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFF000000003FFFFFFFFFFF00000FFF00000000000000000000000000000000 +0000000000000000FFFF000000000FFF000000000000000000000000000000000000000000000000FFFF000000013FFF +000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000001F00000000FFFFFFFFFFFFFFFF0000088F0000000000000000000000000000000000000000 +FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE000000000000000000000000FFFF0000FFFF03FFFFFF03FF +000003FF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 +FFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFF3FFFFFFF00000000 +000000000000000000000000000000003FFFFFFF00000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0000FFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//3456 bytes +enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000110", +x" +00000100000001A000004A00", +x" +0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020B02020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000001000000030002000500040007000600090008000B000A000D000C +0000000E000F000000000000001000000012001100140013001600150000000000000017000000000000000000000000 +000000000000000000190018000000000000001A00000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000001B001D001C001F001E0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000021 +0022000000240023000000000000000000000000000000250026000000280027002A0029002C002B002E002D0030002F +003200310000003300350034003700360000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000038000000000000000000000000000000000000000000390000000000000000000000000000 +00000000003B003A00000000003C00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000003D0000000000000000000000000000000000000000000000000000000000000000003E0000 +003F000000000040000000000000000000000000000000410000000000000000003B0042000000430045004400000000 +004700460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000000000000000000000 +00000000000000000000000000000000000003F800000000000000000000000000000000000000000000000000000000 +FFFE0000BFFFFFFF000000B60000000007FF000000000000FFFFF8000001000000000000000000009FC0000000003D9F +00020000FFFF0000000007FF00000000000000000001FFC000000000200FF800FBC0000000003EEF0E00000000000000 +FF80000000000000FFFFFC00FFFFFFFB0000000FDC00000000FEFFFF0000000C0000000ED00000000080399F4000000C +0000000ED000000000023987002300000000000ED000000000003BBFFC00000C0000000ED000000000E0399F0000000C +00000004C000000000803DC7000000000000001FD000000000603DDF0000000C0000000ED000000000603DDF0008000C +0000000FD800000000803DDF0000000C0000000E00000000FF5F8400000C00000000000007F2000000007F8000000000 +000000001FF2000000007F000000000003000000C2A0000000000000FFFE0000FEFFE0DF1FFFFFFF0000004000000000 +000000007FFFF800C3C00000001E3F9D3C00BFFC0000000000000000000000000000000000000000E000000000000000 +00000000000000000000000000000000003C0000001C0000000C0000000C000000000000FFF00000200FFFFF00000000 +0000B80000000000000000000000000000000060000002000000000000000000000000000FFF0FFF0000000000000000 +000000000000000000000000000000000F800000000000007FE000009FFFFFFF00000000FFFF000000007FFF00000000 +0000001FFFF000000000001F000FF8000000000700003FFE00000000000FFFC00000000000FFFFF00000000000000000 +0000000000000000FFF70000039021FF000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF +000000000000000000000000000000000000000000000000FFFF00000001FFFF00000000000000000000000000000000 +0000000000000000000000000003800000000000000000000000000080000000000000000000000000000000FFFFFFFF +000000000000FC000000000000000000060000000000000000000000000000000000000000000000000000003FF78000 +C000000000000000000000000003000000000844000010F8000000000000000000000003FFF000000000003F8003FFFF +0000000000003FC0000FFF80000000000000000FFFF80000000000010000002000000000007FFE000000300838000000 +00000000C19D0000000000020060F80000000000000000000000000000000000000000000000000000000000000037F8 +40000000000000000000000000000000000000000000000000000000000000000000FFFF0000FFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000007C00000 +000000000000000000000000000000000000F06E87000000000000000000000000000000000000000000000000000060 +00000000000000F00000000000003E000000000000000000000000000000000000000000000000000000000000000000 +000000000000180000000000F000000000000000000000000001FFC0000000000000003C000000000000000000000000 +00000007FF0000000000007F801900000000000707FF0000000000040000000000000007001FFF800000006000080000 +00000007FFF800000000DE01000000000000000040FFF0000000000200000000000000000000000080000000000007FF +0000000FD80000000080399F001F1FCC00000000FF0000000005F7A50000000600000000FFE000004000007F00000000 +00000000FFFF00000000000F000000000000000000000000000000000000000000000000FF3F80003000000100000000 +00000000FFFF000000000001000000000000000000FFF8000000000000000000E000000000000FFF0000000000000000 +000000000000000000000000000000000000000007FFF000000000000000000000000000000000000000000000000000 +0000000079BF00000000000D000000000000000000000000FCFE000000000011000007FE7BF800000FFE008000000000 +03FFFC0000000000000000000000000000000000FF7F80000000000000000000FFFC0000007FFEFF0000000000000000 +00000000B47E0000000000BF0000000000FB7C0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000007800000000000BC7F00000040000070000000000000000000000000000000000000000 +0000000000000000003FFF810000000000000000000000000000000000000000C00000000000FFFF0000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F0000 +00000000007F00000000000000000000000000000000000000000000000000000000000000000000FFFE8000FFFFFFFF +000780FF0000000000000000000300100000000000000000000000000000000060000000000000000000000000000000 +FFFFFFFFFFFF3FFF0000007F0000000000000000000000000000000000000000000000000000000000000000F807E3E0 +00000FE700003C00000000000000000000000000000000000000001C0000000000000000000000000000000000000000 +FFFFFFFFF87FFFFFFFFFFFFF00201FFFF80000100000FFFE0000000000000000F9FFFF7F000007DB0000000000000000 +00008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000F000 +000000000000000000000000000000000000000000000000000000000000F00000000000000000000000000000000000 +0000000000000000000000000000C000000000000000000000000000000000000000000000000000007F000000000000 +0000000000000000000007F00000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000000000000000000000000000000000000000000000000000000000000000", +); +//2896 bytes +enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x" +0000000000000040000001A0", +x" +00000100000002C000002680", +x" +020201000402030207020605090802020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000001000000020002000200020002000200020002000200020004000300050002 +000200020007000600060006000900080006000A0006000B000C000C0002000D000E000500020002000200020002000F +000200020002000200100002001100020002000E00130012001400020000000C00020015000200020002000200020002 +00170016001900180002000200020002001B001A0002000200020002001D001C00020002000200020002000200020002 +001E00020002000200020002000200020002001F00200002002200210002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020006002300020002 +000C0024002500170002000C000400020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000E000200020027002600280002002A0029 +00230002000200020002000200020002002C002B002E002D0030002F0032003100330002000200340002003500370036 +00040038003A00390004000200020002000C000C00020002003B000C0002003C003D00020002000C0002000200040002 +0002003E0023000C00020002003F000C0002000200020002000200020002000200020040000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000000020002000200020002000200020002000200020002000200020002000200020005000300020041 +000200020002000400420002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200040002000200020002000200020002 +000200020002000200430002000200440002000200020002000200020045000200020002000200020002000200020002 +000200020002000200020002000200020002000200020005000400020002000200040002004600020002000200020002 +004700020002000C0002000200020002004900480002004A0002000200020002000200020002004B0002000200020002 +000200020002000200020002000200020002000200020002000200020004000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +00020002000200020002000200020002000200020002000200020002000200020000000003FF00000000000000000000 +00000000720C0000000000000000000000000000000000000000000000000000000000000000000000000000000003FF +00000000000000000000000003FF00000000000000000000000003FF000000000000000000000000000000000000FFC0 +00000000000000000000000003F0FFC000000000000000000000000000FCFFC00000000000000000000000000007FFC0 +0000000000000000000000007F00FFC000000000000000007F00000001FFFFC0000000000000000003FF000000000000 +00000000000FFFFF000000000000000003FF00000000000000000000000000000000000000000000000000001FFFFE00 +0000000000000000000000000001C00000000000000000000000000003FF03FF00000000000000000000FFC000000000 +000000000000000007FF00000000000003FF03FF000000000000000000000000000000000000000003FF03FF00000000 +00000000000000000000000003F10000000003FF0000000000000000000000000000000000000000FFFF0000FFFFFFFF +000003E7000000000000000000000000000000000000000000000000FFFFFFFF0FFFFFFF0000000000000000FFFFFC00 +000000000000000000000000FFC00000000FFFFF00000000000000000000000000000000000000000000000020000000 +00000080070003FE0000000000000000003C000000000000000000000000000000000000000003FFFFFEFF0000000000 +000003FFFFFE0000000000000000000000000000000003FF000000000000000000000000003F00000000000000000000 +000000000000000003FF000003FF0000FFFFFF80000FFFFFFFFFFFFF01FFFFFF00000C00000000000000000000000000 +0000000000000000000000000FFFFFFE000000000000000F00000402000000000000000000000000003E000000000000 +0000000000000000FF000000FE000000000000000000FF8000000000F80000000FC00000000000000000000000000000 +0000000030000000FFFCFFFFFFFFFFFF0000000000000000000001FF60000000E000000000000000000000000000F800 +0000000000000000FF000000FF000000000000000000FE000000000000000000000000000000000000000000FC000000 +0000000003FF0000000003FF000000000000000000000000000000007FFFFFFFE00000000000007F001E000000000000 +000000000000000000000FE0000000000000000000000000FFFC00000000FFFF00000000FFC000000000000000000000 +000000000000000003FF0000001FFFFE0000000000000000FFFF03FF0000000F000000000FFF00000000000000000000 +0000000000000000000000000007FFFF0000000000000000FFFF000000001FFF0000000000000000001FFFFF00000000 +FFFFFFFFFFFFFFFFFFFFFFFF00007FFF0000000000000000FBFF000000000003007FFFFF000000000000000000000000 +0000000000000000000FFFFF000FFFFF00000000000000000000000001FFFFFF0000000000000000FFFFC000FFFFFFFF +00000000000000000000000007FE000000000000000000000000FF8000000000000000000000000000000000FFFE0000 +FFFFFFFF001EEFFF0000000000000000FFFFFFFE3FFFBFFF000000000000000000001FFF000000000000000000000000 +00000000000000000000000003FF0000", +); +//3488 bytes +enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000004000000100", +x" +000001000000018000004D00", +x" +0202010004020302070206050A0908020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000002000100030001000500040007000600010008000A0009000C000B +0001000D000E00010001000F001100100013001200150014000100160001000100010017001800010001000100190001 +001A000100010001001C001B0001001D0001001E00010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100010001000100010001001F0001002000220021002400230001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010025000100270026 +0028000100290001002A000100010001002C002B002E002D002F00010031003000330032003500340037003600390038 +003B003A003D003C0001003E0040003F0001000100010001000100410001000100010001000100010001000100420001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010044004300450001004700460001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010048000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001000100010001004900010001000100010001000100010001004A000100010001 +004B00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001000000008C00F7EEB8000001280000000000000088C008820000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000 +000000800000000000000000000000000000000000000000FC0000000000000000000600400000000000004900180000 +E8003600000000000000000000003C000000000000000000001000000000000000003FFF000000000000000000000000 +00000000000000000000000003800000000000007FFF0000400000000000000000000000000000000000000000000000 +000000000000000000000000000100300000000000000000000000002000000000000000000000000000000000400000 +000000000000000000000000000100000000000000000000000000000080000000000010000000000000000000000000 +000000000000000000000000000000000000000000000000000000000010000000000000000000000C00800000000000 +000000000000000000000000000000000017FFF03C00000000000000000000000000002000000000061F000000000000 +00000000000000000000FC000000000000000000000000000000000008000000000000000000000000000000000001FF +000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000 +000000000000000000000000000040001800000000000000000000000000380000000000006000000000000000000000 +00000000000000000770000000000000000007FF00000000000000000000000000000000000000000000000000000000 +0000000000000000000000300000000000000000000000000000000000000000C0000000000000000000000000000000 +0000000000003F7F00000000000000000000000000000000FC00C000E0000001000000000000000000000000F0000000 +00000000F800000000000000C00000000000000000000000000800FF00000000FFFF0000FFFF00FF7FFBFFEF60000000 +0000600000000000000000000000000000000F0000000600000000000000000000000000000000000000000000000000 +000000000000000000000000003FFF000000000000000000000000600000FFC000000000000000000000000000000000 +01FFFFF8000000000F0000003000000000000000000000000000000000000000000000000000000000000000DE000000 +0000000000000000000000000001000000000000000000000000000000000000FFFFFFFFFFFF7FFF3FFCFFFF00000000 +00000000000000000000000000000000FFF3FF0E20010000000000000000000000000000000000010000000008000000 +00000000000000000000000000000000000000000000000000000000C00000000000E000000000000000000040080000 +00000000000000000000000000FC000000000000000000000000000000F0000000000000000000000000C00017000000 +000000000000C00080000000000000000000000000000000C0003FFE000000000000000000000000F000000000000000 +0000000000000000C0000000000300000000000000000000000000000000000000000000000000000000000000000800 +00000000C000000000000000000000000000000000000000000000000000000003FF0000FFFF0000FFF7FFFF00000D0B +000000000000000000000000000000008C00F7EEB8000001A80000000000003F00000000000000000000000000000000 +000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +800000000000000000010000000000000000000000000000000000000000800000000000000000000000000000000000 +000000000000000000800000000000000000000000000000000000000000000080000000800000000000000000000000 +00000000000000000000000000000000000000000000000001FF000080000000000000000000000000000000007F0000 +00000000FE00000000000000000000001E00000000000000000000000000000000000000000000000000000000004000 +000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000 +000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F8000000000 +00000000D8000000000000030000000000000000000000000000000F003000000000000000000000E80021E000000000 +000000003F00000000000000000000000000000000000200000000000000000000000000000000000000000000000000 +000000000000000001B000000000000000000000000000002C00F8000000000000000000000000000000004000000000 +00000000000000000000000000000000000000000000000000FFFFFE0000000000000000000000000000000E00001FFF +000000000200000000000000000000000000000070000000000000000000000000000000000000000000000000000000 +000000000800000000000000000000000000000000000000000000000000000000000000000000000000007000000000 +0000000000000000000000000000000400000000800000000000007F00000000DC000000000000070000000000000000 +000003FF0000000000000000000000000000000000000000000000000000000200000000000000000000003E00030000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000 +00000000000000000000FFF80000000000000000000000000000000080000000000000000000000000000000001F0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000 +0000000000000000000000000000C00000000000000000000000000000200000000000000F8000000000001000000000 +000000000000000000000000000000000000000000000000000000000000E00000000000000000000000000000000000 +000000000000000000000000000000000780000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000040000000000000000000000000000000080000000000000000000000000000000 +0000000000000000000000000000000000000F8000000000000000000000000000000000000000000000000000000000 +000000000000000000000000800000000000000000000000C00000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//3472 bytes +enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x" +0000000000000040000001C0", +x" +000001000000030000003480", +x" +0302010005030403070303060A0908030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000010000000200020003000200050004000600020007000200090008000A0002 +000B0002000C0002000D0002000F000E0002001000020011000200120014001300150002000200020002000200160002 +0002000200020002000200170018000200020002001A0019000200020002001B000200020002000200020002001C0002 +001E001D0020001F00210021002100220024002300210021002100210026002500210021002700210021002100290028 +002A000200020002002C002B002D0021002F002E00300002003200310021002100020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002003300020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020034000200020002000200020036003500020037000200020002003800020039 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +0002000200020002000200020002000200020002000200020002000200020002000200020002000200020002003B003A +00020002003D003C0002003E0040003F0002000200420041000200020002000200020002000200020002000200020002 +000200430002000200440002000200020002000200450002000200020002000200020002000200020002000200020002 +000200020002000200020002000200120002000200020002000200020002000200020002000200020002000200460002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020047 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +004800020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020049002100210021004A0021004C004B004D0021004F004E0002005000020051 +000200020002000200520002005400530021002100210021005600550002000200020002000200020002000200020002 +000200020002005700100002000200020002000200020002000200020002000200020002000200020002000200020002 +0058000200020059005A000200020002005C005B005E005D0002005F0021002100210021002100210060002100620061 +006400630021002100660065006700210002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +0002000200020002000200020002000200000000700008104000000050000001000000000113D37C0080000000800000 +000000000000000000000000000000000000000000000000FFFC003CFFFFAFE000000000000000000000000000200000 +00000030000000000000000000400000000000040000000000000000000000000000E000000000000000000000000000 +0000C9C000000000000000000000000000000000000000004000000060000200000000000000000000000000C0400000 +000001000000000000000000000000000000000000000000000000000C0C000000000000000000000000000000020000 +0000000000000000000000000001000000000000000000000000000007F8000000000000000000000000000080000000 +0000000000000000000080000200000000000000800000000000000000000000FCE8000E015000000000000000000000 +00000000C000000001E0DFBF00000000C000000000000000000000000000000003FF0000000000000000000000000000 +000000000000000000000000000020000000000000000000080000000000000000000000000000000000000100000000 +0000000000000000C0000000FFFFFFFF0000000000000000000000001FF007FE00000000A0000000E000E0036000E000 +0000000000000000000400101C00000000001C00FFFFFFFF0000000100000000C1D0037B0C0042AF0000BC1F00000000 +FFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFF9FFFFFFFFFFFFFFFFFF +FFFFFFFF000003FF000007FF00000000F0000000FFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF +FFF00000FFFFFFFFFFFFFF9FFFFF003FFE000007FFFFFFFFF0FFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFF +FFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000007E000000000000000000003000000000000 +FBFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF003FFFFFFFFF0000000C0010C0C000010000000000000000 +18000000000000000000000000000000FFC3000000000000FFFFFFFF0000803F7FFFFFFFFFFFFC00000100FFFFFFFFFF +FFFFFC000001FFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000007F00000000 +007FFFFF000000030000000000000000000006000000000000000000000000000000000003C00F000000000000000000 +0000000000000000000000000380000000000000000000000800000000000C0000000000000002000000000000000000 +00000000FFFC0000000000070000000000000000000000000000FFFF00000000000000000000000000008000F0000000 +000000000000000000000000000002747000081040000000500000010000000000000000000000000000000030007F7F +00000000FF80000000000000FE0000001FFF73FF00000001FFFF00001FFFFFFF00000000000000000000000001800000 +000000000000000000000100000000000000C0000000000000000000000000000000000000000000FFE000000003FFFF +00000000F0000000000000200000000010000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +FFFFFFFF000FFFFF00000000000000000000000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000 +FFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFF018FFFFC3FFFFFFFFFF000007FF +FFFFFFFFFFFFFFFF0000002300000000FFFFFFFFFFFFFFFF007FFFFF0000000000000000000000000800000208000000 +0020000000200000000080000000800000000200000002000000000800000000000000000780000000000000FFDFE000 +0000006F0000000000000000000000000000000000000000000080000000000000000000000110000000000000000000 +0000000000004000000000000000000000000000000000000000000000030000FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFF00000000FFFFFFC0 +FFFF00070FFFFFFF000301FF0000003FFFFFFFFFFFFFFFFFF0FFFFFF1FFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFF +FFFFFFFFFFFFFFFF03FFFFFF00010FFFFFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF0000000300000000 +FFFFFFFFFFFFFFFF000FFFFF1FFF3FFFFFFF83FFFFFFFFFF9FFFC07F01FF03FFFFF7FFFFFFFFFFFFFFFFFFFF0000FFFF +00000000000000000000000000000000", +); +//6272 bytes +enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000040000001A0", +x" +00000100000002C000009000", +x" +0202010005040302090807060D0C0B0A02020202100F0E02131312111313131313131313131313131313131313131313 +131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313 +131313131313131313131313131313131313131413131313131313131313131313131313131313130000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000002000100030001000500040007000600090008000B000A000D000C +0001000E0010000F000100010012001100140013001600150001001700180001001A0019000100010001001B00010001 +00010001001C0001001E001D0020001F0022002100010023000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100240026002500280027002A00290001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001000100010001000100010001002B0001002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +0001002C002E002D002F00010031003000330032003500340037003600380001003A0039003C003B003E003D0040003F +00420041004400430046004500480047004A0049004C004B004E004D0050004F000100010051000100530052002C002C +002C002C002C002C002C002C0054002C0001000100010001000100550001000100010001000100010001000100010001 +000100010056000100010001002C0057002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C0058002C002C002C002C002C002C002C00010001005A0059005B002C005D005C +0001000100010001000100010001000100010001000100010001000100010001000100010001000100010001005E0001 +00010001000100010060005F002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C0061002C00620001002C0063002C002C002C002C +002C002C002C002C002C0064002C002C002C002C002C002C002C002C002C002C002C002C002C002C0001006500670066 +00690068006B006A006D006C006F006E00010001002C0070002C002C0071002C00730072002C0074007600750077002C +00790078002C002C007B007A002C007C007E007D0001007F00010001008100800001008200840083002C002C002C002C +000100010001000100010001000100850001000100010001000100010001000100010001000100010001000100860001 +000100870001000100010001000100010001000100010001000100010001000100010001000100010001000100010088 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010089000100010001002C008A002C002C002C002C002C002C002C002C00010001002C008B002C002C002C002C +000100010001000100010001000100010001000100010001000100010001000100010001008C00010001000100010001 +0001000100010001000100010001000100010001008D0001002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +008E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C00000000FFFFFFFFFFFFFFFF7FFFFFFF +00000000FFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFD7F0FFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFE7FFFFFFFFFFFFF +FFFEE7FFFFFFFFFFFFFF00FF001F87FFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF +FFFF3FFFFFFFFFFFFFFFE7FFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFF4FFFFFFFFFFF07FF +FF807FFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FEFF3C5FDFFB080799F7FFFFFCF +FFF987EED36DFDFF5E023987007FFFC0FFFBBFEEF3EDFDFF00013BBFFE03FFCFFFF99FEEF3EDFDFFB0E0399F00FFFFCF +D63DC7ECC3FFC71800813DC707FFFFC0FFFDDFFFF3FFFDFF27603DDFFF80FFCFFFFDDFFFF3EFFDFF60603DDF000EFFCF +FFFDDFFFFFFFFFFFFFF0FDDFFFFFFFCFFC7FFFEE2FFBFFFFFF5F847F001CFFC0FFFFFFFE87FFFFFF0FFFFFFF00000000 +FFFFF7D63FFFFFAFF3FF7F5F00000000FFFFFFFFFFFFFFFFFFFFFEFFFFFE1FFFFEFFFFFFDFFFFFFF07FFDFFF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFFFFFFFFFF +FFFF3DFF7F3DFFFFFF7FFF3DFFFFFFFFFF3DFFFFFFFFFFFFE7FFFFFF1FFFFFFF03FFFFFFFFFFFFFFFFFFFFFF3F3FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFF01FFFFFF803FFFFF007FFFFF000FFFFF000DDFFF +FFFFFFFFFFFFFFFF3FFFFFFF03FF03FF03FFBFFFFFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFF +7FFFFFFF0FFF0FFFFFFFFFF1001F3FFFFFFFFFFFFFFF0FFFC7FF03FFFFFFFFFFCFFFFFFFFFFFFFFF7FFFFFFF9FFFFFFF +03FF03FFFFFF3FFF00007FFF00000000FFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFF +FFFFFFFFF8FFFFFFFFFFE3FFFFFFFFFFFFFF07FFE7FFFFFFFFFF00FF07FFFFFF3F3FFFFFFFFFFFFFAAFF3F3F3FFFFFFF +FFFFFFFFFFDFFFFFEFCFFFDF7FDCFFFFFFFF07FFFFFF80FFFFFFFFFFFFF300001FFF7FFFFFFFFFFFFFFF00010001FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000003FF000007FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FF +007FFFFF7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF00000000FBFFFFFFFFFFFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF +FE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFF803F +7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF1FFFFFFFFFFFFFFF007FFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FEB3FFFFFFC0000FFFFFFFF03FF1FFFFFFFFFFF00FFFFFF +FFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFFFFFFFFFF800FFFFF1FFFFFFFFFFFFFFFFFFFFFFFC3FFBFFF7FFFFFFF +FFFFFFFF007FFFFFF3FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000007007FFFFF007E7E7EFFFF7F7FFFFFFFFFFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF87F0FFFFFFF +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFF +FFFFFFFFFFFFFFFF03FFFFFF00000000E0F8007F5F7FFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFF80007FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFF000080FFFFFF000003FFFFFFFFFFFFFFFFF7FFFFFFDF0F7F +FFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF1CFCFCFC30007F7F +FFFFEFFFB7FFFF7F3FFF3FFF00000000FFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFF87FF8FFFFFFFFFFFFFFFFFFFFF +1FFF7FFF00000001FFFF00003FFFFFFF000000000000000000000000000000001FFFFFFFFFFFFFFF0001FFFF0FFFFFFF +FFFFFFFFFFFFE00FFFFF07FF07FFFFFFBFFFFFFFFFFFFFFF003FFF0F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +3FFFFFFFFFFF03FFFF0FFFFF0FFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF7FF800FFFB7F7FF1BFBFFFBFFFFFFFF000FFFFF +FFFFFFFF007FFFFF003FFFFF000000FFFFFFFFBF07FDFFFF0000000000000000FFFFFD3F91BFFFFFFFBFFFFFFFFFFFFF +7FFFFFFF0000FF8000000000F837FFFF8FFFFFFF83FFFFFF0000000000000000FFFFFFFFF0FFFFFFFFFCFFFFFFFFFFFF +FEEFF06F873FFFFF01FF01FFFFFFFFFFFFFFFFFF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFF3FFFFFFF07FFFF +1E03FFFF0000FE000000000000000000FFFFFFFFFFFFFFFF000001FF00000000FFFFFFFF0007FFFFFFFFFFFFFC07FFFF +FFFFFFFF03FF00FFFFFFFFFFFFFFFE3F0000C03F0000000000000000000000000000000000000000000000007FFFFFFF +FFFFFFFF00033BFF0000001CF0000000FFFFFFFFFFFF00FF03FFFFFFFFFF0000000003FFFFFF000000000FFF007FFFFF +FFFFFFFFFFFFFFFFFFFC3FFF803FFFFFFFFFFFFFDFFFFFFFFFFF000703FF01FFFFFFFFFFFFDFFFFFFFFF00FF007FFFFF +FFFFFFFFFFFFFFFFFFFFFFFF001FFFFEFFFBFFFFFFFFFFFF0000000300000000BFFFBD7FFFFF03FFFFFFFFFF03FF07FF +FFF99FEFFBEDFDFFE081399F001F1FCFFFFF4BFFFFBFFFFF01BFF7A500000006FFFFFFFFFFFFFFFFEFFFFFFF00000003 +FFFFFFFFFFFFFFFF03FF00FF0000000000000000000000000000000000000000FFFFFFFFFF3FFFFF3FFFFFFF00000000 +FFFFFFFFFFFFFFFF03FF001F00001FFFFFFFFFFF03FFFFFFFFFF03FF0000000FE7FFFFFFFFFF0FFF0000007F00000000 +00000000000000000000000000000000FFFFFFFF0FFFFFFF000000000000000000000000FFFFFFFFFFFFFFFF8007FFFF +FF6FF27FF9BFFFFF03FF007F0000000000000000FFFFFCFFFCFFFFFF0000001FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF +FFFFFFFFFFFF0007FFFFFFFF01FFFFFF000003FF0000000000000000000000000000000000000000FFFFFFFF03FF0003 +FFFFFDFFFF7FFFFFFFFF003FFFFF1FFFFFFCFFFF007FFEFF0000000000000000FFFFFB7FB47FFFFF03FF00FFFFFFFDBF +01FB7FFF000003FF00000000000000000000000000000000000000000000000000000000000000000000000001FFFFFF +FFFDFFFFC7FFFFFF07FFFFFF000000000000000000010000FFFFFFFF8003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000F000000000000000000000000000000000000000000000000000000000000000000000000 +FFFF0000FFFFFFFFFFFFFFFF0007FFFFFFFFFFFF0000FFFF003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFF0000007F00000000 +00000000000000000000000000000000FFFFFFFF03FFFFFF000000000000000000000000000000000000000000000000 +FFFFFFFF01FFFFFF7FFFFFFFFFFFC3FFFFFFFFFF7FFFFFFFFFFF03FF003F3FFFFFFFFFFFFFFFFFFFFBFF003FE0FFFFFB +0000FFFF0000000000000000000000000000000000000000FFFFFFFF03FFFFFF00000000000000000000000000000000 +0000000000000000FFFFFFFFFFFFFFFF07FFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFF87FFFFFFFFFF +FFFF80FF00000000000000000003001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFF80000000000001FF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006FEF0000 +FFFFFFFF0004000700270000FFFF00F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFF3FF01FF000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFF0000000000000000FFFFFFFFFFFF3FFFFFFF007FFFFFFFFFFFFFFFFFFFFFFFFF0000000F00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFFF807FFFF +FFFFFFFFFFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFF0000003F000000000000000000000000000FFFFF000FFFFF +FFFFFFFFFFFFFFFF007FFFFF01FFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFF +DFFFFFFFEBFFDE64FFFFFFEFFFFFFFFFDFDFE7BF7BFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000FFF0000FFFE0000000000000000 +7FFFFFFF000007E0000000000000000000000000000000000000000000000000F9FFFF7FFFFF07DBFFFFFFFF00003FFF +00008000000000000000000000000000FFFFFFFF3FFF1FFF0000C3FF0000000000000000000000000000000000000000 +00000000000000000000000000000000FFFF000000007FFFFFFFFFFF83FFFFFF00000000000000000000000000000000 +0000000000000000FFFF000003FFFFFF000000000000000000000000000000000000000000000000FFFF000087FFFFFF +000000000000000000000000000000000000000000000000000000007FFF6F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF007FFF9F00000000FFFFFFFFFFFFFFFFC3FF0FFF0000000000000000000000000000000000000000 +000000000000000000000000FFFE0000FFFFFFFF001FFFFF0000000000000000FFFFFFFE3FFFFFFF0000000000000000 +00000000000000000000000000000000FFFFFFEF0AF7FE96AA96EA845EF7F7960FFFFBFF0FFFFBEE0000000000030000 +FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000FFFFFFFFE7FFFFFFEFFFE003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF00003FFF00000000FFFFFFC0FFFF00070FFFFFFF000301FF0000003F00000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFF1FFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FFFFF +FFFFFFFFFFFFFFFF03FFFFFF00010FFFFFFF0FFFFFFFFFFF03FF00FFFFFFFFFFFFFF00FF0FFF3FFF0000000300000000 +FFFFFFFFFFFFFFFF000FFFFF1FFF3FFFFFFF83FFFFFFFFFF9FFFC07F01FF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF7FFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 +FFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFF3FFFFFFF00000000 +000000000000000000000000000000003FFFFFFF00000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0000FFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +0000000000000000000000000000000000000000000000000000000000000000", +); +//4944 bytes +enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x" +000000000000002000000098000002A8", +x" +00000080000000F00000042000004580", +x" +0302010007060504090801010B0B0B0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B0C0D0101010D01010100000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000010000000300020005000400070006 +00090008000B000A000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D +000D000D000D000D000D000D000D000D000E000D000D000F000D000D000D000D000D000D000D000D0010000D000D000D +000D000D000D000D000D000D00120011001400130016001500180017001A0019001C001B001E001D001F000D000D000D +00210020001D001D001D001D001D001D001D002200240023000D000D000D000D0025000D0026000D001D001D001D001D +001D001D0027001D001D00280029001D001D001D002A001D002C002B002E002D0030002F0032003100340033001D0035 +000D000D000D000D000D000D000D000D0036000D000D000D0037000D000D0038000D000D0039000D000D000D000D000D +000D000D003B003A001D001D001D003C000D000D000D000D000D003D000D000D001D003E001D001D001D001D001D001D +001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003F001D001D001D001D001D001D +001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D000D000D0040000D +000D000D000D000D000D000D000D000D000D000D000D000D000D000D0040000D00000000000000000000000000000000 +0000000000000000000100000000000200000000000000000004000300060005000000000000000000080007000A0009 +000C000B0000000D00000000000F000E0011001000130012001500140017001600190018001B001A001D001C001F001E +002100200023002200240000002600250000000000270000000000000000000000280000002A0029002C002B002E002D +00000000000000000000000000000000000000000030002F00320031003300000030002D003500340037003600390038 +003B003A003D003C003E0000003F00000041004000430042000000000000000000000000000000000045004400470046 +00480000004A0049000000000000004B00000000000000000000000000000000004D004C000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000004E00000000004F +000000000050000000520051005400530055000000570056000000000058000000590000000000040000005A005C005B +0000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000005F005E00000000000000000000006000610000000000000062000000610063006400000065000000660000 +00680067006900000038006A006B000000000000000000000000000000000000000000000000000000000000006D006C +00000000000000000000000000000000006E0000006F0000007100700072000000000000000000000000000000740073 +0075002D007600000000005900780077007A0079007B00000000007C007E007D007F007F0080002F0082008100840083 +000000000086008500880087005700890000000000000000008A0067007F008B004F008C008E008D007F008F00730090 +009200910094009300960095007F009700980000009A0099009C009B007F009D009E007F00A0009F00A1008700A300A2 +00A4000000A5000000A6004600A7000000A900A800AB00AA00AD00AC00AF00AE00B0000000B10000007F007F005500B2 +00B3000000B500B400B700B6007F007F007F00B800BA00B900BC00BB00BE00BD00BF0000003000C0007F00C100C2007F +00C400C3007F00C500C700C6007F00C8007F007F00C9007F00CB00CA00CD00CC00000000000000000000000000000000 +000000000000000000000000007F006F00CE00000000000000CF0000007F007F007F007F007F007F007F007F007F007F +007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F +007F007F007F007F007F007F009900D000D1000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000007B000000000000000000000000000000000000 +00B70000007F007F007F007F007F007F007F007F007F007F007F00B4007F007F007F007F007F007F007F007F007F007F +0000000000000000000000000000000000D2003000D3007700D40000007F00D5007F007F007F007F00B4007F007F007F +0000007F007F00CB00D6000000D800D70000000000000000000000000000000000000000000000000000000000610000 +0000000000D90000007F0098007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F +007F007F007F007F007F007F00DA007F000000000000000000DC00DB000000000000000000B80000007F007F007F007F +00DD0000007F00DE007F007F007F007F007F007F007F007F007F007F007F007F0000000000B400000000000000000000 +00000000007F0057005F006E00CF00000000000000350000000000DF00E0000000E1000000E2007F00E30000007F007F +00E4000000E600E500E800E70000000000000000000000E90000000000EA000000000000000000000000000000000000 +00000000007F00EB007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F00EC007F007F +00EE00ED007F00EF00F100F0007F007F007F007F00F300F2007F007F007F007F007F007F00F4007F007F007F00F5007F +007F007F007F007F007F007F00F6007F0000000000F7000000F80000007F007F007F007F007F007F007F007F007F007F +00F9007F007F00FA007F00FB007F007F00FD00FC00FF00FE007F007F007F007F000000380101010000000000010200EE +01040103007F007F00000000000000000000000000000000000000000000000000000000010500000106000001070000 +0108004B00A901090000000000000000010A0000010C010B0000000000B4010D00000000000000000000000000000000 +00000000009300000000000000000000000000000000000000000000000000000000000000000000000000B400000000 +0000010E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000010F00000000000000000000000000000000000000000000000000000000000000000000000001100000 +0000000000000000000000000000000000550000007F007F007F007F007F007F00000000000000000000000000000000 +007F0055007F007F007F007F007F007F0000000000000000000000000000000000000000000000000111000000000000 +00000000000000000000000000000000000000000000000000000000007F011200000113007F007F0000000001120000 +007F007F007F007F007F007F007F007F0000000000000000000000000000000000000000000000000000000001140000 +000000000000000000000000000000000000000000000000000000000114000000000000000000000000000003000000 +0000280F000000040000000000010000018000000000000000011800000000000000FF00FFE078000000400000000000 +000018000000000000000000FFFC00000000000018000000000000008000C000B00000000000F800007C800000000000 +000660100C3A02004F7F866080000030000678112C920200A1FDC678FF80003F000440110C120200FFFEC44001FC0030 +000660110C1202004F1FC660FF00003029C238133C0038E7FF7EC238F800003F000220000C000200D89FC220007F0030 +000220000C1002009F9FC220FFF100300002200000000000000F02200000003003800011D004000000A07B80FFE3003F +0000000178000000F0000000FFFFFFFF00000829C00000500C0080A0FFFFFFFF000001000001E0000100000020000000 +F8002000FFFFFFFF0000DF4000000000C280C200000000000000C20080C20000008000C20000000000C2000000000000 +18000000E0000000FC0000000000000000000000C0C00000E00000000000000000000000FE0000007FC00000FF800000 +FFF00000FFF22000C0000000FC00FC00000000000000F80000000000FFC0000080000000F000F0000000000EFFE0C000 +000000000000F0003800FC000000000030000000000000008000000060000000FC00FC000000C000FFFF8000FFFFFFFF +0000200000000000000000000FF00000000000000700000000001C00000000000000F800180000000000FF00F8000000 +C0C00000000000005500C0C0C00000000000000000200000103000208023000000000000000C0020E000800000000000 +0000FFFEFFFE00000000F0000000000000000000FFFFFC00FFFFF8000000000000000000003000000040000000000000 +0000000001F00000000000000000DF40000000007FFE7F00FF800000808080808080808000000000C0000000FFFFFFFF +040000000000000000000000FFF00000FFC000000000FFFF00000001000000000000001F000100000000800000000000 +0000000000007FC080000000000000000000E000000000000000FF800000000000000000FFFFF00000000000FF000000 +E014C0000003FFFF00000000FC00E000FC003FC0000000007FF00000E00000003C0040008000000000000000FF800000 +0C00C0000000000007FFFFF8FF800000FF8181810000808000000000FC00C000000000000000FFF000000780F0000000 +000000000000C000FC000000FFFFFFFF1F07FF80A080000000000024000000000007FFF8000000000003000000000000 +FFFF7F000000FFFF000800000020F08000000000600000000000000080000000E3030303C1FF80800000100048000080 +C000C000FFFFFFFF00000000F80000000000007800700000E0008000FFFFFFFE0000FFFFC0000000FFFFFFFFFFFFFFFF +FFFE0000F00000000000000000001FF00000F800F80000004000000000000000FFC000F0FFFFFFFFC00000000000FC00 +00F00000F0000000000000000000FF000000000008007FF000480800E4040004FFC00000FFFFFF0000000040F8020000 +000002C06E40000080000000FFFF007FFFFFFFFF07C80000700000007C000000000000000F00000001100F9078C00000 +FE00FE000000000000000000FFFFFFFF00000000FF8007800000000001C0000000C0000000F80000E1FC0000FFFF01FF +FFFFFE00FFFFFFFF00000000FFF800000000000003F8000000000000FC00FF0000000000000001C0FFFF3FC0FFFFFFFF +FFFFFFFF8000000000000000FFFCC400FFFFFFE30FFFFFFFFC0000000000FFFFFFFFFC000000FFFFFFFFF000FF800000 +0003C0007FC000000000DFF8FC00FE000000FF00FF80000000000000FFE000010004000000000000FFFFFFFCFFFFFFFF +400042800000FC0000000000FC00F80000066010041202001F7EC660FFE0E0300000B40000400000FE40085AFFFFFFF9 +10000000FFFFFFFCFC00FF00FFFFFFFF0000000000C00000FC00FFE0FFFFE00000000000FC0000000000FC00FFFFFFF0 +180000000000F000FFFFFF80FFFFFFFF00000000F0000000FFFFFFFF00000000000000007FF8000000900D8006400000 +FC00FF80FFFFFFFFFFFFFFFF0000030003000000FFFFFFE00000FF0000000000000000000000FFF8FFFFFC00FFFFFFFF +00000000FC00FFFC00000200008000000000FFC00000E00000030000FF800100000004804B800000FC00FF0000000240 +FE048000FFFFFC00FFFFFFFFFE0000000002000038000000F8000000FFFFFFFFFFFFFFFFFFFEFFFF000000007FFC0000 +00000000FFE08000FFFFFFF0FFFFFFFF0000FFFF00000000FFC00000000000008000000000003C000000FC00FFC0C000 +0400FFC01F000004FFFF0000FFFFFFFF000078000000000000007F00FFFFFFFFFFFFFFFFFFFCFFE0FFC000007FFFFFFF +FFFFFFFF9010FFFF00000000FFFBFFF8FFD8FFFF0000FF0F00000000E000F8000C00FE00FFFFFFF00000000000000180 +00000000FFFFF800FFFFFFC0FFFFFFFFFFF00000FFF00000FF800000FE0000000020000000000000200000001400219B +00000010000000002020184084000000000203A00000000000000000000000C0000030000000000007FFF000FFFF0001 +80000000FFFFF81F060000800000F82400000000FFFFC000FFFF7FFFFFFFFFFF00000000C000E000FFFF3C00FFFFFFFF +0000FFFFFFFF8000000000007C0000000000FFFFFC0000000000FFFF78000000FFFFFFFF80009080FF800060FFFFFFFF +3C00F000FFFFFFFFFFFFFFFF0001FFFF00000000FFE0000000000001C000000000000010F50801695569157BA1080869 +F0000400F0000411FFFFFFFFFFFCFFFFFFF000000001800000010001FFC00000FFFFFFFF0000003F0000FFF8F0000000 +FFFCFE00FFFFFFC00F000000E000E0000000000007800000FC000000FFFEF000FC00FF00000000000000FF00F000C000 +FFF00000E000C00000007C000000000060003F80FE00FC000008000000000000C000000000000000000000000000FFFC +000000000000FFFE0000F8000000000000000000FFFF0000FFFFFFFD0000000000000000C000000000000000C0000000", +); +enum MAX_SIMPLE_LOWER = 1460; +enum MAX_SIMPLE_UPPER = 1477; +enum MAX_SIMPLE_TITLE = 1481; +//10752 bytes +enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000001000", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000015000000000000000000000000000000000000000000000016000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000170018000000000019001B001A001D001C001F001E0021002000000000000000000022000000000023 +000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000260025002800270000002900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002A00000000002B002D002C002F002E00000000000000000000000000000000 +000000000000000000300000000000310000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000032000000000000000000000000000000000000000000000000000000000033000000000000 +000000000000000000000000000000000000000000000000000000000000000000350034003600000000000000000037 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000380000003900000000003A0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000003C0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000003E003D000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00020001000400030006000500080007000A0009000C000B000E000D +0010000F00120011001400130016001500180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C5FFFF001C001B001E001D0020001F00220021 +002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038 +003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF +0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF +005205C70053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C +05E4005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF +0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF +FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF +FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF +FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF +FFFFFFFFFFFFFFFF008FFFFFFFFF0090009200910093FFFFFFFF0094FFFF0095FFFF0096FFFF0097FFFF0098FFFF0099 +FFFF009AFFFF009B009D009C009EFFFF009FFFFF00A0FFFF00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF +FFFF05EC00A800A700A9FFFFFFFFFFFF00AAFFFF00ABFFFF00ACFFFF00ADFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF +00B2FFFF00B3FFFF00B4FFFF00B5FFFF00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF +FFFFFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00C700C8FFFFFFFF00C9FFFF00CAFFFFFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF +00D100D000D300D2FFFF00D400D600D500D7FFFF00D8FFFFFFFF00D9FFFFFFFF00DB00DA00DCFFFF00DE00DDFFFF00DF +00E100E000E300E2FFFF00E400E5FFFF00E6FFFFFFFF00E700E8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E9FFFFFFFFFFFF +FFFF00EA00EC00EBFFFFFFFF00EDFFFF00EF00EE00F100F0FFFF00F2FFFFFFFFFFFFFFFFFFFF00F3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00F4FFFFFFFF00F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F7FFFF00F8FFFFFFFFFFFF00F9FFFF +FFFFFFFF00FAFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF05E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00FE00FD010000FF010105E901030102010501040107010601090108010B010A010D010C010F010E +0111011001130112011501140117011601190118011B011A011D011CFFFF011E0120011FFFFFFFFF0121FFFF01230122 +0124FFFF0125FFFF0126FFFF0127FFFF0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF +01310130013301320134FFFFFFFFFFFFFFFF01350136FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01380137013A0139013C013B013E013D +0140013F01420141014401430146014501480147014A0149014C014B014E014D0150014F015201510154015301560155 +01580157015A0159015C015B015E015D0160015F0162016101640163016601650167FFFF0168FFFF0169FFFF016AFFFF +016BFFFF016CFFFF016DFFFF016EFFFF016FFFFF0170FFFF0171FFFF0172FFFF0173FFFF0174FFFF0175FFFF0176FFFF +0177FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0178FFFF0179FFFF017AFFFF017BFFFF017CFFFF017DFFFF017EFFFF +017FFFFF0180FFFF0181FFFF0182FFFF0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018AFFFF +018BFFFF018CFFFF018DFFFF018EFFFF018FFFFF0190FFFF0191FFFF0192FFFFFFFFFFFFFFFF0193FFFF0194FFFF0195 +FFFF0196FFFF0197FFFF0198019A0199019BFFFF019CFFFF019DFFFF019EFFFF019FFFFF01A0FFFF01A1FFFF01A2FFFF +01A3FFFF01A4FFFF01A5FFFF01A6FFFF01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AEFFFF +01AFFFFF01B0FFFF01B1FFFF01B2FFFF01B3FFFF01B4FFFF01B5FFFF01B6FFFF01B7FFFF01B8FFFF01B9FFFF01BAFFFF +01BBFFFF01BCFFFF01BDFFFF01BEFFFF01BFFFFF01C0FFFF01C1FFFF01C2FFFF01C3FFFF01C4FFFF01C5FFFF01C6FFFF +01C7FFFF01C8FFFF01C9FFFF01CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CBFFFF01CD01CC01CF01CE01D101D001D301D201D501D401D701D601D901D8 +01DB01DA01DD01DC01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE05D801F0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F201F101F401F301F601F501F801F701FA01F901FC01FB01FE01FD020001FF02020201020402030206020502080207 +020A0209020C020B020E020D0210020F02120211021402130216021502180217021A0219FFFF021B021CFFFF021E021D +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0220021F0222022102240223FFFFFFFF0226022502280227022A0229022C022B +FFFF022DFFFF022EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022FFFFFFFFFFFFF0230FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0232FFFF0233FFFF0234FFFF0235FFFF +0236FFFF0237FFFF0238FFFF0239FFFF023AFFFF023BFFFF023CFFFF023DFFFF023EFFFF023FFFFF0240FFFF0241FFFF +0242FFFF0243FFFF0244FFFF0245FFFF0246FFFF0247FFFF0248FFFF0249FFFF024AFFFF024BFFFF024CFFFF024DFFFF +024EFFFF024FFFFF0250FFFF0251FFFF0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF +025AFFFF025BFFFF025CFFFF025DFFFF025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF +0266FFFF0267FFFF0268FFFF0269FFFF026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF +0272FFFF0273FFFF0274FFFF0275FFFF0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF05F005EE +05F405F2027D05F6FFFFFFFFFFFFFFFF027EFFFF027FFFFF0280FFFF0281FFFF0282FFFF0283FFFF0284FFFF0285FFFF +0286FFFF0287FFFF0288FFFF0289FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF +0292FFFF0293FFFF0294FFFF0295FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF +029EFFFF029FFFFF02A0FFFF02A1FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF +02AAFFFF02ABFFFF02ACFFFF02ADFFFF02AF02AE02B102B002B302B202B502B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02B702B602B902B802BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BD02BC02BF02BE02C102C002C302C2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C402C702C602C902C802CB02CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02CD02CC02CF02CE02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D205F802D305FA02D405FD02D50600 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D702D602D902D802DB02DA02DD02DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02DF02DE02E102E002E302E202E502E402E702E602E902E802EB02EAFFFFFFFF0623062106270625062B0629062F062D +0633063106370635063B0639063F063D0643064106470645064B0649064F064D0653065106570655065B0659065F065D +0663066106670665066B0669066F066D0673067106770675067B0679067F067D030503040681068DFFFF068F06990603 +FFFFFFFFFFFFFFFFFFFF0683FFFF0307FFFFFFFF06850691FFFF0693069C0605FFFFFFFFFFFFFFFFFFFF0687FFFFFFFF +030A0309060A0607FFFFFFFF060F060DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030C030B06150612030D0618061C061A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06890695FFFF0697069F061FFFFFFFFFFFFFFFFFFFFF068BFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0311031003130312031503140317031603190318031B031A031D031C031F031EFFFFFFFFFFFFFFFFFFFF0320FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03220321032403230326032503280327032A0329032C032B032E032D0330032F03320331033403330336033503380337 +033A0339FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +033C033B033E033D0340033F03420341034403430346034503480347034A0349034C034B034E034D0350034F03520351 +035403530356035503580357035A0359035C035B035E035D0360035F03620361036403630366036503680367036A0369 +036BFFFFFFFFFFFF036CFFFFFFFF036DFFFF036EFFFF036FFFFF0370FFFFFFFFFFFFFFFF0371FFFFFFFFFFFFFFFF0372 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0373FFFF0374FFFF0375FFFF0376FFFF0377FFFF0378FFFF0379FFFF037AFFFF +037BFFFF037CFFFF037DFFFF037EFFFF037FFFFF0380FFFF0381FFFF0382FFFF0383FFFF0384FFFF0385FFFF0386FFFF +0387FFFF0388FFFF0389FFFF038AFFFF038BFFFF038CFFFF038DFFFF038EFFFF038FFFFF0390FFFF0391FFFF0392FFFF +0393FFFF0394FFFF0395FFFF0396FFFF0397FFFF0398FFFF0399FFFF039AFFFF039BFFFF039CFFFF039DFFFF039EFFFF +039FFFFF03A0FFFF03A1FFFF03A2FFFF03A3FFFF03A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A5FFFF03A6 +FFFFFFFF03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A903A803AB03AA03AD03AC03AF03AE +03B103B003B303B203B503B403B703B603B903B803BB03BA03BD03BC03BF03BE03C103C003C303C203C503C403C703C6 +03C903C803CB03CA03CD03CC03CEFFFFFFFFFFFFFFFFFFFF03CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D0FFFF03D1FFFF03D2FFFF03D3FFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF +03D8FFFF03D9FFFF03DAFFFF03DBFFFF03DCFFFF03DDFFFF03DEFFFF03DFFFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF +03E4FFFF03E5FFFF03E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03E7FFFF03E8FFFF03E9FFFF03EAFFFF03EBFFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF +03F3FFFF03F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF03F5FFFF03F6FFFF03F7FFFF03F8FFFF03F9FFFF03FAFFFF03FBFFFFFFFFFFFF03FCFFFF03FDFFFF03FEFFFF +03FFFFFF0400FFFF0401FFFF0402FFFF0403FFFF0404FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF +040BFFFF040CFFFF040DFFFF040EFFFF040FFFFF0410FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF +0417FFFF0418FFFF0419FFFF041AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041BFFFF041C041DFFFF +041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF +0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF +FFFF0438FFFF0439043AFFFFFFFFFFFF043BFFFFFFFFFFFFFFFFFFFF043CFFFF043DFFFF043EFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04420441044404430446044504480447044A0449044C044B044E044D0450044F +04520451045404530456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467 +046A0469046C046B046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F +04820481048404830486048504880487048A0489048C048B048E048D0490048F05CA05C805CE05CC05D405D1FFFF05D6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFF05DE05DC05E205E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0491FFFF04930492049504940497049604990498049B049A049D049C049F049E +04A104A004A304A204A504A404A704A604A904A8FFFF04AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04AC04AB04AE04AD04B004AF04B204B1 +04B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C504C804C704CA04C9 +04CC04CB04CE04CD04D004CF04D204D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D404D304D604D504D804D704DA04D904DC04DB04DE04DD04E004DF04E204E1 +04E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F5FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F7FFFF +04F904F804FB04FA04FD04FC04FF04FE050105000502FFFF050405030506050505080507050A0509050C050B050E050D +0510050F0511FFFF0513051205150514051705160518FFFFFFFF0519FFFFFFFF051B051A051D051C051F051E05210520 +05230522052505240527052605290528052B052A052D052C052F052E0531053005330532053505340537053605390538 +053B053A053D053C053F053E0541054005430542054505440547054605490548054B054AFFFF054CFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054E054D0550054F05520551055405530556055505580557055A0559055C055B +055E055D0560055F05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056405630566056505680567056A0569 +056C056B056E056D0570056F05720571057405730576057505780577057A0579057C057B057E057D0580057F05820581 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058405830586058505880587058A0589 +058C058B058E058D0590058F05920591059405930596059505980597059A0599059C059B059E059D05A0059F05A205A1 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A305A605A505A805A705AA05A905AC05AB05AE05AD05B005AF +05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10240 bytes +enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000000F00", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000200000004000300060005000800070000000000090000000B000A +000D000C000F000E00110010000000120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000014001300000000000000000000000000000000000000000016001500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000017000000000000000000190018001B001A001D001C001F001E00000000000000000021002000000022 +000000000000000000000000000000000000000000240023000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000260025002800270000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002900000000002A002C002B002E002D00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000002F000000000000000000000000000000000000000000000000000000000000003000000000 +000000000000000000000000000000000000000000000000000000000000000000000031003300320034000000000035 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000003600370000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000003800000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000003A000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFF00020001000400030006000500080007000A0009000C000B000E000D0010000F001200110014001300160015 +00180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001B001A001D001C001F001E00210020 +00230022002500240027002600290028002B002A002D002C002F002EFFFF003000320031003400330036003505B40037 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0038FFFF0039FFFF003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003F +FFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004B +FFFF004CFFFF004DFFFF004EFFFF004FFFFF05B5FFFF0051FFFF0052FFFF00530054FFFF0055FFFF0056FFFF0057FFFF +0058FFFF0059FFFF005AFFFF005BFFFF05C4FFFFFFFF005CFFFF005DFFFF005EFFFF005FFFFF0060FFFF0061FFFF0062 +FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006E +FFFF006FFFFF0070FFFF0071FFFF0072007400730075FFFF0076FFFFFFFFFFFF0077FFFFFFFF0078FFFF0079007B007A +007CFFFF007E007DFFFFFFFF0080007F008200810083FFFFFFFF008400860085FFFF0087FFFFFFFF00890088008AFFFF +FFFF008BFFFF008CFFFF008D008F008E0090FFFFFFFFFFFFFFFF0091009300920094FFFF009600950097FFFF0098FFFF +FFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFFFFFFFFFF009C009B009DFFFFFFFF009E00A0009F00A1FFFF00A2FFFF +00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFFFFFFFFFFFFFF00A9FFFF00AAFFFF00ABFFFF00ACFFFF00AD +FFFF00AEFFFF00AFFFFF00B0FFFF00B100B205C7FFFF00B3FFFF00B400B600B5FFFF00B7FFFF00B8FFFF00B9FFFF00BA +FFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6 +FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF00D0FFFF00D1FFFF00D2 +FFFF00D3FFFF00D4FFFFFFFFFFFFFFFFFFFFFFFF00D600D500D7FFFFFFFF00D800D9FFFF00DAFFFF00DC00DBFFFF00DD +FFFF00DEFFFF00DFFFFF00E0FFFF00E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E2FFFF00E3FFFFFFFFFFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E600E800E7FFFF00E9FFFF00EA00EC00EB00ED05C500EF00EE00F100F000F300F2 +00F500F400F700F600F900F800FB00FA00FD00FC00FEFFFF010000FF010201010104010301060105FFFFFFFFFFFFFFFF +FFFF05C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0108FFFF0109FFFF010AFFFF010B +FFFF010CFFFF010DFFFF010EFFFF010FFFFF0110FFFF0111FFFF0112FFFF0113FFFFFFFFFFFFFFFFFFFF01140115FFFF +0116FFFFFFFF01170118FFFF011A0119011C011B011E011D0120011F01220121012401230126012501280127012A0129 +012C012B012E012D0130012F01320131013401330136013501380137013A0139013C013B013E013D0140013F01420141 +014401430146014501480147014A0149FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF014BFFFF014CFFFF014DFFFF014EFFFF014FFFFF0150FFFF0151FFFF0152 +FFFF0153FFFF0154FFFF0155FFFF0156FFFF0157FFFF0158FFFF0159FFFF015AFFFF015BFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF015CFFFF015DFFFF015EFFFF015FFFFF0160FFFF0161FFFF0162FFFF0163FFFF0164FFFF0165FFFF0166 +FFFF0167FFFF0168FFFF0169FFFF016AFFFF016BFFFF016CFFFF016DFFFF016EFFFF016FFFFF0170FFFF0171FFFF0172 +FFFF0173FFFF0174FFFF0175FFFF0176017801770179FFFF017AFFFF017BFFFF017CFFFF017DFFFF017EFFFFFFFFFFFF +FFFF017FFFFF0180FFFF0181FFFF0182FFFF0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018A +FFFF018BFFFF018CFFFF018DFFFF018EFFFF018FFFFF0190FFFF0191FFFF0192FFFF0193FFFF0194FFFF0195FFFF0196 +FFFF0197FFFF0198FFFF0199FFFF019AFFFF019BFFFF019CFFFF019DFFFF019EFFFF019FFFFF01A0FFFF01A1FFFF01A2 +FFFF01A3FFFF01A4FFFF01A5FFFF01A6FFFF01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AE +01AFFFFF01B101B001B301B201B501B401B701B601B901B801BB01BA01BD01BC01BF01BE01C101C001C301C201C501C4 +01C701C601C901C801CB01CA01CD01CC01CF01CE01D101D001D301D2FFFF01D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D601D501D801D701DA01D901DC01DB01DE01DD01E001DF01E201E101E401E3 +01E601E501E801E701EA01E901EC01EB01EE01ED01F001EF01F201F101F401F301F601F501F801F701FA01F901FBFFFF +FFFFFFFFFFFFFFFF01FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01FE01FD020001FF0202020102040203 +0206020502080207020A0209020C020B020E020D0210020F02120211021402130216021502180217021A0219021C021B +021E021D0220021F02220221022402230226022502280227022A0229022C022B022E022D0230022F0232023102340233 +0236023502380237023A0239023C023B023E023D0240023F02420241024402430246024502480247024A0249024C024B +024E024D0250024F02520251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0253FFFFFFFFFFFFFFFFFFFFFFFFFFFF025502540257025602590258025B025A025D025C025F025E0261026002630262 +026502640267026602690268026B026A026D026C026F026E0271027002730272027502740277027602790278027B027A +027D027CFFFF027E027FFFFF02810280FFFF0282FFFF0283FFFF0284FFFF0285FFFF0286FFFF0287FFFF0288FFFF0289 +FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF0292FFFF0293FFFF0294FFFF0295 +FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF029EFFFF029FFFFF02A0FFFF02A1 +FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02AD +FFFF02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B2FFFF02B3FFFF02B4FFFF02B5FFFF02B6FFFF02B7FFFF02B8FFFF02B9 +FFFF02BAFFFF02BBFFFF02BCFFFF02BDFFFF02BEFFFF02BFFFFF02C0FFFF02C1FFFF02C2FFFF02C3FFFF02C4FFFF02C5 +FFFF02C6FFFF02C7FFFF02C8FFFF02C9FFFF02CAFFFF02CBFFFF02CC05C905C805CB05CAFFFF05CCFFFFFFFFFFFF02CD +FFFF02CEFFFF02CFFFFF02D0FFFF02D1FFFF02D2FFFF02D3FFFF02D4FFFF02D5FFFF02D6FFFF02D7FFFF02D8FFFF02D9 +FFFF02DAFFFF02DBFFFF02DCFFFF02DDFFFF02DEFFFF02DFFFFF02E0FFFF02E1FFFF02E2FFFF02E3FFFF02E4FFFF02E5 +FFFF02E6FFFF02E7FFFF02E8FFFF02E9FFFF02EAFFFF02EBFFFF02ECFFFF02EDFFFF02EEFFFF02EFFFFF02F0FFFF02F1 +FFFF02F2FFFF02F3FFFF02F4FFFF02F5FFFF02F6FFFF02F7FFFF02F8FFFF02F9FFFF02FAFFFF02FBFFFF02FCFFFF02FD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FF02FE030103000303030203050304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0307030603090308030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030D030C030F030E0311031003130312 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031503140317031603190318031B031AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +031D031C031F031E03210320FFFFFFFFFFFF05CDFFFF05CEFFFF05CFFFFF05D00322FFFF0323FFFF0324FFFF0325FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0327032603290328032B032A032D032CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DE05DD05E005DF05E205E105E405E305E605E505E805E705EA05E905EC05EB +05EE05ED05F005EF05F205F105F405F305F605F505F805F705FA05F905FC05FB05FE05FD060005FF0602060106040603 +0606060506080607060A0609060C060BFFFFFFFF060D0613FFFF0614061905D10347034603490348FFFF060EFFFFFFFF +FFFFFFFF060F0615FFFF0616061A05D2034C034B034E034DFFFF0610FFFFFFFFFFFFFFFF05D405D3FFFFFFFF05D605D5 +0351035003530352FFFFFFFFFFFFFFFFFFFFFFFF05D805D7FFFF05D905DB05DA0355035403570356FFFF0358FFFFFFFF +FFFFFFFF06110617FFFF0618061B05DC035A0359035C035BFFFF0612FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03630362036503640367036603690368 +036B036A036D036C036F036E03710370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0372FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03740373 +0376037503780377037A0379037C037B037E037D0380037F03820381038403830386038503880387038A0389038C038B +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +038E038D0390038F03920391039403930396039503980397039A0399039C039B039E039D03A0039F03A203A103A403A3 +03A603A503A803A703AA03A903AC03AB03AE03AD03B003AF03B203B103B403B303B603B503B803B703BA03B903BC03BB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF03BD03BF03BEFFFF03C003C1FFFF03C2FFFF03C3FFFF03C4FFFF03C603C5FFFF03C7FFFF03C803C9FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF03CB03CAFFFF03CCFFFF03CDFFFF03CEFFFF03CFFFFF03D0FFFF03D1FFFF03D2FFFF03D3 +FFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF03D8FFFF03D9FFFF03DAFFFF03DBFFFF03DCFFFF03DDFFFF03DEFFFF03DF +FFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF03E4FFFF03E5FFFF03E6FFFF03E7FFFF03E8FFFF03E9FFFF03EAFFFF03EB +FFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF03F3FFFF03F4FFFF03F5FFFF03F6FFFF03F7 +FFFF03F8FFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF03FDFFFFFFFFFFFFFFFFFFFFFFFF03FEFFFF03FFFFFFFFFFFFFF +FFFFFFFFFFFF0400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0401FFFF0402FFFF0403FFFF0404 +FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF040BFFFF040CFFFF040DFFFF040EFFFF040FFFFF0410 +FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF0417FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0418FFFF0419FFFF041AFFFF041BFFFF041CFFFF041DFFFF041EFFFF041F +FFFF0420FFFF0421FFFF0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0426FFFF0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042C +FFFFFFFFFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437 +FFFF0438FFFF0439FFFF043AFFFF043BFFFF043CFFFF043DFFFF043EFFFF043FFFFF0440FFFF0441FFFF0442FFFF0443 +FFFF0444FFFF0445FFFF0446FFFF0447FFFF0448FFFF0449FFFF044AFFFF044BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453FFFFFFFF0454FFFF0455FFFFFFFFFFFF +FFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045CFFFF045DFFFF045EFFFF045FFFFF0460 +FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046CFFFF046DFFFF046EFFFF046FFFFF0470 +FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFFFFFFFFFF047AFFFFFFFFFFFFFFFFFFFF047B +FFFF047CFFFF047DFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05B805B705BA05B905BC05BBFFFF05BD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BFFFFF05C105C005C305C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0480FFFF048204810484048304860485 +04880487048A0489048C048B048E048D0490048F04920491049404930496049504980497FFFF0499FFFFFFFFFFFFFFFF +049B049A049D049C049F049E04A104A004A304A204A504A404A704A604A904A804AB04AA04AD04AC04AF04AE04B104B0 +04B304B204B504B404B704B604B904B804BB04BA04BD04BC04BF04BE04C104C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C304C204C504C404C704C604C904C8 +04CB04CA04CD04CC04CF04CE04D104D004D304D204D504D404D704D604D904D804DB04DA04DD04DC04DF04DE04E104E0 +04E304E204E504E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04E704E604E904E804EB04EA04ED04EC04EF04EEFFFF04F004F204F104F404F304F604F504F804F704FA04F904FC04FB +04FE04FDFFFF04FF050105000503050205050504FFFF050605080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050A0509050C050B050E050D0510050F05120511051405130516051505180517 +051A0519051C051B051E051D0520051F05220521052405230526052505280527052A0529052C052B052E052D0530052F +05320531053405330536053505380537053A0539FFFF053BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053D053C053F053E0541054005430542 +054505440547054605490548054B054A054D054C054F054E05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05530552055505540557055605590558055B055A055D055C055F055E0561056005630562056505640567056605690568 +056B056A056D056C056F056E0571057005730572057505740577057605790578057B057A057D057C057F057E05810580 +05830582058505840587058605890588058B058A058D058C058F058E05910590FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05930592059505940597059605990598059B059A059D059C059F059E05A105A005A305A205A505A405A705A605A905A8 +05AB05AA05AD05AC05AF05AE05B105B005B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10752 bytes +enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000001000", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000015000000000000000000000000000000000000000000000016000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000170018000000000019001B001A001D001C001F001E0021002000000000000000000022000000000023 +000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000260025002800270000002900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002A00000000002B002D002C002F002E00000000000000000000000000000000 +000000000000000000300000000000310000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000032000000000000000000000000000000000000000000000000000000000033000000000000 +000000000000000000000000000000000000000000000000000000000000000000350034003600000000000000000037 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000380000003900000000003A0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000003B000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000003C0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000003E003D000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00020001000400030006000500080007000A0009000C000B000E000D +0010000F00120011001400130016001500180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C9FFFF001C001B001E001D0020001F00220021 +002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038 +003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF +0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF +005205CB0053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C +05E8005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF +0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF +FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF +FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF +FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF +FFFFFFFFFFFFFFFF0090008F009200910094009300960095FFFF0097FFFF0098FFFF0099FFFF009AFFFF009BFFFF009C +FFFF009DFFFF009E00A0009F00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFF00A9FFFF +00AA05F000AC00AB00ADFFFFFFFFFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF00B2FFFF00B3FFFF00B4FFFF00B5FFFF +00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF +FFFFFFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00CB00CCFFFFFFFF00CDFFFF00CEFFFFFFFF00CFFFFF00D0FFFF00D1FFFF00D2FFFF00D3FFFF +00D500D400D700D6FFFF00D800DA00D900DBFFFF00DCFFFFFFFF00DDFFFFFFFF00DF00DE00E0FFFF00E200E1FFFF00E3 +00E500E400E700E6FFFF00E800E9FFFF00EAFFFFFFFF00EB00ECFFFFFFFFFFFFFFFFFFFFFFFFFFFF00EDFFFFFFFFFFFF +FFFF00EE00F000EFFFFFFFFF00F1FFFF00F300F200F500F4FFFF00F6FFFFFFFFFFFFFFFFFFFF00F7FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00F8FFFFFFFF00F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FBFFFF00FCFFFFFFFFFFFF00FDFFFF +FFFFFFFF00FEFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF05EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0102010101040103010505ED0107010601090108010B010A010D010C010F010E0111011001130112 +011501140117011601190118011B011A011D011C011F011E01210120FFFF012201240123FFFFFFFF0125FFFF01270126 +0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF0130FFFF0131FFFF0132FFFF0133FFFF +01350134013701360138FFFFFFFFFFFFFFFF0139013AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013C013B013E013D0140013F01420141 +014401430146014501480147014A0149014C014B014E014D0150014F01520151015401530156015501580157015A0159 +015C015B015E015D0160015F01620161016401630166016501680167016A0169016BFFFF016CFFFF016DFFFF016EFFFF +016FFFFF0170FFFF0171FFFF0172FFFF0173FFFF0174FFFF0175FFFF0176FFFF0177FFFF0178FFFF0179FFFF017AFFFF +017BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF017CFFFF017DFFFF017EFFFF017FFFFF0180FFFF0181FFFF0182FFFF +0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018AFFFF018BFFFF018CFFFF018DFFFF018EFFFF +018FFFFF0190FFFF0191FFFF0192FFFF0193FFFF0194FFFF0195FFFF0196FFFFFFFFFFFFFFFF0197FFFF0198FFFF0199 +FFFF019AFFFF019BFFFF019C019E019D019FFFFF01A0FFFF01A1FFFF01A2FFFF01A3FFFF01A4FFFF01A5FFFF01A6FFFF +01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AEFFFF01AFFFFF01B0FFFF01B1FFFF01B2FFFF +01B3FFFF01B4FFFF01B5FFFF01B6FFFF01B7FFFF01B8FFFF01B9FFFF01BAFFFF01BBFFFF01BCFFFF01BDFFFF01BEFFFF +01BFFFFF01C0FFFF01C1FFFF01C2FFFF01C3FFFF01C4FFFF01C5FFFF01C6FFFF01C7FFFF01C8FFFF01C9FFFF01CAFFFF +01CBFFFF01CCFFFF01CDFFFF01CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CFFFFF01D101D001D301D201D501D401D701D601D901D801DB01DA01DD01DC +01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE01F101F001F301F205DC01F4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F601F501F801F701FA01F901FC01FB01FE01FD020001FF02020201020402030206020502080207020A0209020C020B +020E020D0210020F02120211021402130216021502180217021A0219021C021B021E021DFFFF021F0220FFFF02220221 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022402230226022502280227FFFFFFFF022A0229022C022B022E022D0230022F +FFFF0231FFFF0232FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFFFFFFFFFF0234FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0235FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0236FFFF0237FFFF0238FFFF0239FFFF +023AFFFF023BFFFF023CFFFF023DFFFF023EFFFF023FFFFF0240FFFF0241FFFF0242FFFF0243FFFF0244FFFF0245FFFF +0246FFFF0247FFFF0248FFFF0249FFFF024AFFFF024BFFFF024CFFFF024DFFFF024EFFFF024FFFFF0250FFFF0251FFFF +0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF025AFFFF025BFFFF025CFFFF025DFFFF +025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF0266FFFF0267FFFF0268FFFF0269FFFF +026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF0272FFFF0273FFFF0274FFFF0275FFFF +0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF027DFFFF027EFFFF027FFFFF0280FFFF05F405F2 +05F805F6028105FAFFFFFFFFFFFFFFFF0282FFFF0283FFFF0284FFFF0285FFFF0286FFFF0287FFFF0288FFFF0289FFFF +028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF0292FFFF0293FFFF0294FFFF0295FFFF +0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF029EFFFF029FFFFF02A0FFFF02A1FFFF +02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02ADFFFF +02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B302B202B502B402B702B602B902B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02BB02BA02BD02BC02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C102C002C302C202C502C402C702C6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C902C802CB02CA02CD02CC02CF02CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02D102D002D302D202D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D605FC02D705FE02D8060102D90604 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DB02DA02DD02DC02DF02DE02E102E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E302E202E502E402E702E602E902E802EB02EA02ED02EC02EF02EEFFFFFFFF0626062506280627062A0629062C062B +062E062D0630062F06320631063406330636063506380637063A0639063C063B063E063D0640063F0642064106440643 +0646064506480647064A0649064C064B064E064D0650064F0652065106540653030903080655065BFFFF065D06670607 +FFFFFFFFFFFFFFFFFFFF0656FFFF030BFFFFFFFF0657065FFFFF0661066A0609FFFFFFFFFFFFFFFFFFFF0658FFFFFFFF +030E030D060E060BFFFFFFFF06130611FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0310030F061906160311061C0620061E +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06590663FFFF0665066D0623FFFFFFFFFFFFFFFFFFFF065AFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +031503140317031603190318031B031A031D031C031F031E0321032003230322FFFFFFFFFFFFFFFFFFFF0324FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0326032503280327032A0329032C032B032E032D0330032F03320331033403330336033503380337033A0339033C033B +033E033DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0340033F03420341034403430346034503480347034A0349034C034B034E034D0350034F035203510354035303560355 +03580357035A0359035C035B035E035D0360035F03620361036403630366036503680367036A0369036C036B036E036D +036FFFFFFFFFFFFF0370FFFFFFFF0371FFFF0372FFFF0373FFFF0374FFFFFFFFFFFFFFFF0375FFFFFFFFFFFFFFFF0376 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0377FFFF0378FFFF0379FFFF037AFFFF037BFFFF037CFFFF037DFFFF037EFFFF +037FFFFF0380FFFF0381FFFF0382FFFF0383FFFF0384FFFF0385FFFF0386FFFF0387FFFF0388FFFF0389FFFF038AFFFF +038BFFFF038CFFFF038DFFFF038EFFFF038FFFFF0390FFFF0391FFFF0392FFFF0393FFFF0394FFFF0395FFFF0396FFFF +0397FFFF0398FFFF0399FFFF039AFFFF039BFFFF039CFFFF039DFFFF039EFFFF039FFFFF03A0FFFF03A1FFFF03A2FFFF +03A3FFFF03A4FFFF03A5FFFF03A6FFFF03A7FFFF03A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A9FFFF03AA +FFFFFFFF03ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AD03AC03AF03AE03B103B003B303B2 +03B503B403B703B603B903B803BB03BA03BD03BC03BF03BE03C103C003C303C203C503C403C703C603C903C803CB03CA +03CD03CC03CF03CE03D103D003D2FFFFFFFFFFFFFFFFFFFF03D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF03D8FFFF03D9FFFF03DAFFFF03DBFFFF +03DCFFFF03DDFFFF03DEFFFF03DFFFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF03E4FFFF03E5FFFF03E6FFFF03E7FFFF +03E8FFFF03E9FFFF03EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03EBFFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF03F3FFFF03F4FFFF03F5FFFF03F6FFFF +03F7FFFF03F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF03FDFFFF03FEFFFF03FFFFFFFFFFFFFF0400FFFF0401FFFF0402FFFF +0403FFFF0404FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF040BFFFF040CFFFF040DFFFF040EFFFF +040FFFFF0410FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF0417FFFF0418FFFF0419FFFF041AFFFF +041BFFFF041CFFFF041DFFFF041EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041FFFFF04200421FFFF +0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF +042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF +FFFF043CFFFF043D043EFFFFFFFFFFFF043FFFFFFFFFFFFFFFFFFFFF0440FFFF0441FFFF0442FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446044504480447044A0449044C044B044E044D0450044F0452045104540453 +0456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467046A0469046C046B +046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F0482048104840483 +0486048504880487048A0489048C048B048E048D0490048F049204910494049305CE05CC05D205D005D805D5FFFF05DA +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DEFFFF05E205E005E605E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0495FFFF0497049604990498049B049A049D049C049F049E04A104A004A304A2 +04A504A404A704A604A904A804AB04AA04AD04ACFFFF04AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B004AF04B204B104B404B304B604B5 +04B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C504C804C704CA04C904CC04CB04CE04CD +04D004CF04D204D104D404D304D604D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D804D704DA04D904DC04DB04DE04DD04E004DF04E204E104E404E304E604E5 +04E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F504F804F704FA04F9FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FBFFFF +04FD04FC04FF04FE0501050005030502050505040506FFFF05080507050A0509050C050B050E050D0510050F05120511 +051405130515FFFF0517051605190518051B051A051CFFFFFFFF051DFFFFFFFF051F051E052105200523052205250524 +0527052605290528052B052A052D052C052F052E0531053005330532053505340537053605390538053B053A053D053C +053F053E0541054005430542054505440547054605490548054B054A054D054C054F054EFFFF0550FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05520551055405530556055505580557055A0559055C055B055E055D0560055F +056205610564056305660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05680567056A0569056C056B056E056D +0570056F05720571057405730576057505780577057A0579057C057B057E057D0580057F058205810584058305860585 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05880587058A0589058C058B058E058D +0590058F05920591059405930596059505980597059A0599059C059B059E059D05A0059F05A205A105A405A305A605A5 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A705AA05A905AC05AB05AE05AD05B005AF05B205B105B405B3 +05B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C305C605C505C805C7FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10624 bytes +enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000000FC0", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000015000000000000000000000000000000000000000000000016000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000170018000000000019001B001A001D001C001F001E0021002000000000000000000022000000000023 +000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000260025002800270000002900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002A00000000002B002D002C002F002E00000000000000000000000000000000 +000000000000000000300000000000310000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000 +000000000000000000000000000000000000000000000000000000000000000000340033003500000000000000000036 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000037000000380000000000390000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000003B0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00020001000400030006000500080007000A0009000C000B000E000D +0010000F00120011001400130016001500180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001C001B001E001D0020001F00220021 +002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038 +003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF +0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF +0052FFFF0053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C +FFFF005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF +0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF +FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF +FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF +FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF +FFFFFFFFFFFFFFFF008FFFFFFFFF0090009200910093FFFFFFFF0094FFFF0095FFFF0096FFFF0097FFFF0098FFFF0099 +FFFF009AFFFF009B009D009C009EFFFF009FFFFF00A0FFFF00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF +FFFFFFFF00A800A700A9FFFFFFFFFFFF00AAFFFF00ABFFFF00ACFFFF00ADFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF +00B2FFFF00B3FFFF00B4FFFF00B5FFFF00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF +FFFFFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00C700C8FFFFFFFF00C9FFFF00CAFFFFFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF +00D100D000D300D2FFFF00D400D600D500D7FFFF00D8FFFFFFFF00D9FFFFFFFF00DB00DA00DCFFFF00DE00DDFFFF00DF +00E100E000E300E2FFFF00E400E5FFFF00E6FFFFFFFF00E700E8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E9FFFFFFFFFFFF +FFFF00EA00EC00EBFFFFFFFF00EDFFFF00EF00EE00F100F0FFFF00F2FFFFFFFFFFFFFFFFFFFF00F3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00F4FFFFFFFF00F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F7FFFF00F8FFFFFFFFFFFF00F9FFFF +FFFFFFFF00FAFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00FE00FD010000FF0101FFFF01030102010501040107010601090108010B010A010D010C010F010E +0111011001130112011501140117011601190118011B011A011D011CFFFF011E0120011FFFFFFFFF0121FFFF01230122 +0124FFFF0125FFFF0126FFFF0127FFFF0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF +01310130013301320134FFFFFFFFFFFFFFFF01350136FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01380137013A0139013C013B013E013D +0140013F01420141014401430146014501480147014A0149014C014B014E014D0150014F015201510154015301560155 +01580157015A0159015C015B015E015D0160015F0162016101640163016601650167FFFF0168FFFF0169FFFF016AFFFF +016BFFFF016CFFFF016DFFFF016EFFFF016FFFFF0170FFFF0171FFFF0172FFFF0173FFFF0174FFFF0175FFFF0176FFFF +0177FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0178FFFF0179FFFF017AFFFF017BFFFF017CFFFF017DFFFF017EFFFF +017FFFFF0180FFFF0181FFFF0182FFFF0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018AFFFF +018BFFFF018CFFFF018DFFFF018EFFFF018FFFFF0190FFFF0191FFFF0192FFFFFFFFFFFFFFFF0193FFFF0194FFFF0195 +FFFF0196FFFF0197FFFF0198019A0199019BFFFF019CFFFF019DFFFF019EFFFF019FFFFF01A0FFFF01A1FFFF01A2FFFF +01A3FFFF01A4FFFF01A5FFFF01A6FFFF01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AEFFFF +01AFFFFF01B0FFFF01B1FFFF01B2FFFF01B3FFFF01B4FFFF01B5FFFF01B6FFFF01B7FFFF01B8FFFF01B9FFFF01BAFFFF +01BBFFFF01BCFFFF01BDFFFF01BEFFFF01BFFFFF01C0FFFF01C1FFFF01C2FFFF01C3FFFF01C4FFFF01C5FFFF01C6FFFF +01C7FFFF01C8FFFF01C9FFFF01CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CBFFFF01CD01CC01CF01CE01D101D001D301D201D501D401D701D601D901D8 +01DB01DA01DD01DC01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EEFFFF01F0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F201F101F401F301F601F501F801F701FA01F901FC01FB01FE01FD020001FF02020201020402030206020502080207 +020A0209020C020B020E020D0210020F02120211021402130216021502180217021A0219FFFF021B021CFFFF021E021D +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0220021F0222022102240223FFFFFFFF0226022502280227022A0229022C022B +FFFF022DFFFF022EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022FFFFFFFFFFFFF0230FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0232FFFF0233FFFF0234FFFF0235FFFF +0236FFFF0237FFFF0238FFFF0239FFFF023AFFFF023BFFFF023CFFFF023DFFFF023EFFFF023FFFFF0240FFFF0241FFFF +0242FFFF0243FFFF0244FFFF0245FFFF0246FFFF0247FFFF0248FFFF0249FFFF024AFFFF024BFFFF024CFFFF024DFFFF +024EFFFF024FFFFF0250FFFF0251FFFF0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF +025AFFFF025BFFFF025CFFFF025DFFFF025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF +0266FFFF0267FFFF0268FFFF0269FFFF026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF +0272FFFF0273FFFF0274FFFF0275FFFF0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFFFFFFFFFF +FFFFFFFF027DFFFFFFFFFFFFFFFFFFFF027EFFFF027FFFFF0280FFFF0281FFFF0282FFFF0283FFFF0284FFFF0285FFFF +0286FFFF0287FFFF0288FFFF0289FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF +0292FFFF0293FFFF0294FFFF0295FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF +029EFFFF029FFFFF02A0FFFF02A1FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF +02AAFFFF02ABFFFF02ACFFFF02ADFFFF02AF02AE02B102B002B302B202B502B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02B702B602B902B802BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BD02BC02BF02BE02C102C002C302C2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C402C702C602C902C802CB02CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02CD02CC02CF02CE02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D2FFFF02D3FFFF02D4FFFF02D5FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D702D602D902D802DB02DA02DD02DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02DF02DE02E102E002E302E202E502E402E702E602E902E802EB02EAFFFFFFFF02ED02EC02EF02EE02F102F002F302F2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02F502F402F702F602F902F802FB02FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02FD02FC02FF02FE0301030003030302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030503040306FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0307FFFFFFFF0308FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +030A0309FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030C030BFFFFFFFF030DFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0311031003130312031503140317031603190318031B031A031D031C031F031EFFFFFFFFFFFFFFFFFFFF0320FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03220321032403230326032503280327032A0329032C032B032E032D0330032F03320331033403330336033503380337 +033A0339FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +033C033B033E033D0340033F03420341034403430346034503480347034A0349034C034B034E034D0350034F03520351 +035403530356035503580357035A0359035C035B035E035D0360035F03620361036403630366036503680367036A0369 +036BFFFFFFFFFFFF036CFFFFFFFF036DFFFF036EFFFF036FFFFF0370FFFFFFFFFFFFFFFF0371FFFFFFFFFFFFFFFF0372 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0373FFFF0374FFFF0375FFFF0376FFFF0377FFFF0378FFFF0379FFFF037AFFFF +037BFFFF037CFFFF037DFFFF037EFFFF037FFFFF0380FFFF0381FFFF0382FFFF0383FFFF0384FFFF0385FFFF0386FFFF +0387FFFF0388FFFF0389FFFF038AFFFF038BFFFF038CFFFF038DFFFF038EFFFF038FFFFF0390FFFF0391FFFF0392FFFF +0393FFFF0394FFFF0395FFFF0396FFFF0397FFFF0398FFFF0399FFFF039AFFFF039BFFFF039CFFFF039DFFFF039EFFFF +039FFFFF03A0FFFF03A1FFFF03A2FFFF03A3FFFF03A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A5FFFF03A6 +FFFFFFFF03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A903A803AB03AA03AD03AC03AF03AE +03B103B003B303B203B503B403B703B603B903B803BB03BA03BD03BC03BF03BE03C103C003C303C203C503C403C703C6 +03C903C803CB03CA03CD03CC03CEFFFFFFFFFFFFFFFFFFFF03CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D0FFFF03D1FFFF03D2FFFF03D3FFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF +03D8FFFF03D9FFFF03DAFFFF03DBFFFF03DCFFFF03DDFFFF03DEFFFF03DFFFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF +03E4FFFF03E5FFFF03E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03E7FFFF03E8FFFF03E9FFFF03EAFFFF03EBFFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF +03F3FFFF03F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF03F5FFFF03F6FFFF03F7FFFF03F8FFFF03F9FFFF03FAFFFF03FBFFFFFFFFFFFF03FCFFFF03FDFFFF03FEFFFF +03FFFFFF0400FFFF0401FFFF0402FFFF0403FFFF0404FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF +040BFFFF040CFFFF040DFFFF040EFFFF040FFFFF0410FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF +0417FFFF0418FFFF0419FFFF041AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041BFFFF041C041DFFFF +041EFFFF041FFFFF0420FFFF0421FFFFFFFFFFFFFFFFFFFFFFFF0422FFFFFFFF0423FFFF0424FFFFFFFF04250426FFFF +0427FFFF0428FFFF0429FFFF042AFFFF042BFFFF042CFFFF042DFFFF042EFFFF042FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0430FFFF0431FFFF0432FFFF0433FFFF0434FFFF0435FFFF0436FFFF0437FFFFFFFFFFFFFFFFFFFF +FFFF0438FFFF0439043AFFFFFFFFFFFF043BFFFFFFFFFFFFFFFFFFFF043CFFFF043DFFFF043EFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04420441044404430446044504480447044A0449044C044B044E044D0450044F +04520451045404530456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467 +046A0469046C046B046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F +04820481048404830486048504880487048A0489048C048B048E048D0490048F0491FFFF049304920495049404970496 +04990498049B049A049D049C049F049E04A104A004A304A204A504A404A704A604A904A8FFFF04AAFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04AC04AB04AE04AD04B004AF04B204B104B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C1 +04C404C304C604C504C804C704CA04C904CC04CB04CE04CD04D004CF04D204D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D404D304D604D504D804D704DA04D9 +04DC04DB04DE04DD04E004DF04E204E104E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F1 +04F404F304F604F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF04F7FFFF04F904F804FB04FA04FD04FC04FF04FE050105000502FFFF0504050305060505 +05080507050A0509050C050B050E050D0510050F0511FFFF0513051205150514051705160518FFFFFFFF0519FFFFFFFF +051B051A051D051C051F051E0521052005230522052505240527052605290528052B052A052D052C052F052E05310530 +05330532053505340537053605390538053B053A053D053C053F053E0541054005430542054505440547054605490548 +054B054AFFFF054CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF054E054D0550054F0552055105540553 +0556055505580557055A0559055C055B055E055D0560055F05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +056405630566056505680567056A0569056C056B056E056D0570056F05720571057405730576057505780577057A0579 +057C057B057E057D0580057F05820581FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +058405830586058505880587058A0589058C058B058E058D0590058F05920591059405930596059505980597059A0599 +059C059B059E059D05A0059F05A205A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A305A605A505A805A7 +05AA05A905AC05AB05AE05AD05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF +05C205C105C405C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//9984 bytes +enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000000E80", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000200000004000300060005000800070000000000090000000B000A +000D000C000F000E00110010000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000013001200000000000000000000000000000000000000000015001400000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000016000000000000000000180017001A0019001C001B001E001D00000000000000000020001F00000021 +000000000000000000000000000000000000000000230022000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000250024002700260000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000028000000000029002B002A002D002C00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E00000000 +00000000000000000000000000000000000000000000000000000000000000000000002F003100300032000000000033 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000003400350000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000038000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFF00020001000400030006000500080007000A0009000C000B000E000D0010000F001200110014001300160015 +00180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001B001A001D001C001F001E00210020 +00230022002500240027002600290028002B002A002D002C002F002EFFFF0030003200310034003300360035FFFF0037 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0038FFFF0039FFFF003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003F +FFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004B +FFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF0052FFFF00530054FFFF0055FFFF0056FFFF0057FFFF +0058FFFF0059FFFF005AFFFF005BFFFFFFFFFFFFFFFF005CFFFF005DFFFF005EFFFF005FFFFF0060FFFF0061FFFF0062 +FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006E +FFFF006FFFFF0070FFFF0071FFFF0072007400730075FFFF0076FFFFFFFFFFFF0077FFFFFFFF0078FFFF0079007B007A +007CFFFF007E007DFFFFFFFF0080007F008200810083FFFFFFFF008400860085FFFF0087FFFFFFFF00890088008AFFFF +FFFF008BFFFF008CFFFF008D008F008E0090FFFFFFFFFFFFFFFF0091009300920094FFFF009600950097FFFF0098FFFF +FFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFFFFFFFFFF009C009B009DFFFFFFFF009E00A0009F00A1FFFF00A2FFFF +00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFFFFFFFFFFFFFF00A9FFFF00AAFFFF00ABFFFF00ACFFFF00AD +FFFF00AEFFFF00AFFFFF00B0FFFF00B100B2FFFFFFFF00B3FFFF00B400B600B5FFFF00B7FFFF00B8FFFF00B9FFFF00BA +FFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6 +FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFF00CBFFFF00CCFFFF00CDFFFF00CEFFFF00CFFFFF00D0FFFF00D1FFFF00D2 +FFFF00D3FFFF00D4FFFFFFFFFFFFFFFFFFFFFFFF00D600D500D7FFFFFFFF00D800D9FFFF00DAFFFF00DC00DBFFFF00DD +FFFF00DEFFFF00DFFFFF00E0FFFF00E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E2FFFF00E3FFFFFFFFFFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E600E800E7FFFF00E9FFFF00EA00EC00EB00EDFFFF00EF00EE00F100F000F300F2 +00F500F400F700F600F900F800FB00FA00FD00FC00FEFFFF010000FF010201010104010301060105FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0108FFFF0109FFFF010AFFFF010B +FFFF010CFFFF010DFFFF010EFFFF010FFFFF0110FFFF0111FFFF0112FFFF0113FFFFFFFFFFFFFFFFFFFF01140115FFFF +0116FFFFFFFF01170118FFFF011A0119011C011B011E011D0120011F01220121012401230126012501280127012A0129 +012C012B012E012D0130012F01320131013401330136013501380137013A0139013C013B013E013D0140013F01420141 +014401430146014501480147014A0149FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF014BFFFF014CFFFF014DFFFF014EFFFF014FFFFF0150FFFF0151FFFF0152 +FFFF0153FFFF0154FFFF0155FFFF0156FFFF0157FFFF0158FFFF0159FFFF015AFFFF015BFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF015CFFFF015DFFFF015EFFFF015FFFFF0160FFFF0161FFFF0162FFFF0163FFFF0164FFFF0165FFFF0166 +FFFF0167FFFF0168FFFF0169FFFF016AFFFF016BFFFF016CFFFF016DFFFF016EFFFF016FFFFF0170FFFF0171FFFF0172 +FFFF0173FFFF0174FFFF0175FFFF0176017801770179FFFF017AFFFF017BFFFF017CFFFF017DFFFF017EFFFFFFFFFFFF +FFFF017FFFFF0180FFFF0181FFFF0182FFFF0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018A +FFFF018BFFFF018CFFFF018DFFFF018EFFFF018FFFFF0190FFFF0191FFFF0192FFFF0193FFFF0194FFFF0195FFFF0196 +FFFF0197FFFF0198FFFF0199FFFF019AFFFF019BFFFF019CFFFF019DFFFF019EFFFF019FFFFF01A0FFFF01A1FFFF01A2 +FFFF01A3FFFF01A4FFFF01A5FFFF01A6FFFF01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AE +01AFFFFF01B101B001B301B201B501B401B701B601B901B801BB01BA01BD01BC01BF01BE01C101C001C301C201C501C4 +01C701C601C901C801CB01CA01CD01CC01CF01CE01D101D001D301D2FFFF01D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D601D501D801D701DA01D901DC01DB +01DE01DD01E001DF01E201E101E401E301E601E501E801E701EA01E901EC01EB01EE01ED01F001EF01F201F101F401F3 +01F601F501F801F701FA01F901FBFFFFFFFFFFFFFFFFFFFF01FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01FE01FD020001FF02020201020402030206020502080207020A0209020C020B020E020D0210020F0212021102140213 +0216021502180217021A0219021C021B021E021D0220021F02220221022402230226022502280227022A0229022C022B +022E022D0230022F02320231023402330236023502380237023A0239023C023B023E023D0240023F0242024102440243 +0246024502480247024A0249024C024B024E024D0250024F02520251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0253FFFFFFFFFFFFFFFFFFFFFFFFFFFF025502540257025602590258025B025A +025D025C025F025E0261026002630262026502640267026602690268026B026A026D026C026F026E0271027002730272 +027502740277027602790278027B027A027D027CFFFF027E027FFFFF02810280FFFF0282FFFF0283FFFF0284FFFF0285 +FFFF0286FFFF0287FFFF0288FFFF0289FFFF028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291 +FFFF0292FFFF0293FFFF0294FFFF0295FFFF0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029D +FFFF029EFFFF029FFFFF02A0FFFF02A1FFFF02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9 +FFFF02AAFFFF02ABFFFF02ACFFFF02ADFFFF02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B2FFFF02B3FFFF02B4FFFF02B5 +FFFF02B6FFFF02B7FFFF02B8FFFF02B9FFFF02BAFFFF02BBFFFF02BCFFFF02BDFFFF02BEFFFF02BFFFFF02C0FFFF02C1 +FFFF02C2FFFF02C3FFFF02C4FFFF02C5FFFF02C6FFFF02C7FFFF02C8FFFF02C9FFFF02CAFFFF02CBFFFF02CCFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF02CDFFFF02CEFFFF02CFFFFF02D0FFFF02D1FFFF02D2FFFF02D3FFFF02D4FFFF02D5 +FFFF02D6FFFF02D7FFFF02D8FFFF02D9FFFF02DAFFFF02DBFFFF02DCFFFF02DDFFFF02DEFFFF02DFFFFF02E0FFFF02E1 +FFFF02E2FFFF02E3FFFF02E4FFFF02E5FFFF02E6FFFF02E7FFFF02E8FFFF02E9FFFF02EAFFFF02EBFFFF02ECFFFF02ED +FFFF02EEFFFF02EFFFFF02F0FFFF02F1FFFF02F2FFFF02F3FFFF02F4FFFF02F5FFFF02F6FFFF02F7FFFF02F8FFFF02F9 +FFFF02FAFFFF02FBFFFF02FCFFFF02FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FF02FE030103000303030203050304 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0307030603090308030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +030D030C030F030E0311031003130312FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031503140317031603190318031B031A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031D031C031F031E03210320FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0322FFFF0323FFFF0324FFFF0325FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0327032603290328032B032A032D032C +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +032F032E033103300333033203350334FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0337033603390338033B033A033D033C +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF033F033E034103400343034203450344FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0347034603490348FFFF034AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF034C034B034E034DFFFF034FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0351035003530352FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0355035403570356FFFF0358FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035A0359035C035BFFFF035DFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0361FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03630362036503640367036603690368036B036A036D036C036F036E03710370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0372FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF037403730376037503780377037A0379037C037B037E037D0380037F0382038103840383 +0386038503880387038A0389038C038BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF038E038D0390038F03920391039403930396039503980397039A0399039C039B +039E039D03A0039F03A203A103A403A303A603A503A803A703AA03A903AC03AB03AE03AD03B003AF03B203B103B403B3 +03B603B503B803B703BA03B903BC03BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03BD03BF03BEFFFF03C003C1FFFF03C2FFFF03C3FFFF03C4FFFF03C603C5 +FFFF03C7FFFF03C803C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03CB03CAFFFF03CCFFFF03CDFFFF03CEFFFF03CF +FFFF03D0FFFF03D1FFFF03D2FFFF03D3FFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF03D8FFFF03D9FFFF03DAFFFF03DB +FFFF03DCFFFF03DDFFFF03DEFFFF03DFFFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF03E4FFFF03E5FFFF03E6FFFF03E7 +FFFF03E8FFFF03E9FFFF03EAFFFF03EBFFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF03F3 +FFFF03F4FFFF03F5FFFF03F6FFFF03F7FFFF03F8FFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF03FDFFFFFFFFFFFFFFFF +FFFFFFFF03FEFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFF0400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0401FFFF0402FFFF0403FFFF0404FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF040BFFFF040C +FFFF040DFFFF040EFFFF040FFFFF0410FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF0417FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0418FFFF0419FFFF041AFFFF041B +FFFF041CFFFF041DFFFF041EFFFF041FFFFF0420FFFF0421FFFF0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0426FFFF0427FFFF0428 +FFFF0429FFFF042AFFFF042BFFFF042CFFFFFFFFFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433 +FFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFF043CFFFF043DFFFF043EFFFF043F +FFFF0440FFFF0441FFFF0442FFFF0443FFFF0444FFFF0445FFFF0446FFFF0447FFFF0448FFFF0449FFFF044AFFFF044B +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044CFFFF044DFFFF044EFFFFFFFF044FFFFF0450FFFF0451FFFF0452FFFF0453 +FFFFFFFF0454FFFF0455FFFFFFFFFFFFFFFF0456FFFF0457FFFFFFFFFFFF0458FFFF0459FFFF045AFFFF045BFFFF045C +FFFF045DFFFF045EFFFF045FFFFF0460FFFF04610463046204650464FFFF046604680467046A0469FFFF046BFFFF046C +FFFF046DFFFF046EFFFF046FFFFF0470FFFF0471FFFF047204740473047604750477FFFF0478FFFFFFFF0479FFFFFFFF +FFFF047AFFFFFFFFFFFFFFFFFFFF047BFFFF047CFFFF047DFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0480FFFF04820481048404830486048504880487048A0489048C048B048E048D +0490048F04920491049404930496049504980497FFFF0499FFFFFFFFFFFFFFFF049B049A049D049C049F049E04A104A0 +04A304A204A504A404A704A604A904A804AB04AA04AD04AC04AF04AE04B104B004B304B204B504B404B704B604B904B8 +04BB04BA04BD04BC04BF04BE04C104C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C304C204C504C404C704C604C904C804CB04CA04CD04CC04CF04CE04D104D0 +04D304D204D504D404D704D604D904D804DB04DA04DD04DC04DF04DE04E104E004E304E204E504E4FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E704E604E904E804EB04EA04ED04EC +04EF04EEFFFF04F004F204F104F404F304F604F504F804F704FA04F904FC04FB04FE04FDFFFF04FF0501050005030502 +05050504FFFF050605080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +050A0509050C050B050E050D0510050F05120511051405130516051505180517051A0519051C051B051E051D0520051F +05220521052405230526052505280527052A0529052C052B052E052D0530052F05320531053405330536053505380537 +053A0539FFFF053BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053D053C053F053E0541054005430542054505440547054605490548054B054A +054D054C054F054E05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05530552055505540557055605590558 +055B055A055D055C055F055E0561056005630562056505640567056605690568056B056A056D056C056F056E05710570 +05730572057505740577057605790578057B057A057D057C057F057E0581058005830582058505840587058605890588 +058B058A058D058C058F058E05910590FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05930592059505940597059605990598 +059B059A059D059C059F059E05A105A005A305A205A505A405A705A605A905A805AB05AA05AD05AC05AF05AE05B105B0 +05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10624 bytes +enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000004000000280", +x" +000001000000048000000FC0", +x" +020201000402030206020205070202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +0202020202020202020202020202020200010000000300020005000400070006000900080000000A000B0000000D000C +000F000E0011001000130012000000140000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000015000000000000000000000000000000000000000000000016000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000170018000000000019001B001A001D001C001F001E0021002000000000000000000022000000000023 +000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000260025002800270000002900000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000002A00000000002B002D002C002F002E00000000000000000000000000000000 +000000000000000000300000000000310000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000 +000000000000000000000000000000000000000000000000000000000000000000340033003500000000000000000036 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000037000000380000000000390000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000003A000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000003B0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000003D003C000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00020001000400030006000500080007000A0009000C000B000E000D +0010000F00120011001400130016001500180017FFFF0019FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001C001B001E001D0020001F00220021 +002400230026002500280027002A0029002C002B002E002D0030002FFFFF003100330032003500340037003600390038 +003AFFFF003BFFFF003CFFFF003DFFFF003EFFFF003FFFFF0040FFFF0041FFFF0042FFFF0043FFFF0044FFFF0045FFFF +0046FFFF0047FFFF0048FFFF0049FFFF004AFFFF004BFFFF004CFFFF004DFFFF004EFFFF004FFFFF0050FFFF0051FFFF +0052FFFF0053FFFF0054FFFF0055FFFFFFFFFFFFFFFF0056FFFF0057FFFF0058FFFF0059FFFF005AFFFF005BFFFF005C +FFFF005D005EFFFF005FFFFF0060FFFF0061FFFF0062FFFF0063FFFF0064FFFF0065FFFF0066FFFF0067FFFF0068FFFF +0069FFFF006AFFFF006BFFFF006CFFFF006DFFFF006EFFFF006FFFFF0070FFFF0071FFFF0072FFFF0073FFFF0074FFFF +FFFFFFFFFFFF0075FFFF007600780077FFFF0079007AFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007DFFFFFFFF +FFFFFFFFFFFF007E007FFFFFFFFFFFFF0080FFFF00820081FFFFFFFFFFFF00830084FFFF0085FFFF0086FFFFFFFFFFFF +FFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFFFFFFFFFF008AFFFF008B008CFFFFFFFFFFFF008DFFFF008EFFFF +FFFFFFFFFFFFFFFF0090008F009200910094009300960095FFFF0097FFFF0098FFFF0099FFFF009AFFFF009BFFFF009C +FFFF009DFFFF009E00A0009F00A1FFFF00A2FFFF00A3FFFF00A4FFFF00A5FFFF00A6FFFF00A7FFFF00A8FFFF00A9FFFF +00AAFFFF00AC00AB00ADFFFFFFFFFFFF00AEFFFF00AFFFFF00B0FFFF00B1FFFF00B2FFFF00B3FFFF00B4FFFF00B5FFFF +00B6FFFF00B7FFFF00B8FFFF00B9FFFF00BAFFFF00BBFFFF00BCFFFF00BDFFFF00BEFFFF00BFFFFF00C0FFFF00C1FFFF +FFFFFFFF00C2FFFF00C3FFFF00C4FFFF00C5FFFF00C6FFFF00C7FFFF00C8FFFF00C9FFFF00CAFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00CB00CCFFFFFFFF00CDFFFF00CEFFFFFFFF00CFFFFF00D0FFFF00D1FFFF00D2FFFF00D3FFFF +00D500D400D700D6FFFF00D800DA00D900DBFFFF00DCFFFFFFFF00DDFFFFFFFF00DF00DE00E0FFFF00E200E1FFFF00E3 +00E500E400E700E6FFFF00E800E9FFFF00EAFFFFFFFF00EB00ECFFFFFFFFFFFFFFFFFFFFFFFFFFFF00EDFFFFFFFFFFFF +FFFF00EE00F000EFFFFFFFFF00F1FFFF00F300F200F500F4FFFF00F6FFFFFFFFFFFFFFFFFFFF00F7FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00F8FFFFFFFF00F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FBFFFF00FCFFFFFFFFFFFF00FDFFFF +FFFFFFFF00FEFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF01020101010401030105FFFF0107010601090108010B010A010D010C010F010E0111011001130112 +011501140117011601190118011B011A011D011C011F011E01210120FFFF012201240123FFFFFFFF0125FFFF01270126 +0128FFFF0129FFFF012AFFFF012BFFFF012CFFFF012DFFFF012EFFFF012FFFFF0130FFFF0131FFFF0132FFFF0133FFFF +01350134013701360138FFFFFFFFFFFFFFFF0139013AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013C013B013E013D0140013F01420141 +014401430146014501480147014A0149014C014B014E014D0150014F01520151015401530156015501580157015A0159 +015C015B015E015D0160015F01620161016401630166016501680167016A0169016BFFFF016CFFFF016DFFFF016EFFFF +016FFFFF0170FFFF0171FFFF0172FFFF0173FFFF0174FFFF0175FFFF0176FFFF0177FFFF0178FFFF0179FFFF017AFFFF +017BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF017CFFFF017DFFFF017EFFFF017FFFFF0180FFFF0181FFFF0182FFFF +0183FFFF0184FFFF0185FFFF0186FFFF0187FFFF0188FFFF0189FFFF018AFFFF018BFFFF018CFFFF018DFFFF018EFFFF +018FFFFF0190FFFF0191FFFF0192FFFF0193FFFF0194FFFF0195FFFF0196FFFFFFFFFFFFFFFF0197FFFF0198FFFF0199 +FFFF019AFFFF019BFFFF019C019E019D019FFFFF01A0FFFF01A1FFFF01A2FFFF01A3FFFF01A4FFFF01A5FFFF01A6FFFF +01A7FFFF01A8FFFF01A9FFFF01AAFFFF01ABFFFF01ACFFFF01ADFFFF01AEFFFF01AFFFFF01B0FFFF01B1FFFF01B2FFFF +01B3FFFF01B4FFFF01B5FFFF01B6FFFF01B7FFFF01B8FFFF01B9FFFF01BAFFFF01BBFFFF01BCFFFF01BDFFFF01BEFFFF +01BFFFFF01C0FFFF01C1FFFF01C2FFFF01C3FFFF01C4FFFF01C5FFFF01C6FFFF01C7FFFF01C8FFFF01C9FFFF01CAFFFF +01CBFFFF01CCFFFF01CDFFFF01CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CFFFFF01D101D001D301D201D501D401D701D601D901D801DB01DA01DD01DC +01DF01DE01E101E001E301E201E501E401E701E601E901E801EB01EA01ED01EC01EF01EE01F101F001F301F2FFFF01F4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F601F501F801F701FA01F901FC01FB01FE01FD020001FF02020201020402030206020502080207020A0209020C020B +020E020D0210020F02120211021402130216021502180217021A0219021C021B021E021DFFFF021F0220FFFF02220221 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022402230226022502280227FFFFFFFF022A0229022C022B022E022D0230022F +FFFF0231FFFF0232FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFFFFFFFFFF0234FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0235FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0236FFFF0237FFFF0238FFFF0239FFFF +023AFFFF023BFFFF023CFFFF023DFFFF023EFFFF023FFFFF0240FFFF0241FFFF0242FFFF0243FFFF0244FFFF0245FFFF +0246FFFF0247FFFF0248FFFF0249FFFF024AFFFF024BFFFF024CFFFF024DFFFF024EFFFF024FFFFF0250FFFF0251FFFF +0252FFFF0253FFFF0254FFFF0255FFFF0256FFFF0257FFFF0258FFFF0259FFFF025AFFFF025BFFFF025CFFFF025DFFFF +025EFFFF025FFFFF0260FFFF0261FFFF0262FFFF0263FFFF0264FFFF0265FFFF0266FFFF0267FFFF0268FFFF0269FFFF +026AFFFF026BFFFF026CFFFF026DFFFF026EFFFF026FFFFF0270FFFF0271FFFF0272FFFF0273FFFF0274FFFF0275FFFF +0276FFFF0277FFFF0278FFFF0279FFFF027AFFFF027BFFFF027CFFFF027DFFFF027EFFFF027FFFFF0280FFFFFFFFFFFF +FFFFFFFF0281FFFFFFFFFFFFFFFFFFFF0282FFFF0283FFFF0284FFFF0285FFFF0286FFFF0287FFFF0288FFFF0289FFFF +028AFFFF028BFFFF028CFFFF028DFFFF028EFFFF028FFFFF0290FFFF0291FFFF0292FFFF0293FFFF0294FFFF0295FFFF +0296FFFF0297FFFF0298FFFF0299FFFF029AFFFF029BFFFF029CFFFF029DFFFF029EFFFF029FFFFF02A0FFFF02A1FFFF +02A2FFFF02A3FFFF02A4FFFF02A5FFFF02A6FFFF02A7FFFF02A8FFFF02A9FFFF02AAFFFF02ABFFFF02ACFFFF02ADFFFF +02AEFFFF02AFFFFF02B0FFFF02B1FFFF02B302B202B502B402B702B602B902B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02BB02BA02BD02BC02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C102C002C302C202C502C402C702C6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C902C802CB02CA02CD02CC02CF02CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02D102D002D302D202D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D6FFFF02D7FFFF02D8FFFF02D9FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DB02DA02DD02DC02DF02DE02E102E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E302E202E502E402E702E602E902E802EB02EA02ED02EC02EF02EEFFFFFFFF02F102F002F302F202F502F402F702F6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02F902F802FB02FA02FD02FC02FF02FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03010300030303020305030403070306FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03090308030AFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF030BFFFFFFFF030CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +030E030DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0310030FFFFFFFFF0311FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0312FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +031503140317031603190318031B031A031D031C031F031E0321032003230322FFFFFFFFFFFFFFFFFFFF0324FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0326032503280327032A0329032C032B032E032D0330032F03320331033403330336033503380337033A0339033C033B +033E033DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0340033F03420341034403430346034503480347034A0349034C034B034E034D0350034F035203510354035303560355 +03580357035A0359035C035B035E035D0360035F03620361036403630366036503680367036A0369036C036B036E036D +036FFFFFFFFFFFFF0370FFFFFFFF0371FFFF0372FFFF0373FFFF0374FFFFFFFFFFFFFFFF0375FFFFFFFFFFFFFFFF0376 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0377FFFF0378FFFF0379FFFF037AFFFF037BFFFF037CFFFF037DFFFF037EFFFF +037FFFFF0380FFFF0381FFFF0382FFFF0383FFFF0384FFFF0385FFFF0386FFFF0387FFFF0388FFFF0389FFFF038AFFFF +038BFFFF038CFFFF038DFFFF038EFFFF038FFFFF0390FFFF0391FFFF0392FFFF0393FFFF0394FFFF0395FFFF0396FFFF +0397FFFF0398FFFF0399FFFF039AFFFF039BFFFF039CFFFF039DFFFF039EFFFF039FFFFF03A0FFFF03A1FFFF03A2FFFF +03A3FFFF03A4FFFF03A5FFFF03A6FFFF03A7FFFF03A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A9FFFF03AA +FFFFFFFF03ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AD03AC03AF03AE03B103B003B303B2 +03B503B403B703B603B903B803BB03BA03BD03BC03BF03BE03C103C003C303C203C503C403C703C603C903C803CB03CA +03CD03CC03CF03CE03D103D003D2FFFFFFFFFFFFFFFFFFFF03D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D4FFFF03D5FFFF03D6FFFF03D7FFFF03D8FFFF03D9FFFF03DAFFFF03DBFFFF +03DCFFFF03DDFFFF03DEFFFF03DFFFFF03E0FFFF03E1FFFF03E2FFFF03E3FFFF03E4FFFF03E5FFFF03E6FFFF03E7FFFF +03E8FFFF03E9FFFF03EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03EBFFFF03ECFFFF03EDFFFF03EEFFFF03EFFFFF03F0FFFF03F1FFFF03F2FFFF03F3FFFF03F4FFFF03F5FFFF03F6FFFF +03F7FFFF03F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF03F9FFFF03FAFFFF03FBFFFF03FCFFFF03FDFFFF03FEFFFF03FFFFFFFFFFFFFF0400FFFF0401FFFF0402FFFF +0403FFFF0404FFFF0405FFFF0406FFFF0407FFFF0408FFFF0409FFFF040AFFFF040BFFFF040CFFFF040DFFFF040EFFFF +040FFFFF0410FFFF0411FFFF0412FFFF0413FFFF0414FFFF0415FFFF0416FFFF0417FFFF0418FFFF0419FFFF041AFFFF +041BFFFF041CFFFF041DFFFF041EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041FFFFF04200421FFFF +0422FFFF0423FFFF0424FFFF0425FFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFF0427FFFF0428FFFFFFFF0429042AFFFF +042BFFFF042CFFFF042DFFFF042EFFFF042FFFFF0430FFFF0431FFFF0432FFFF0433FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0434FFFF0435FFFF0436FFFF0437FFFF0438FFFF0439FFFF043AFFFF043BFFFFFFFFFFFFFFFFFFFF +FFFF043CFFFF043D043EFFFFFFFFFFFF043FFFFFFFFFFFFFFFFFFFFF0440FFFF0441FFFF0442FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0446044504480447044A0449044C044B044E044D0450044F0452045104540453 +0456045504580457045A0459045C045B045E045D0460045F04620461046404630466046504680467046A0469046C046B +046E046D0470046F04720471047404730476047504780477047A0479047C047B047E047D0480047F0482048104840483 +0486048504880487048A0489048C048B048E048D0490048F04920491049404930495FFFF0497049604990498049B049A +049D049C049F049E04A104A004A304A204A504A404A704A604A904A804AB04AA04AD04ACFFFF04AEFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04B004AF04B204B104B404B304B604B504B804B704BA04B904BC04BB04BE04BD04C004BF04C204C104C404C304C604C5 +04C804C704CA04C904CC04CB04CE04CD04D004CF04D204D104D404D304D604D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D804D704DA04D904DC04DB04DE04DD +04E004DF04E204E104E404E304E604E504E804E704EA04E904EC04EB04EE04ED04F004EF04F204F104F404F304F604F5 +04F804F704FA04F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF04FBFFFF04FD04FC04FF04FE0501050005030502050505040506FFFF05080507050A0509 +050C050B050E050D0510050F05120511051405130515FFFF0517051605190518051B051A051CFFFFFFFF051DFFFFFFFF +051F051E0521052005230522052505240527052605290528052B052A052D052C052F052E053105300533053205350534 +0537053605390538053B053A053D053C053F053E0541054005430542054505440547054605490548054B054A054D054C +054F054EFFFF0550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05520551055405530556055505580557 +055A0559055C055B055E055D0560055F056205610564056305660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05680567056A0569056C056B056E056D0570056F05720571057405730576057505780577057A0579057C057B057E057D +0580057F058205810584058305860585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05880587058A0589058C058B058E058D0590058F05920591059405930596059505980597059A0599059C059B059E059D +05A0059F05A205A105A405A305A605A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A705AA05A905AC05AB +05AE05AD05B005AF05B205B105B405B305B605B505B805B705BA05B905BC05BB05BE05BD05C005BF05C205C105C405C3 +05C605C505C805C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +immutable(uint)[] toUpperTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C +0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058 +000000590000005A0000039C000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8 +000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4 +000000D5000000D6000000D8000000D9000000DA000000DB000000DC000000DD000000DE000001780000010000000102 +0000010400000106000001080000010A0000010C0000010E00000110000001120000011400000116000001180000011A +0000011C0000011E00000120000001220000012400000126000001280000012A0000012C0000012E0000004900000132 +0000013400000136000001390000013B0000013D0000013F000001410000014300000145000001470000014A0000014C +0000014E00000150000001520000015400000156000001580000015A0000015C0000015E000001600000016200000164 +00000166000001680000016A0000016C0000016E00000170000001720000017400000176000001790000017B0000017D +00000053000002430000018200000184000001870000018B00000191000001F6000001980000023D0000A7DC00000220 +000001A0000001A2000001A4000001A7000001AC000001AF000001B3000001B5000001B8000001BC000001F7000001C4 +000001C4000001C7000001C7000001CA000001CA000001CD000001CF000001D1000001D3000001D5000001D7000001D9 +000001DB0000018E000001DE000001E0000001E2000001E4000001E6000001E8000001EA000001EC000001EE000001F1 +000001F1000001F4000001F8000001FA000001FC000001FE00000200000002020000020400000206000002080000020A +0000020C0000020E00000210000002120000021400000216000002180000021A0000021C0000021E0000022200000224 +00000226000002280000022A0000022C0000022E00000230000002320000023B00002C7E00002C7F0000024100000246 +000002480000024A0000024C0000024E00002C6F00002C6D00002C700000018100000186000001890000018A0000018F +000001900000A7AB000001930000A7AC000001940000A7CB0000A78D0000A7AA00000197000001960000A7AE00002C62 +0000A7AD0000019C00002C6E0000019D0000019F00002C64000001A60000A7C5000001A90000A7B1000001AE00000244 +000001B1000001B200000245000001B70000A7B20000A7B000000399000003700000037200000376000003FD000003FE +000003FF0000038600000388000003890000038A00000391000003920000039300000394000003950000039600000397 +00000398000003990000039A0000039B0000039C0000039D0000039E0000039F000003A0000003A1000003A3000003A3 +000003A4000003A5000003A6000003A7000003A8000003A9000003AA000003AB0000038C0000038E0000038F00000392 +00000398000003A6000003A0000003CF000003D8000003DA000003DC000003DE000003E0000003E2000003E4000003E6 +000003E8000003EA000003EC000003EE0000039A000003A1000003F90000037F00000395000003F7000003FA00000410 +0000041100000412000004130000041400000415000004160000041700000418000004190000041A0000041B0000041C +0000041D0000041E0000041F000004200000042100000422000004230000042400000425000004260000042700000428 +000004290000042A0000042B0000042C0000042D0000042E0000042F0000040000000401000004020000040300000404 +00000405000004060000040700000408000004090000040A0000040B0000040C0000040D0000040E0000040F00000460 +000004620000046400000466000004680000046A0000046C0000046E0000047000000472000004740000047600000478 +0000047A0000047C0000047E000004800000048A0000048C0000048E0000049000000492000004940000049600000498 +0000049A0000049C0000049E000004A0000004A2000004A4000004A6000004A8000004AA000004AC000004AE000004B0 +000004B2000004B4000004B6000004B8000004BA000004BC000004BE000004C1000004C3000004C5000004C7000004C9 +000004CB000004CD000004C0000004D0000004D2000004D4000004D6000004D8000004DA000004DC000004DE000004E0 +000004E2000004E4000004E6000004E8000004EA000004EC000004EE000004F0000004F2000004F4000004F6000004F8 +000004FA000004FC000004FE00000500000005020000050400000506000005080000050A0000050C0000050E00000510 +000005120000051400000516000005180000051A0000051C0000051E0000052000000522000005240000052600000528 +0000052A0000052C0000052E000005310000053200000533000005340000053500000536000005370000053800000539 +0000053A0000053B0000053C0000053D0000053E0000053F000005400000054100000542000005430000054400000545 +000005460000054700000548000005490000054A0000054B0000054C0000054D0000054E0000054F0000055000000551 +000005520000055300000554000005550000055600001C9000001C9100001C9200001C9300001C9400001C9500001C96 +00001C9700001C9800001C9900001C9A00001C9B00001C9C00001C9D00001C9E00001C9F00001CA000001CA100001CA2 +00001CA300001CA400001CA500001CA600001CA700001CA800001CA900001CAA00001CAB00001CAC00001CAD00001CAE +00001CAF00001CB000001CB100001CB200001CB300001CB400001CB500001CB600001CB700001CB800001CB900001CBA +00001CBD00001CBE00001CBF000013F0000013F1000013F2000013F3000013F4000013F500000412000004140000041E +0000042100000422000004220000042A000004620000A64A00001C890000A77D00002C630000A7C600001E0000001E02 +00001E0400001E0600001E0800001E0A00001E0C00001E0E00001E1000001E1200001E1400001E1600001E1800001E1A +00001E1C00001E1E00001E2000001E2200001E2400001E2600001E2800001E2A00001E2C00001E2E00001E3000001E32 +00001E3400001E3600001E3800001E3A00001E3C00001E3E00001E4000001E4200001E4400001E4600001E4800001E4A +00001E4C00001E4E00001E5000001E5200001E5400001E5600001E5800001E5A00001E5C00001E5E00001E6000001E62 +00001E6400001E6600001E6800001E6A00001E6C00001E6E00001E7000001E7200001E7400001E7600001E7800001E7A +00001E7C00001E7E00001E8000001E8200001E8400001E8600001E8800001E8A00001E8C00001E8E00001E9000001E92 +00001E9400001E6000001EA000001EA200001EA400001EA600001EA800001EAA00001EAC00001EAE00001EB000001EB2 +00001EB400001EB600001EB800001EBA00001EBC00001EBE00001EC000001EC200001EC400001EC600001EC800001ECA +00001ECC00001ECE00001ED000001ED200001ED400001ED600001ED800001EDA00001EDC00001EDE00001EE000001EE2 +00001EE400001EE600001EE800001EEA00001EEC00001EEE00001EF000001EF200001EF400001EF600001EF800001EFA +00001EFC00001EFE00001F0800001F0900001F0A00001F0B00001F0C00001F0D00001F0E00001F0F00001F1800001F19 +00001F1A00001F1B00001F1C00001F1D00001F2800001F2900001F2A00001F2B00001F2C00001F2D00001F2E00001F2F +00001F3800001F3900001F3A00001F3B00001F3C00001F3D00001F3E00001F3F00001F4800001F4900001F4A00001F4B +00001F4C00001F4D00001F5900001F5B00001F5D00001F5F00001F6800001F6900001F6A00001F6B00001F6C00001F6D +00001F6E00001F6F00001FBA00001FBB00001FC800001FC900001FCA00001FCB00001FDA00001FDB00001FF800001FF9 +00001FEA00001FEB00001FFA00001FFB00001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F +00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA00001FAB +00001FAC00001FAD00001FAE00001FAF00001FB800001FB900001FBC0000039900001FCC00001FD800001FD900001FE8 +00001FE900001FEC00001FFC000021320000216000002161000021620000216300002164000021650000216600002167 +00002168000021690000216A0000216B0000216C0000216D0000216E0000216F00002183000024B6000024B7000024B8 +000024B9000024BA000024BB000024BC000024BD000024BE000024BF000024C0000024C1000024C2000024C3000024C4 +000024C5000024C6000024C7000024C8000024C9000024CA000024CB000024CC000024CD000024CE000024CF00002C00 +00002C0100002C0200002C0300002C0400002C0500002C0600002C0700002C0800002C0900002C0A00002C0B00002C0C +00002C0D00002C0E00002C0F00002C1000002C1100002C1200002C1300002C1400002C1500002C1600002C1700002C18 +00002C1900002C1A00002C1B00002C1C00002C1D00002C1E00002C1F00002C2000002C2100002C2200002C2300002C24 +00002C2500002C2600002C2700002C2800002C2900002C2A00002C2B00002C2C00002C2D00002C2E00002C2F00002C60 +0000023A0000023E00002C6700002C6900002C6B00002C7200002C7500002C8000002C8200002C8400002C8600002C88 +00002C8A00002C8C00002C8E00002C9000002C9200002C9400002C9600002C9800002C9A00002C9C00002C9E00002CA0 +00002CA200002CA400002CA600002CA800002CAA00002CAC00002CAE00002CB000002CB200002CB400002CB600002CB8 +00002CBA00002CBC00002CBE00002CC000002CC200002CC400002CC600002CC800002CCA00002CCC00002CCE00002CD0 +00002CD200002CD400002CD600002CD800002CDA00002CDC00002CDE00002CE000002CE200002CEB00002CED00002CF2 +000010A0000010A1000010A2000010A3000010A4000010A5000010A6000010A7000010A8000010A9000010AA000010AB +000010AC000010AD000010AE000010AF000010B0000010B1000010B2000010B3000010B4000010B5000010B6000010B7 +000010B8000010B9000010BA000010BB000010BC000010BD000010BE000010BF000010C0000010C1000010C2000010C3 +000010C4000010C5000010C7000010CD0000A6400000A6420000A6440000A6460000A6480000A64A0000A64C0000A64E +0000A6500000A6520000A6540000A6560000A6580000A65A0000A65C0000A65E0000A6600000A6620000A6640000A666 +0000A6680000A66A0000A66C0000A6800000A6820000A6840000A6860000A6880000A68A0000A68C0000A68E0000A690 +0000A6920000A6940000A6960000A6980000A69A0000A7220000A7240000A7260000A7280000A72A0000A72C0000A72E +0000A7320000A7340000A7360000A7380000A73A0000A73C0000A73E0000A7400000A7420000A7440000A7460000A748 +0000A74A0000A74C0000A74E0000A7500000A7520000A7540000A7560000A7580000A75A0000A75C0000A75E0000A760 +0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782 +0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0 +0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2 +0000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2 +000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB000013AC000013AD000013AE +000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7000013B8000013B9000013BA +000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3000013C4000013C5000013C6 +000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF000013D0000013D1000013D2 +000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB000013DC000013DD000013DE +000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7000013E8000013E9000013EA +000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF240000FF250000FF260000FF27 +0000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF33 +0000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401000104020001040300010404 +00010405000104060001040700010408000104090001040A0001040B0001040C0001040D0001040E0001040F00010410 +0001041100010412000104130001041400010415000104160001041700010418000104190001041A0001041B0001041C +0001041D0001041E0001041F0001042000010421000104220001042300010424000104250001042600010427000104B0 +000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9000104BA000104BB000104BC +000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5000104C6000104C7000104C8 +000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1000104D2000104D300010570 +0001057100010572000105730001057400010575000105760001057700010578000105790001057A0001057C0001057D +0001057E0001057F00010580000105810001058200010583000105840001058500010586000105870001058800010589 +0001058A0001058C0001058D0001058E0001058F000105900001059100010592000105940001059500010C8000010C81 +00010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D +00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C9600010C9700010C9800010C99 +00010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA200010CA300010CA400010CA5 +00010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB1 +00010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D5700010D5800010D5900010D5A +00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D6300010D6400010D65000118A0 +000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9000118AA000118AB000118AC +000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5000118B6000118B7000118B8 +000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E4100016E4200016E4300016E44 +00016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E50 +00016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C +00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E908 +0001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E914 +0001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E920 +0001E92102000053000000530000013002000046000000460200004600000049020000460000004C0300004600000046 +0000004903000046000000460000004C0200005300000054020000530000005402000535000005520200054400000546 +0200054400000535020005440000053B0200054E00000546020005440000053D020002BC0000004E0300039900000308 +00000301030003A500000308000003010200004A0000030C02000048000003310200005400000308020000570000030A +020000590000030A02000041000002BE020003A500000313030003A50000031300000300030003A50000031300000301 +030003A50000031300000342020003910000034202000397000003420300039900000308000003000300039900000308 +000003010200039900000342030003990000030800000342030003A50000030800000300030003A50000030800000301 +020003A100000313020003A500000342030003A50000030800000342020003A90000034202001F080000039902001F09 +0000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F +0000039902001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D +0000039902001F0E0000039902001F0F0000039902001F280000039902001F290000039902001F2A0000039902001F2B +0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F0000039902001F280000039902001F29 +0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F +0000039902001F680000039902001F690000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D +0000039902001F6E0000039902001F6F0000039902001F680000039902001F690000039902001F6A0000039902001F6B +0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F00000399020003910000039902000391 +0000039902000397000003990200039700000399020003A900000399020003A90000039902001FBA0000039902000386 +0000039902001FCA00000399020003890000039902001FFA000003990200038F00000399030003910000034200000399 +030003970000034200000399030003A90000034200000399"; +return t; +} +immutable(uint)[] toLowerTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C +0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078 +000000790000007A000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9 +000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5 +000000F6000000F8000000F9000000FA000000FB000000FC000000FD000000FE00000101000001030000010500000107 +000001090000010B0000010D0000010F00000111000001130000011500000117000001190000011B0000011D0000011F +00000121000001230000012500000127000001290000012B0000012D0000012F00000069000001330000013500000137 +0000013A0000013C0000013E00000140000001420000014400000146000001480000014B0000014D0000014F00000151 +000001530000015500000157000001590000015B0000015D0000015F0000016100000163000001650000016700000169 +0000016B0000016D0000016F00000171000001730000017500000177000000FF0000017A0000017C0000017E00000253 +0000018300000185000002540000018800000256000002570000018C000001DD000002590000025B0000019200000260 +000002630000026900000268000001990000026F0000027200000275000001A1000001A3000001A500000280000001A8 +00000283000001AD00000288000001B00000028A0000028B000001B4000001B600000292000001B9000001BD000001C6 +000001C6000001C9000001C9000001CC000001CC000001CE000001D0000001D2000001D4000001D6000001D8000001DA +000001DC000001DF000001E1000001E3000001E5000001E7000001E9000001EB000001ED000001EF000001F3000001F3 +000001F500000195000001BF000001F9000001FB000001FD000001FF0000020100000203000002050000020700000209 +0000020B0000020D0000020F00000211000002130000021500000217000002190000021B0000021D0000021F0000019E +000002230000022500000227000002290000022B0000022D0000022F000002310000023300002C650000023C0000019A +00002C660000024200000180000002890000028C00000247000002490000024B0000024D0000024F0000037100000373 +00000377000003F3000003AC000003AD000003AE000003AF000003CC000003CD000003CE000003B1000003B2000003B3 +000003B4000003B5000003B6000003B7000003B8000003B9000003BA000003BB000003BC000003BD000003BE000003BF +000003C0000003C1000003C3000003C4000003C5000003C6000003C7000003C8000003C9000003CA000003CB000003D7 +000003D9000003DB000003DD000003DF000003E1000003E3000003E5000003E7000003E9000003EB000003ED000003EF +000003B8000003F8000003F2000003FB0000037B0000037C0000037D0000045000000451000004520000045300000454 +00000455000004560000045700000458000004590000045A0000045B0000045C0000045D0000045E0000045F00000430 +0000043100000432000004330000043400000435000004360000043700000438000004390000043A0000043B0000043C +0000043D0000043E0000043F000004400000044100000442000004430000044400000445000004460000044700000448 +000004490000044A0000044B0000044C0000044D0000044E0000044F0000046100000463000004650000046700000469 +0000046B0000046D0000046F00000471000004730000047500000477000004790000047B0000047D0000047F00000481 +0000048B0000048D0000048F00000491000004930000049500000497000004990000049B0000049D0000049F000004A1 +000004A3000004A5000004A7000004A9000004AB000004AD000004AF000004B1000004B3000004B5000004B7000004B9 +000004BB000004BD000004BF000004CF000004C2000004C4000004C6000004C8000004CA000004CC000004CE000004D1 +000004D3000004D5000004D7000004D9000004DB000004DD000004DF000004E1000004E3000004E5000004E7000004E9 +000004EB000004ED000004EF000004F1000004F3000004F5000004F7000004F9000004FB000004FD000004FF00000501 +000005030000050500000507000005090000050B0000050D0000050F0000051100000513000005150000051700000519 +0000051B0000051D0000051F00000521000005230000052500000527000005290000052B0000052D0000052F00000561 +00000562000005630000056400000565000005660000056700000568000005690000056A0000056B0000056C0000056D +0000056E0000056F00000570000005710000057200000573000005740000057500000576000005770000057800000579 +0000057A0000057B0000057C0000057D0000057E0000057F000005800000058100000582000005830000058400000585 +0000058600002D0000002D0100002D0200002D0300002D0400002D0500002D0600002D0700002D0800002D0900002D0A +00002D0B00002D0C00002D0D00002D0E00002D0F00002D1000002D1100002D1200002D1300002D1400002D1500002D16 +00002D1700002D1800002D1900002D1A00002D1B00002D1C00002D1D00002D1E00002D1F00002D2000002D2100002D22 +00002D2300002D2400002D2500002D2700002D2D0000AB700000AB710000AB720000AB730000AB740000AB750000AB76 +0000AB770000AB780000AB790000AB7A0000AB7B0000AB7C0000AB7D0000AB7E0000AB7F0000AB800000AB810000AB82 +0000AB830000AB840000AB850000AB860000AB870000AB880000AB890000AB8A0000AB8B0000AB8C0000AB8D0000AB8E +0000AB8F0000AB900000AB910000AB920000AB930000AB940000AB950000AB960000AB970000AB980000AB990000AB9A +0000AB9B0000AB9C0000AB9D0000AB9E0000AB9F0000ABA00000ABA10000ABA20000ABA30000ABA40000ABA50000ABA6 +0000ABA70000ABA80000ABA90000ABAA0000ABAB0000ABAC0000ABAD0000ABAE0000ABAF0000ABB00000ABB10000ABB2 +0000ABB30000ABB40000ABB50000ABB60000ABB70000ABB80000ABB90000ABBA0000ABBB0000ABBC0000ABBD0000ABBE +0000ABBF000013F8000013F9000013FA000013FB000013FC000013FD00001C8A000010D0000010D1000010D2000010D3 +000010D4000010D5000010D6000010D7000010D8000010D9000010DA000010DB000010DC000010DD000010DE000010DF +000010E0000010E1000010E2000010E3000010E4000010E5000010E6000010E7000010E8000010E9000010EA000010EB +000010EC000010ED000010EE000010EF000010F0000010F1000010F2000010F3000010F4000010F5000010F6000010F7 +000010F8000010F9000010FA000010FD000010FE000010FF00001E0100001E0300001E0500001E0700001E0900001E0B +00001E0D00001E0F00001E1100001E1300001E1500001E1700001E1900001E1B00001E1D00001E1F00001E2100001E23 +00001E2500001E2700001E2900001E2B00001E2D00001E2F00001E3100001E3300001E3500001E3700001E3900001E3B +00001E3D00001E3F00001E4100001E4300001E4500001E4700001E4900001E4B00001E4D00001E4F00001E5100001E53 +00001E5500001E5700001E5900001E5B00001E5D00001E5F00001E6100001E6300001E6500001E6700001E6900001E6B +00001E6D00001E6F00001E7100001E7300001E7500001E7700001E7900001E7B00001E7D00001E7F00001E8100001E83 +00001E8500001E8700001E8900001E8B00001E8D00001E8F00001E9100001E9300001E95000000DF00001EA100001EA3 +00001EA500001EA700001EA900001EAB00001EAD00001EAF00001EB100001EB300001EB500001EB700001EB900001EBB +00001EBD00001EBF00001EC100001EC300001EC500001EC700001EC900001ECB00001ECD00001ECF00001ED100001ED3 +00001ED500001ED700001ED900001EDB00001EDD00001EDF00001EE100001EE300001EE500001EE700001EE900001EEB +00001EED00001EEF00001EF100001EF300001EF500001EF700001EF900001EFB00001EFD00001EFF00001F0000001F01 +00001F0200001F0300001F0400001F0500001F0600001F0700001F1000001F1100001F1200001F1300001F1400001F15 +00001F2000001F2100001F2200001F2300001F2400001F2500001F2600001F2700001F3000001F3100001F3200001F33 +00001F3400001F3500001F3600001F3700001F4000001F4100001F4200001F4300001F4400001F4500001F5100001F53 +00001F5500001F5700001F6000001F6100001F6200001F6300001F6400001F6500001F6600001F6700001F8000001F81 +00001F8200001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F95 +00001F9600001F9700001FA000001FA100001FA200001FA300001FA400001FA500001FA600001FA700001FB000001FB1 +00001F7000001F7100001FB300001F7200001F7300001F7400001F7500001FC300001FD000001FD100001F7600001F77 +00001FE000001FE100001F7A00001F7B00001FE500001F7800001F7900001F7C00001F7D00001FF3000003C90000006B +000000E50000214E00002170000021710000217200002173000021740000217500002176000021770000217800002179 +0000217A0000217B0000217C0000217D0000217E0000217F00002184000024D0000024D1000024D2000024D3000024D4 +000024D5000024D6000024D7000024D8000024D9000024DA000024DB000024DC000024DD000024DE000024DF000024E0 +000024E1000024E2000024E3000024E4000024E5000024E6000024E7000024E8000024E900002C3000002C3100002C32 +00002C3300002C3400002C3500002C3600002C3700002C3800002C3900002C3A00002C3B00002C3C00002C3D00002C3E +00002C3F00002C4000002C4100002C4200002C4300002C4400002C4500002C4600002C4700002C4800002C4900002C4A +00002C4B00002C4C00002C4D00002C4E00002C4F00002C5000002C5100002C5200002C5300002C5400002C5500002C56 +00002C5700002C5800002C5900002C5A00002C5B00002C5C00002C5D00002C5E00002C5F00002C610000026B00001D7D +0000027D00002C6800002C6A00002C6C0000025100000271000002500000025200002C7300002C760000023F00000240 +00002C8100002C8300002C8500002C8700002C8900002C8B00002C8D00002C8F00002C9100002C9300002C9500002C97 +00002C9900002C9B00002C9D00002C9F00002CA100002CA300002CA500002CA700002CA900002CAB00002CAD00002CAF +00002CB100002CB300002CB500002CB700002CB900002CBB00002CBD00002CBF00002CC100002CC300002CC500002CC7 +00002CC900002CCB00002CCD00002CCF00002CD100002CD300002CD500002CD700002CD900002CDB00002CDD00002CDF +00002CE100002CE300002CEC00002CEE00002CF30000A6410000A6430000A6450000A6470000A6490000A64B0000A64D +0000A64F0000A6510000A6530000A6550000A6570000A6590000A65B0000A65D0000A65F0000A6610000A6630000A665 +0000A6670000A6690000A66B0000A66D0000A6810000A6830000A6850000A6870000A6890000A68B0000A68D0000A68F +0000A6910000A6930000A6950000A6970000A6990000A69B0000A7230000A7250000A7270000A7290000A72B0000A72D +0000A72F0000A7330000A7350000A7370000A7390000A73B0000A73D0000A73F0000A7410000A7430000A7450000A747 +0000A7490000A74B0000A74D0000A74F0000A7510000A7530000A7550000A7570000A7590000A75B0000A75D0000A75F +0000A7610000A7630000A7650000A7670000A7690000A76B0000A76D0000A76F0000A77A0000A77C00001D790000A77F +0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D +0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E +000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794 +0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7D10000A7D70000A7D90000A7DB0000019B0000A7F6 +0000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF490000FF4A0000FF4B0000FF4C +0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF550000FF560000FF570000FF58 +0000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E0001042F0001043000010431 +00010432000104330001043400010435000104360001043700010438000104390001043A0001043B0001043C0001043D +0001043E0001043F00010440000104410001044200010443000104440001044500010446000104470001044800010449 +0001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA000104DB000104DC000104DD +000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6000104E7000104E8000104E9 +000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2000104F3000104F4000104F5 +000104F6000104F7000104F8000104F9000104FA000104FB0001059700010598000105990001059A0001059B0001059C +0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6000105A7000105A8000105A9 +000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3000105B4000105B5000105B6 +000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC300010CC400010CC500010CC6 +00010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF00010CD000010CD100010CD2 +00010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB00010CDC00010CDD00010CDE +00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE700010CE800010CE900010CEA +00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D7000010D7100010D7200010D73 +00010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C00010D7D00010D7E00010D7F +00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2000118C3000118C4000118C5 +000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE000118CF000118D0000118D1 +000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA000118DB000118DC000118DD +000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E6600016E6700016E6800016E69 +00016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E7200016E7300016E7400016E75 +00016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E00016E7F0001E9220001E923 +0001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B0001E92C0001E92D0001E92E0001E92F +0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E9370001E9380001E9390001E93A0001E93B +0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943000000DF02000069000003070000FB00 +0000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB130000FB140000FB150000FB160000FB17 +0000014900000390000003B0000001F000001E9600001E9700001E9800001E9900001E9A00001F5000001F5200001F54 +00001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE200001FE300001FE400001FE600001FE7 +00001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F8000001F8100001F82 +00001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F9500001F96 +00001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F9600001F9700001FA000001FA100001FA2 +00001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA200001FA300001FA400001FA500001FA6 +00001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB200001FB400001FC200001FC400001FF2 +00001FF400001FB700001FC700001FF7"; +return t; +} +immutable(uint)[] toTitleTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C +0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058 +000000590000005A0000039C000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8 +000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4 +000000D5000000D6000000D8000000D9000000DA000000DB000000DC000000DD000000DE000001780000010000000102 +0000010400000106000001080000010A0000010C0000010E00000110000001120000011400000116000001180000011A +0000011C0000011E00000120000001220000012400000126000001280000012A0000012C0000012E0000004900000132 +0000013400000136000001390000013B0000013D0000013F000001410000014300000145000001470000014A0000014C +0000014E00000150000001520000015400000156000001580000015A0000015C0000015E000001600000016200000164 +00000166000001680000016A0000016C0000016E00000170000001720000017400000176000001790000017B0000017D +00000053000002430000018200000184000001870000018B00000191000001F6000001980000023D0000A7DC00000220 +000001A0000001A2000001A4000001A7000001AC000001AF000001B3000001B5000001B8000001BC000001F7000001C5 +000001C5000001C5000001C8000001C8000001C8000001CB000001CB000001CB000001CD000001CF000001D1000001D3 +000001D5000001D7000001D9000001DB0000018E000001DE000001E0000001E2000001E4000001E6000001E8000001EA +000001EC000001EE000001F2000001F2000001F2000001F4000001F8000001FA000001FC000001FE0000020000000202 +0000020400000206000002080000020A0000020C0000020E00000210000002120000021400000216000002180000021A +0000021C0000021E000002220000022400000226000002280000022A0000022C0000022E00000230000002320000023B +00002C7E00002C7F0000024100000246000002480000024A0000024C0000024E00002C6F00002C6D00002C7000000181 +00000186000001890000018A0000018F000001900000A7AB000001930000A7AC000001940000A7CB0000A78D0000A7AA +00000197000001960000A7AE00002C620000A7AD0000019C00002C6E0000019D0000019F00002C64000001A60000A7C5 +000001A90000A7B1000001AE00000244000001B1000001B200000245000001B70000A7B20000A7B00000039900000370 +0000037200000376000003FD000003FE000003FF0000038600000388000003890000038A000003910000039200000393 +0000039400000395000003960000039700000398000003990000039A0000039B0000039C0000039D0000039E0000039F +000003A0000003A1000003A3000003A3000003A4000003A5000003A6000003A7000003A8000003A9000003AA000003AB +0000038C0000038E0000038F0000039200000398000003A6000003A0000003CF000003D8000003DA000003DC000003DE +000003E0000003E2000003E4000003E6000003E8000003EA000003EC000003EE0000039A000003A1000003F90000037F +00000395000003F7000003FA000004100000041100000412000004130000041400000415000004160000041700000418 +000004190000041A0000041B0000041C0000041D0000041E0000041F0000042000000421000004220000042300000424 +00000425000004260000042700000428000004290000042A0000042B0000042C0000042D0000042E0000042F00000400 +0000040100000402000004030000040400000405000004060000040700000408000004090000040A0000040B0000040C +0000040D0000040E0000040F00000460000004620000046400000466000004680000046A0000046C0000046E00000470 +000004720000047400000476000004780000047A0000047C0000047E000004800000048A0000048C0000048E00000490 +000004920000049400000496000004980000049A0000049C0000049E000004A0000004A2000004A4000004A6000004A8 +000004AA000004AC000004AE000004B0000004B2000004B4000004B6000004B8000004BA000004BC000004BE000004C1 +000004C3000004C5000004C7000004C9000004CB000004CD000004C0000004D0000004D2000004D4000004D6000004D8 +000004DA000004DC000004DE000004E0000004E2000004E4000004E6000004E8000004EA000004EC000004EE000004F0 +000004F2000004F4000004F6000004F8000004FA000004FC000004FE0000050000000502000005040000050600000508 +0000050A0000050C0000050E00000510000005120000051400000516000005180000051A0000051C0000051E00000520 +000005220000052400000526000005280000052A0000052C0000052E0000053100000532000005330000053400000535 +000005360000053700000538000005390000053A0000053B0000053C0000053D0000053E0000053F0000054000000541 +00000542000005430000054400000545000005460000054700000548000005490000054A0000054B0000054C0000054D +0000054E0000054F00000550000005510000055200000553000005540000055500000556000010D0000010D1000010D2 +000010D3000010D4000010D5000010D6000010D7000010D8000010D9000010DA000010DB000010DC000010DD000010DE +000010DF000010E0000010E1000010E2000010E3000010E4000010E5000010E6000010E7000010E8000010E9000010EA +000010EB000010EC000010ED000010EE000010EF000010F0000010F1000010F2000010F3000010F4000010F5000010F6 +000010F7000010F8000010F9000010FA000010FD000010FE000010FF000013F0000013F1000013F2000013F3000013F4 +000013F500000412000004140000041E0000042100000422000004220000042A000004620000A64A00001C890000A77D +00002C630000A7C600001E0000001E0200001E0400001E0600001E0800001E0A00001E0C00001E0E00001E1000001E12 +00001E1400001E1600001E1800001E1A00001E1C00001E1E00001E2000001E2200001E2400001E2600001E2800001E2A +00001E2C00001E2E00001E3000001E3200001E3400001E3600001E3800001E3A00001E3C00001E3E00001E4000001E42 +00001E4400001E4600001E4800001E4A00001E4C00001E4E00001E5000001E5200001E5400001E5600001E5800001E5A +00001E5C00001E5E00001E6000001E6200001E6400001E6600001E6800001E6A00001E6C00001E6E00001E7000001E72 +00001E7400001E7600001E7800001E7A00001E7C00001E7E00001E8000001E8200001E8400001E8600001E8800001E8A +00001E8C00001E8E00001E9000001E9200001E9400001E6000001EA000001EA200001EA400001EA600001EA800001EAA +00001EAC00001EAE00001EB000001EB200001EB400001EB600001EB800001EBA00001EBC00001EBE00001EC000001EC2 +00001EC400001EC600001EC800001ECA00001ECC00001ECE00001ED000001ED200001ED400001ED600001ED800001EDA +00001EDC00001EDE00001EE000001EE200001EE400001EE600001EE800001EEA00001EEC00001EEE00001EF000001EF2 +00001EF400001EF600001EF800001EFA00001EFC00001EFE00001F0800001F0900001F0A00001F0B00001F0C00001F0D +00001F0E00001F0F00001F1800001F1900001F1A00001F1B00001F1C00001F1D00001F2800001F2900001F2A00001F2B +00001F2C00001F2D00001F2E00001F2F00001F3800001F3900001F3A00001F3B00001F3C00001F3D00001F3E00001F3F +00001F4800001F4900001F4A00001F4B00001F4C00001F4D00001F5900001F5B00001F5D00001F5F00001F6800001F69 +00001F6A00001F6B00001F6C00001F6D00001F6E00001F6F00001FBA00001FBB00001FC800001FC900001FCA00001FCB +00001FDA00001FDB00001FF800001FF900001FEA00001FEB00001FFA00001FFB00001F8800001F8900001F8A00001F8B +00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F +00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE00001FAF00001FB800001FB900001FBC00000399 +00001FCC00001FD800001FD900001FE800001FE900001FEC00001FFC0000213200002160000021610000216200002163 +0000216400002165000021660000216700002168000021690000216A0000216B0000216C0000216D0000216E0000216F +00002183000024B6000024B7000024B8000024B9000024BA000024BB000024BC000024BD000024BE000024BF000024C0 +000024C1000024C2000024C3000024C4000024C5000024C6000024C7000024C8000024C9000024CA000024CB000024CC +000024CD000024CE000024CF00002C0000002C0100002C0200002C0300002C0400002C0500002C0600002C0700002C08 +00002C0900002C0A00002C0B00002C0C00002C0D00002C0E00002C0F00002C1000002C1100002C1200002C1300002C14 +00002C1500002C1600002C1700002C1800002C1900002C1A00002C1B00002C1C00002C1D00002C1E00002C1F00002C20 +00002C2100002C2200002C2300002C2400002C2500002C2600002C2700002C2800002C2900002C2A00002C2B00002C2C +00002C2D00002C2E00002C2F00002C600000023A0000023E00002C6700002C6900002C6B00002C7200002C7500002C80 +00002C8200002C8400002C8600002C8800002C8A00002C8C00002C8E00002C9000002C9200002C9400002C9600002C98 +00002C9A00002C9C00002C9E00002CA000002CA200002CA400002CA600002CA800002CAA00002CAC00002CAE00002CB0 +00002CB200002CB400002CB600002CB800002CBA00002CBC00002CBE00002CC000002CC200002CC400002CC600002CC8 +00002CCA00002CCC00002CCE00002CD000002CD200002CD400002CD600002CD800002CDA00002CDC00002CDE00002CE0 +00002CE200002CEB00002CED00002CF2000010A0000010A1000010A2000010A3000010A4000010A5000010A6000010A7 +000010A8000010A9000010AA000010AB000010AC000010AD000010AE000010AF000010B0000010B1000010B2000010B3 +000010B4000010B5000010B6000010B7000010B8000010B9000010BA000010BB000010BC000010BD000010BE000010BF +000010C0000010C1000010C2000010C3000010C4000010C5000010C7000010CD0000A6400000A6420000A6440000A646 +0000A6480000A64A0000A64C0000A64E0000A6500000A6520000A6540000A6560000A6580000A65A0000A65C0000A65E +0000A6600000A6620000A6640000A6660000A6680000A66A0000A66C0000A6800000A6820000A6840000A6860000A688 +0000A68A0000A68C0000A68E0000A6900000A6920000A6940000A6960000A6980000A69A0000A7220000A7240000A726 +0000A7280000A72A0000A72C0000A72E0000A7320000A7340000A7360000A7380000A73A0000A73C0000A73E0000A740 +0000A7420000A7440000A7460000A7480000A74A0000A74C0000A74E0000A7500000A7520000A7540000A7560000A758 +0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779 +0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798 +0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA +0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F5 +0000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA +000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6 +000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2 +000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE +000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA +000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6 +000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF23 +0000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F +0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A00010400 +0001040100010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C +0001040D0001040E0001040F000104100001041100010412000104130001041400010415000104160001041700010418 +000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421000104220001042300010424 +000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8 +000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4 +000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0 +000104D1000104D2000104D3000105700001057100010572000105730001057400010575000105760001057700010578 +000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582000105830001058400010585 +000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F000105900001059100010592 +000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C89 +00010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C95 +00010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA1 +00010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD +00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D56 +00010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D62 +00010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8 +000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4 +000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E40 +00016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C +00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E58 +00016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E904 +0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910 +0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C +0001E91D0001E91E0001E91F0001E9200001E92102000053000000730000013002000046000000660200004600000069 +020000460000006C03000046000000660000006903000046000000660000006C02000053000000740200005300000074 +020005350000058202000544000005760200054400000565020005440000056B0200054E00000576020005440000056D +020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331 +0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313 +00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399 +00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308 +00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9 +0000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F8800001F8900001F8A +00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E +00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA +00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE +00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA00000345020003860000034502001FCA +00000345020003890000034502001FFA000003450200038F000003450300039100000342000003450300039700000342 +00000345030003A90000034200000345"; +return t; } } @@ -3083,49 +5414,3080 @@ _IUA toTitleTable() nothrow @nogc @safe pure { static _IUA t = [ 0x41, 0x42, 0 static if (size_t.sizeof == 8) { -//2080 bytes -enum lowerCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x70], [ 0x100, 0x140, 0x2500], [ 0x402030202020100, 0x807020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x6000600050004, 0x6000600060006, 0x6000600060006, 0x8000600060007, 0x6000600060006, 0x6000600060006, 0xc000b000a0009, 0x60006000e000d, 0x600060006000f, 0x6000600060006, 0x6000600110010, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x13001200060006, 0x14000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x15000600060006, 0x16000600060006, 0x6000600060006, 0x19000600180017, 0x6000600060006, 0x600060006001a, 0x6000600060006, 0x6000600060006, 0x600060006001b, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6001c00060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x20001f001e001d, 0x6000600060006, 0x21000600060006, 0x6000600060022, 0x6000600060006, 0x6000600230006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x0, 0x7fffffe00000000, 0x420040000000000, 0xff7fffff80000000, 0x55aaaaaaaaaaaaaa, 0xd4aaaaaaaaaaab55, 0xe6512d2a4e243129, 0xaa29aaaab5555240, 0x93faaaaaaaaaaaaa, 0xffffffffffffaa85, 0x1ffffffffefffff, 0x1f00000003, 0x0, 0x3c8a000000000020, 0xfffff00000010000, 0x192faaaaaae37fff, 0xffff000000000000, 0xaaaaaaaaffffffff, 0xaaaaaaaaaaaaa802, 0xaaaaaaaaaaaad554, 0xaaaaaaaaaaaa, 0xffffffff00000000, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7ffffffffff0000, 0x0, 0x0, 0x0, 0x3f00000000000000, 0x0, 0x0, 0x1ff, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaabfeaaaaa, 0xaaaaaaaaaaaaaaaa, 0xff00ff003f00ff, 0x3fff00ff00ff003f, 0x40df00ff00ff00ff, 0xdc00ff00cf00dc, 0x0, 0x8002000000000000, 0x1fff0000, 0x0, 0x321080000008c400, 0xffff0000000043c0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3ffffff0000, 0xffff000000000000, 0x3fda1562ffffffff, 0xaaaaaaaaaaaaaaaa, 0x8501aaaaaaaaa, 0x20bfffffffff, 0x0, 0x0, 0x0, 0x0, 0x2aaaaaaaaaaa, 0x3aaaaaaa, 0x0, 0xaaabaaa800000000, 0x95ffaaaaaaaaaaaa, 0xaaa082aaaaba50aa, 0x75c000002aa050a, 0xffff000000000000, 0xffff03fff7ffffff, 0xffffffffffffffff, 0x0, 0xf8007f, 0x0, 0x0, 0x0, 0x0, 0x7fffffe, 0x0, 0x0, 0xffffff0000000000, 0xffff, 0x0, 0xfffffffff000000, 0x0, 0x0, 0x1bfbfffbff800000, 0x0, 0x0, 0x0, 0x7fdffffffffffb9, 0x0, 0x0, 0x0, 0x0, 0x7ffffffffffff, 0x0, 0x0, 0x0, 0xffffffff, 0x0, 0xffffffff00000000, 0x0, 0x0, 0xffffffc000000, 0xffffdfc000, 0xebc000000ffffffc, 0xfffffc000000ffef, 0xffffffc000000f, 0xffffffc0000, 0xfc000000ffffffc0, 0xffffc000000fffff, 0xffffffc000000ff, 0xffffffc00000, 0x3ffffffc00, 0xf0000003f7fffffc, 0xffc000000fdfffff, 0xffff0000003f7fff, 0xfffffc000000fdff, 0xbf7, 0x7e07ffffbff, 0x0, 0x0, 0x0, 0xffff000000000000, 0x3fffffffffff, 0x0, 0x0, 0xfffffffc00000000, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//1856 bytes -enum upperCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x70], [ 0x100, 0x140, 0x1e00], [ 0x402030202020100, 0x807020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x6000600050004, 0x6000600060006, 0x6000600060006, 0x8000600060007, 0x6000600060006, 0x6000600060006, 0xb000a00060009, 0x60006000c0006, 0x600060006000d, 0x6000600060006, 0x600060006000e, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x10000f00060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x11000600060006, 0x6000600060006, 0x6000600130012, 0x6000600060006, 0x6000600060014, 0x6000600060006, 0x6000600060006, 0x6000600060015, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6001600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x1a001900180017, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x60006001b0006, 0x6000600060006, 0x60006001c0006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x6000600060006, 0x0, 0x7fffffe, 0x0, 0x7f7fffff, 0xaa55555555555555, 0x2b555555555554aa, 0x11aed2d5b1dbced6, 0x55d255554aaaa490, 0x6c05555555555555, 0x557a, 0x0, 0x0, 0x0, 0x8045000000000000, 0xffbfffed740, 0xe6905555551c8000, 0xffffffffffff, 0x5555555500000000, 0x5555555555555401, 0x5555555555552aab, 0xfffe555555555555, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff00000000, 0x20bf, 0x0, 0x0, 0xffffffff00000000, 0x3fffffffffffff, 0x0, 0x0, 0xe7ffffffffff0000, 0x0, 0x5555555555555555, 0x5555555555555555, 0x5555555540155555, 0x5555555555555555, 0xff00ff003f00ff00, 0xff00aa003f00, 0xf00000000000000, 0xf001f000f000f00, 0xc00f3d503e273884, 0xffff00000020, 0x8, 0x0, 0x0, 0x0, 0xffc0000000000000, 0xffff, 0xffffffffffff, 0xc025ea9d00000000, 0x5555555555555555, 0x4280555555555, 0x0, 0x155555555555, 0x5555555, 0x0, 0x5554555400000000, 0x6a00555555555555, 0x555f7d5555452855, 0x200000014102f5, 0x7fffffe00000000, 0x0, 0x0, 0x0, 0xffffffffff, 0x0, 0xffff000000000000, 0xfffff, 0x0, 0xf7ff000000000000, 0x37f7ff, 0x0, 0x0, 0x0, 0x7ffffffffffff, 0x0, 0x0, 0x0, 0xffffffff00000000, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0xfff0000003ffffff, 0xffffff0000003fff, 0x3fde64d0000003, 0x3ffffff0000, 0x7b0000001fdfe7b0, 0xfffff0000001fc5f, 0x3ffffff0000003f, 0x3ffffff00000, 0xf0000003ffffff00, 0xffff0000003fffff, 0xffffff00000003ff, 0x7fffffc00000001, 0x1ffffff0000000, 0x7fffffc00000, 0x1ffffff0000, 0x400, 0x3ffffffff, 0x0, 0x0, 0x0, 0xffff000000000000, 0xffff03ffffff03ff, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0]); -//11520 bytes -enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0x1180], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16001500000000, 0x0, 0x0, 0x18001700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1900000000, 0x1b001a0000, 0x1f001e001d001c, 0x23002200210020, 0x0, 0x2600250024, 0x0, 0x0, 0x28002700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c002b002a0029, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f002e0000, 0x33003200310030, 0x0, 0x0, 0x0, 0x3500340000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x370036, 0x0, 0x0, 0x0, 0x0, 0x3b003a00390038, 0x3d003c0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f003e00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x41004000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x420000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x440043, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x8e100800919ffff, 0x90700bd031905f9, 0xb25006b09cc0b94, 0xacc00e0082206c5, 0x5cf059204650834, 0x19301800a2d0783, 0xffff02f904d7051c, 0xffffffffffffffff, 0x8e20081091affff, 0x90800be031a05fa, 0xb26006c09cd0b95, 0xacd00e1082306c6, 0x5d0059304660835, 0x19401810a2e0784, 0xffff02fa04d8051d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0961ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x852011805ac0779, 0x3d9025709b70ad2, 0xb470128038d0557, 0x315004703950629, 0x29f008608d905f1, 0xffff00cb0589070f, 0x4f90213097e0adc, 0x8eb0a3f087c06ff, 0x853011905ad077a, 0x3da025809b80ad3, 0xb480129038e0558, 0x31600480396062a, 0x2a0008708da05f2, 0xffff00cc058a0710, 0x4fa0214097f0add, 0x36a0a40087d0700, 0x4ca04c909d909d8, 0xb520b5101cd01cc, 0x730072f020001ff, 0x8ab08aa00ce00cd, 0x6120611005c005b, 0x61e061d00520051, 0x661066002b202b1, 0x7ff07fe015a0159, 0x7e507e40b830b82, 0xa5c0a5b04bc04bb, 0x591059001b401b3, 0x9690968021c021b, 0x8750874ffffffff, 0x31c031b09350934, 0x6fb00950094ffff, 0x818008f008e06fc, 0x7c80b2b0b2a0819, 0xa1d0121012007c9, 0x4da04d9ffff0a1e, 0xb600b5f07c307c2, 0x162016106bb06ba, 0x2aa02a906810680, 0xd000c06080607, 0x70006f063f063e, 0xd200d108370836, 0x1df01de07260725, 0x1a201a10b7b0b7a, 0xa4c0a4b04c404c3, 0x564056307cd07cc, 0x9f509f409730972, 0x2106240623036b, 0x5d105fc05fb0022, 0xb120b110686068f, 0x2750524026a0269, 0x1af07f80b330276, 0xabc0767ffff01b0, 0x51e08b108b00a41, 0x98c0b030229027b, 0xffff04c700970096, 0x32b00d308e700aa, 0x62c062b00190018, 0x3cd055101050104, 0xffffffff09a203ce, 0x75707ec01690168, 0x52a077d01a70758, 0xaba03020301052b, 0xffffffff02560255, 0x1adffff091c091b, 0xffffffffffffffff, 0x5de092709260925, 0xadf0ade05e005df, 0x79604fc04fb0ae0, 0x7690a580a570797, 0xa7a0440043f076a, 0x54f02fe02fd0a7b, 0xb4e0b4d07680550, 0x16b016a06530652, 0x2c002bf05f805f7, 0xf200f106450644, 0x56e056d06a706a6, 0xab60ab50ab4ffff, 0x1ae022a07460745, 0x1eb01ea0b680b67, 0x96d096c04180417, 0x59d059c083d083c, 0x8ba08b9093c093b, 0x894089303ac03ab, 0x41a04190b0c0b0b, 0xa890a8804090408, 0x52f052e02b402b3, 0x7ef07ee016d016c, 0x847084605b505b4, 0x6cc06cbffff00d4, 0xb7d0b7c00640063, 0x73c073b00c200c1, 0x886088500790078, 0x6f306f205780577, 0xffffffffffffffff, 0x7940a08ffffffff, 0x95907bc04c80795, 0x690014c014b028b, 0x9d109d002d3041b, 0x324032309220921, 0x9f109f00950094f, 0x687021d0b190400, 0x7f90b34ffff0525, 0xa42ffff0abdffff, 0xffffffffffff093d, 0x27cffff0b28051f, 0xffff00b50b70ffff, 0x63a00f90b04098d, 0xabffffffff0986, 0xffff08e8059effff, 0xffffffff032cffff, 0xffffffffffffffff, 0xffffffff0031ffff, 0x9a30514ffff0552, 0x350ffffffffffff, 0x77e01a8041c07ed, 0xffffffffffff02d4, 0xffff0abbffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff070d0092ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff096effff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1cf01ce04a304a2, 0x1f601f5ffffffff, 0xa31ffffffffffff, 0x382ffff086a0122, 0xffffffffffffffff, 0xffff0299ffffffff, 0xffff00eb082406d5, 0x9c60b9affff07f0, 0x17c04ac04b1ffff, 0x16601d20ab70a11, 0xb010b2c096f0598, 0x1060399081a0962, 0x688ffff062d0b6d, 0xac03450605032d, 0x9a084806f808f9, 0xec082506d6029a, 0x17d04ad04b2ffff, 0x16701d30ab80a12, 0xb020b2d09700599, 0x107039a081b0963, 0x68a0689062e0b6e, 0xad03460606032e, 0x9b084906f908fa, 0x97409c70b9b07f1, 0xffffffff059a04ae, 0x9750b6f0347ffff, 0x4a704a6018c018b, 0x85b085a0a830a82, 0x98509840580057f, 0x3ba03b909db09da, 0x8be08bd02f602f5, 0x363036204480447, 0x38301d6062f0b2e, 0xa7effff0ab9059b, 0x5d905d801d70a7f, 0x86b01230a32ffff, 0x96a0291051804ef, 0x5aa0090098a0aef, 0x8f300a008f506fd, 0x38f009c031d05ed, 0x3bf053e0b3f071d, 0xab0027d03d106e5, 0x4b5012608660a86, 0x1b90a0e07a80808, 0x2df0a6d050f07ea, 0x15b02450ac809a0, 0xb55093606620579, 0x5303c1061f09ea, 0x3c0053f0b40071e, 0xab1027e03d206e6, 0x4b6012708670a87, 0x1ba0a0f07a90809, 0x2e00a6e051007eb, 0x15c02460ac909a1, 0xb5609370663057a, 0x5403c2062009eb, 0x96b0292051904f0, 0x5ab0091098b0af0, 0x8f400a108f606fe, 0x390009d031e05ee, 0x5cb05ca0a9d0a9c, 0xb440b4302440243, 0x3e403e301fa01f9, 0x855085409b209b1, 0x8dc08db05a105a0, 0x398039708c208c1, 0x933093208840883, 0x416041503dc03db, 0xffffffff0b1c0b1b, 0xffffffffffffffff, 0x5a505a4ffffffff, 0xe600e508270826, 0x5e005d06ce06cd, 0x50004061a0619, 0xca00c9072e072d, 0x566056508a908a8, 0x10b010a06b306b2, 0x1a0019f04ee04ed, 0x45604550a0b0a0a, 0xb6a0b6907b907b8, 0x4050404082d082c, 0x8ea08e909bb09ba, 0x8d608d503260325, 0x3b603b509f309f2, 0x21f06c106c002db, 0x23705d705d60220, 0x49e0a1c0a1b0238, 0x2dc07910790049f, 0x55a0559023c023b, 0x6e206e102620261, 0x626062500580057, 0x6770676001e001d, 0x675067401130112, 0x568056702480247, 0x7a707a6011b011a, 0x776077504990498, 0x46804670a8b0a8a, 0xafa0af902360235, 0x42a0429038a0389, 0x8c608c5090a0909, 0x920091f03380337, 0x3d603d509fb09fa, 0xa8f0a8e08210820, 0x1cb01ca07990798, 0x2c402c30a160a15, 0x171017004ea04e9, 0x5b905b806a306a2, 0x2c002b064b064a, 0x38003706370636, 0xb400b30b640b63, 0xac70ac607360735, 0x4ec04eb088a0889, 0x227017e0b9cffff, 0xa940293071704b3, 0x587047b084e0abe, 0x1330b5d06d303a5, 0x3030352067a0384, 0x1350928067c08ff, 0xb21094506d705b2, 0x4ff052208560a00, 0x22f0a3707130295, 0xffff078505da0184, 0xffffffffffffffff, 0xffffffffffffffff, 0x228017f0b9dffff, 0xa950294071804b4, 0x588047c084f0abf, 0x1340b5e06d403a6, 0x3040353067b0385, 0x1360929067d0900, 0xb22094606d805b3, 0x500052308570a01, 0x2300a3807140296, 0xffff078605db0185, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x50b03e9081e09b3, 0x1b10b8806f401f0, 0x1b7049604830241, 0x46b08780a980a96, 0xaf1069e07fc0569, 0x42f0646039100f7, 0x8bf068d090502d9, 0x9130670033b014f, 0x3cf084a09e40b49, 0xaa2ffff02e10108, 0xffffffffffffffff, 0xffffffff0a4fffff, 0x3fa06970ae10153, 0x92e0666042b05c2, 0x3c705ef0317002d, 0x9230b3509ec0025, 0x85806ae055b008c, 0x427087e09a70ada, 0xa04075f021504fd, 0x71104d1024901da, 0x81409940aa802a1, 0x6ea03c9058503df, 0xffff039d011e0b2f, 0x6930901000effff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x36000c3043105d4, 0x930006d081206be, 0x9f60b230374088f, 0x335007e08b70601, 0xa5502cd01f70a67, 0x55d0137095106b6, 0x7c605730b7807d8, 0x75b09e804dd0489, 0x64c037802e7044d, 0x6a0099c0141084c, 0x89709150041045b, 0x632031300450b96, 0xb6109dc023309ad, 0x737054100820271, 0x77b07150a060ad8, 0x4b708b201e40526, 0x3ad06d909f80289, 0x8040b1d05b601fb, 0x35a0678034c05dc, 0x92a068402ad0139, 0x38b06210b7e004b, 0xffffffff04370061, 0x38c06220b7f004c, 0xffffffff04380062, 0x5110a1006e70540, 0x5cc09380a700a6f, 0xffffffffffff069b, 0xffffffffffffffff, 0x3fb06980ae20154, 0x92f0667042c05c3, 0x3c805f00318002e, 0x9240b3609ed0026, 0x85906af055c008d, 0x428087f09a80adb, 0xa050760021604fe, 0x71204d2024a01db, 0x81509950aa902a2, 0x6eb03ca058603e0, 0xffff039e011f0b30, 0x6940902000fffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0505ffff, 0xffffffff030dffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0b8cffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4c604c506f106f0, 0xb810b8007740773, 0x472047108010800, 0x260025f09810980, 0x904090305760575, 0x334033308f008ef, 0x910090f02cc02cb, 0x3d403d3045a0459, 0x7c507c40afe0afd, 0xa180a1704dc04db, 0x5c905c801ac01ab, 0x72a07290240023f, 0x83b083a00db00da, 0x61406130060005f, 0x60c060b00130012, 0x692069102a402a3, 0x6b506b4015e015d, 0x79d079c05af05ae, 0x49104900a5e0a5d, 0xb540b5302080207, 0x3de03dd020e020d, 0x877087609420941, 0x8fc08fb03550354, 0x37d037c08ce08cd, 0x95e095d08810880, 0x204020303d803d7, 0x1b601b50b380b37, 0xa3c0a3b047e047d, 0x5c105c007db07da, 0x14e014d080d080c, 0x2ac02ab065b065a, 0x4a004906310630, 0x890088061c061b, 0x53d053c089f089e, 0x206020507340733, 0x1d101d004c004bf, 0x43e043d0a540a53, 0xffffffff07cf07ce, 0x882ffffffffffff, 0xffff08ecffffffff, 0x8e408e303080307, 0x3a203a109c509c4, 0xad70ad602540253, 0x7e307e2042e042d, 0x7af07ae0a200a1f, 0x720071f04c204c1, 0x5440543021a0219, 0x702070100990098, 0x5f605f500a300a2, 0x6510650004e004d, 0xaf40af301250124, 0x531053002f402f3, 0x770076f01170116, 0x7b307b204950494, 0x3f503f40a6a0a69, 0xb770b76024e024d, 0x43a043903bc03bb, 0x8f208f108d008cf, 0x91e091d035f035e, 0x54a054909910990, 0xa720a7108a108a0, 0x19a01990450044f, 0x1d501d40a440a43, 0xee00ed06de06dd, 0x9fc003503a70603, 0x55300f3094b0b3b, 0x9fd003603a80604, 0x55400f4094c0b3c, 0x22b019d0a2f076b, 0xffffffff06f604cb, 0x22c019e0a30076c, 0xffffffff06f704cc, 0x16030505fd039b, 0x172086c067e08e5, 0x17030605fe039c, 0x173086d067f08e6, 0x1820ac20a3302e5, 0x1e0078c04a801a3, 0x1830ac30a3402e6, 0x1e1078d04a901a4, 0x35605e1034e0074, 0xffffffff08bb000a, 0x35705e2034f0075, 0xffffffff08bc000b, 0xa59ffff01e6ffff, 0x76dffff04d3ffff, 0xa5affff01e7ffff, 0x76effff04d4ffff, 0x654043b02c5098e, 0x5e30b86002903b1, 0x655043c02c6098f, 0x5e40b87002a03b2, 0x9d202d502ed0445, 0x41d05cd02090a6b, 0xa510aaa000808df, 0xffffffff06170321, 0x3a3028509640b15, 0x8ed012a02c10664, 0x3a4028609650b16, 0x8ee012b02c20665, 0x9ee028f03b706df, 0x5b001fd07f20b0d, 0x9ef029003b806e0, 0x5b101fe07f30b0e, 0xdc09af0b7409de, 0x7c0281073d058e, 0xdd09b00b7509df, 0x7d0282073e058f, 0x978ffff06680370, 0xffffffffffffffff, 0x2ee044606690371, 0xffff0971ffff0979, 0xf5ffffffffffff, 0xffffffffffffffff, 0x20a0a6c09d302d6, 0xffffffffffff00f6, 0xffffffff035c00bb, 0xffffffffffffffff, 0x41e05ce035d00bc, 0xffffffffffffffff, 0xffffffff01c30176, 0xffffffff029bffff, 0xa520aab01c40177, 0xffffffffffff029c, 0x3bdffffffffffff, 0xffffffffffffffff, 0x6180322000908e0, 0xffffffffffff03be, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff06faffffffff, 0x9b90b27ffffffff, 0xffffffffffffffff, 0xffff094dffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff094effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x45704920a7307b0, 0xa3d09d601780765, 0x70702f101ec0532, 0x82a044b00de0ae5, 0x45804930a7407b1, 0xa3e09d701790766, 0x70802f201ed0533, 0x82b044c00df0ae6, 0x870ffffffffffff, 0xffffffffffff0871, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x594037affffffff, 0x743081600a60b1f, 0x89509c8052803fc, 0x7b404850a8c020f, 0xa9a071b018d0221, 0x516085c029d0102, 0x93f065c09760b17, 0xa70b200595037b, 0x52903fd07440817, 0xa8d0210089609c9, 0x18e022207b50486, 0x29e01030a9b071c, 0x9770b180517085d, 0xffffffff0940065d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x10c0ae7065603c5, 0x509044106b00828, 0xaac01c808680a49, 0x225020b0751049a, 0x27705360b590709, 0x98200a8040a080e, 0x5a2002f09390703, 0x8cb003b09570638, 0x8720151039f066e, 0x3e505d20b050682, 0xa9e0114040207d0, 0x53801bb02e304b9, 0x10d0ae8065703c6, 0x50a044206b10829, 0xaad01c908690a4a, 0x226020c0752049b, 0x27805370b5a070a, 0x98300a9040b080f, 0x5a30030093a0704, 0x8cc003c09580639, 0x873015203a0066f, 0x3e605d30b060683, 0xa9f0115040307d1, 0x53901bc02e404ba, 0x30e063b003a0039, 0x9d407bd0a090032, 0x265037f037e09d5, 0x401059f0b1a0266, 0xa140a13ffff021e, 0xffff074c074bffff, 0xffffffffffffffff, 0x28c095affffffff, 0x33a033902a602a5, 0x90e090d08c808c7, 0x2b902b803730372, 0x46e046d09930992, 0xb500b4f07fb07fa, 0x4b004af07780777, 0x1e901e80a600a5f, 0xd600d5056c056b, 0x66006507280727, 0x20001f08a508a4, 0x5a005906280627, 0x26402630b140b13, 0x190018f06bd06bc, 0x5bb05ba07bf07be, 0xa360a35074e074d, 0x280027f04e004df, 0x3aa03a90afc0afb, 0x95409530470046f, 0x328032708d208d1, 0x9bd09bc092d092c, 0x82f082e057c057b, 0x420041f0aa70aa6, 0xa0d0a0c02180217, 0x70c070b01a601a5, 0x81d081c010f010e, 0xffffffffffffffff, 0x358ffffffffffff, 0xffff032a03290359, 0x6d006cfffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x50c03ea081f09b4, 0x1b20b8906f501f1, 0x1b8049704840242, 0x46c08790a990a97, 0xaf2069f07fd056a, 0x4300647039200f8, 0x8c0068e090602da, 0x9140671033c0150, 0x3d0084b09e50b4a, 0xaa3ffff02e20109, 0xffffffffffffffff, 0xffffffff0a50ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xa1a0a1901d901d8, 0x79b079a0a930a92, 0x69d069c0140013f, 0x4f404f302bb02ba, 0x6410640003e003d, 0x649064805bd05bc, 0x73a073900770076, 0xb660b650040003f, 0x782078104e804e7, 0x88e088d0acf0ace, 0xac10ac002c802c7, 0xffffffff017b017a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x298029705130512, 0x9ff09fe09480947, 0xa7d0a7c07ad07ac, 0x18a01890a3a0a39, 0xaf00ae07480747, 0x52d052c08880887, 0x34003305ea05e9, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x70006ffffffff, 0xc600c508a708a6, 0xe800e706ef06ee, 0x680067060e060d, 0x1580157ffffffff, 0xb460b4508310830, 0x9bf09be05020501, 0x2b002af0a260a25, 0x95c095b087b087a, 0x3940393097d097c, 0x85108500b580b57, 0x330032f03120311, 0x5a705a602120211, 0x9890988040f040e, 0x8650864051b051a, 0xa220a21023e023d, 0x66b066a00ff00fe, 0x6a506a40b0a0b09, 0x65f065e01560155, 0x69a069902ea02e9, 0xffffffffffffffff, 0xffffffffffffffff, 0x4d507a107a0ffff, 0xb6c0b6b050604d6, 0x9b609b505840583, 0x84108400acb0aca, 0x4fffffffffffff, 0xffffffff0b710050, 0x24c024b0b080b07, 0x3b003afffff078e, 0x49d049c07d707d6, 0x9cb09ca03f903f8, 0x27a0279050e050d, 0x11d011c080b080a, 0x93e00b607060705, 0xffff00fa09870b29, 0xb5b00930351070e, 0x9f009e05e805e7, 0x13e013d06e406e3, 0x28e028d054e054d, 0x434043308030802, 0x7590b8d0515078f, 0xffff01750174075a, 0xffffffffffffffff, 0xffffffff02f802f7, 0x310030fffffffff, 0xffffffff0aec0aeb, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff09e709e6ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xb5cffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x36100c4043205d5, 0x931006e081306bf, 0x9f70b2403750890, 0x336007f08b80602, 0xa5602ce01f80a68, 0x55e0138095206b7, 0x7c705740b7907d9, 0x75c09e904de048a, 0x64d037902e8044e, 0x6a1099d0142084d, 0x89809160042045c, 0x633031400460b97, 0xb6209dd023409ae, 0x738054200830272, 0x77c07160a070ad9, 0x4b808b301e50527, 0x3ae06da09f9028a, 0x8050b1e05b701fc, 0x35b0679034d05dd, 0x92b068502ae013a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x2670aed09c0ffff, 0x949064205a80143, 0xb720771074904cd, 0x3fe04f507c0013b, 0x2ef03eb054b0259, 0x19707a20a800aae, 0xffff045105ff08c3, 0xffffffffffffffff, 0x2680aee09c1ffff, 0x94a064305a90144, 0xb730772074a04ce, 0x3ff04f607c1013c, 0x2f003ec054c025a, 0x19807a30a810aaf, 0xffff0452060008c4, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5be075d074f0a61, 0x9ab0aa407e8012f, 0x2dd099a0af50955, 0x14507d204e104f7, 0x8c90634047700e9, 0x36c072102cf0043, 0x25d0547040602d1, 0x38006720b840147, 0x479078a0ac40a75, 0xb4b077f02310481, 0x5bf075e07500a62, 0x9ac0aa507e90130, 0x2de099b0af60956, 0x14607d304e204f8, 0x8ca0635047800ea, 0x36d072202d00044, 0x25e0548040702d2, 0x38106730b850148, 0x47a078b0ac50a76, 0xb4c078002320482, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x73f07d40ad00a45, 0xaff09960223056f, 0x7920b3909c2022d, 0x761047f04a0024f, 0x6a8034305c40331, 0x6c7028301bf0b31, 0x64e03c3028709a9, 0x60908d3002702eb, 0x8ac0a290a270753, 0xffffffffffffffff, 0x74007d50ad10a46, 0xb00099702240570, 0x7930b3a09c3022e, 0x762048004a10250, 0x6a9034405c50332, 0x6c8028401c00b32, 0x64f03c4028809aa, 0x60a08d4002802ec, 0x8ad0a2a0a280754, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x26b00a40461088b, 0x25101100ae306aa, 0xffff00b709430b3d, 0x8fd00b908f705e5, 0x1310b4107ca0806, 0x2ff03e1055f0832, 0xffff02a704210581, 0x4e3047507630a23, 0xffff03b3063c0a2b, 0x88cffff06d102c9, 0x6ab026c00a50462, 0xb3e025201110ae4, 0x5e6ffff00b80944, 0x80708fe00ba08f8, 0x83301320b4207cb, 0x582030003e20560, 0xa24ffff02a80422, 0xa2c04e404760764, 0x2caffff03b4063d, 0xffffffffffff06d2, 0x1490191048704cf, 0x57101e207e00b8e, 0x44305c603e70695, 0x3090a470a8407e6, 0xc7090b0b8a0911, 0x8a0891072b0341, 0x10009660862045f, 0x7a036607190899, 0x33f04bd05200201, 0x463079e0ad40a63, 0x53a04690838095f, 0x1bd0b9006e80239, 0xffff066c09e002fb, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x14a0192048804d0, 0x57201e307e10b8f, 0x44405c703e80696, 0x30a0a480a8507e7, 0xc8090c0b8b0912, 0x8b0892072c0342, 0x101096708630460, 0x7b0367071a089a, 0x34004be05210202, 0x464079f0ad50a64, 0x53b046a08390960, 0x1be0b9106e9023a, 0xffff066d09e102fc, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xb9207a401dc057d, 0x4e5048e01c101a9, 0x83e0731036e00cf, 0x45d0844097a00ef, 0x68b086e015f0b0f, 0x60f08dd02d7034a, 0x8420ab20a650364, 0x6b803cb05550453, 0xb9307a501dd057e, 0x4e6048f01c201aa, 0x83f0732036f00d0, 0x45e0845097b00f0, 0x68c086f01600b10, 0x61008de02d8034b, 0x8430ab30a660365, 0x6b903cc05560454, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x31f0723099e0084, 0x40c05f30410025b, 0x56106db09170069, 0xa02061503480010, 0x19507aa04aa0473, 0x1ee0aa006ec030b, 0xae906c908a204f1, 0x50307b609e20a4d, 0x3200724099f0085, 0x40d05f40411025c, 0x56206dc0918006a, 0xa03061603490011, 0x19607ab04ab0474, 0x1ef0aa106ed030c, 0xaea06ca08a304f2, 0x50407b709e30a4e, 0x8ae005503f60658, 0x435002308d705eb, 0xbf03760596, 0x507053408100741, 0x755019b000207ba, 0xa90033d044904a4, 0x545016e02730af7, 0x9ce0b98099806ac, 0x3f7065900140368, 0x8d805ec08af0056, 0x377059704360024, 0x8110742000100c0, 0x307bb05080535, 0x44a04a50756019c, 0x2740af80a91033e, 0x99906ad0546016f, 0x15036909cf0b99, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//11648 bytes -enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0x11c0], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16001500000000, 0x0, 0x0, 0x18001700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1900000000, 0x1b001a0000, 0x1f001e001d001c, 0x23002200210020, 0x0, 0x2600250024, 0x0, 0x0, 0x28002700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c002b002a0029, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f002e0000, 0x33003200310030, 0x0, 0x0, 0x0, 0x3500340000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0x0, 0x0, 0x0, 0x380037, 0x0, 0x0, 0x0, 0x0, 0x3c003b003a0039, 0x3e003d0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40003f00000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42004100000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x430000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x450044, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x984008a09beffff, 0x9ac00c703440658, 0xbf400740a7c0c6a, 0xb9100ef08b10736, 0x62905e604a608c3, 0x1ac01990ae607fe, 0xffff032005210569, 0xffffffffffffffff, 0x985008b09bfffff, 0x9ad00c803450659, 0xbf500750a7d0c6b, 0xb9200f008b20737, 0x62a05e704a708c4, 0x1ad019a0ae707ff, 0xffff03210522056a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a0bffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x8e3012e060507f2, 0x41202770a640b9a, 0xc18013e03c105a6, 0x340004e03c9068a, 0x2c20090097c0650, 0xffff00d505da0781, 0x54302300a2a0ba7, 0xba20af909110771, 0x8e4012f060607f3, 0x41302780a650b9b, 0xc19013f03c205a7, 0x341004f03ca068b, 0x2c30091097d0651, 0xffff00d605db0782, 0x54402310a2b0ba8, 0x39b0afa09120772, 0x51205110a890a88, 0xc230c2201e601e5, 0x7a607a5021d021c, 0x946094500d800d7, 0x673067200650064, 0x67f067e005b005a, 0x6c406c302d802d7, 0x889088801730172, 0x86808670c550c54, 0xb180b1705040503, 0x5e505e401cd01cc, 0xa140a1302390238, 0x90a0909ffff03f6, 0x347034609dd09dc, 0x76d009f009effff, 0x8a700990098076e, 0x8440bfa0bf908a8, 0xad6013701360845, 0x5240523031a0ad7, 0xc310c30083f083e, 0x17b017a072a0729, 0x2d002cf06eb06ea, 0xf000e06690668, 0x79007806a0069f, 0xdc00db08c608c5, 0x1fb01fa079c079b, 0x1bb01ba0c4d0c4c, 0xb080b07050c050b, 0x5b305b2084b084a, 0xaab0aaa0a1e0a1d, 0x2506850684039c, 0x62b065b065a0026, 0xbe00bdf06f006f9, 0x2950571028a0289, 0x1c808810c020296, 0xb8107e0ffff01c9, 0x56b094f094e0afb, 0xa380bd00247029b, 0xffff050f00a100a0, 0x35600dd098a00b4, 0x68d068c001d001c, 0x40605a001180117, 0xffffffff0a4e0407, 0x7d0087401820181, 0x57707f801c007d1, 0xb7f032903280578, 0xffffffff02760275, 0x1c6ffff09c109c0, 0xffffffffffffffff, 0x63b09cf09ce09cd, 0xbaa0ba9063d063c, 0x812054605450bab, 0x7e20b140b130813, 0xb39047d047c07e3, 0x59e032503240b3a, 0xc1f0c1e07e1059f, 0x184018306b606b5, 0x2e602e506570656, 0x101010006a606a5, 0x5bd05bc07140713, 0xb7b0b7a0b790928, 0x1c7024807bf07be, 0x20702060c390c38, 0xa180a1704550454, 0x5f105f008ce08cd, 0x95b095a09e409e3, 0x92d092c03e103e0, 0x45704560bd90bd8, 0xb480b4704460445, 0x57c057b02da02d9, 0x877087601860185, 0x8d808d7060f060e, 0x73d073cffff00de, 0xc4f0c4e006d006c, 0x7b407b300cc00cb, 0x91b091a00820081, 0x765076405c905c8, 0xffffffffffffffff, 0x8100abeffffffff, 0xa03083805100811, 0x6fa0165016402ad, 0xa810a8002fa0458, 0x34f034e09c709c6, 0xaa70aa609fa09f9, 0x6f1023a0be8043b, 0x8820c03ffff0572, 0xafcffff0b82ffff, 0xffffffffffff09e5, 0x29cffff0bf7056c, 0xffff00bf0c41ffff, 0x69b01090bd10a39, 0xb5ffffffff0a32, 0xffff098b05f7ffff, 0xffffffff0357ffff, 0xffffffffffffffff, 0xffffffff0035ffff, 0xa4f055fffff05a1, 0x380ffffffffffff, 0x7f901c104590875, 0xffffffffffff02fb, 0xffff0b80ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff077f009cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0a19ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1e801e704e604e5, 0x2120211ffffffff, 0xaeaffffffffffff, 0x3b3ffff08ff0138, 0xffffffffffffffff, 0xffff02bcffffffff, 0xffff00fa08b30746, 0xa750c70ffff0878, 0x19504f104f90883, 0x17f01eb0b7c0aca, 0xbce0bfb0a1a05ec, 0x11903cd08a90a0c, 0x6f2ffff068e0c3e, 0xb6037206660358, 0xa408d9076a099e, 0xfb08b4074702bd, 0x19604f204fa0a79, 0x18001ec0b7d0acb, 0xbcf0bfc0a1b05ed, 0x11a03ce08aa0a0d, 0x6f406f3068f0c3f, 0xb7037306670359, 0xa508da076b099f, 0xa1f0a760c710879, 0xffffffff05ee04f3, 0xa200c400374ffff, 0x4ec04eb01a501a4, 0x8f008ef0b420b41, 0xa310a3005d105d0, 0x3f003ef0a8b0a8a, 0x95f095e031d031c, 0x394039304850484, 0x3b401ef06900bfd, 0xb3dffff0b7e05ef, 0x631063001f00b3e, 0x90001390aebffff, 0xa1502b405650539, 0x603009a0a360bba, 0x99800aa099a076f, 0x3c300a60348064a, 0x3f8058d0c0e0790, 0xb72029d040a0757, 0x4fd013c08fb0b45, 0x1d20ac408240894, 0x3060b2c055a0872, 0x17402650b8d0a4c, 0xc2609de06c505ca, 0x5c03fc06800a9d, 0x3f9058e0c0f0791, 0xb73029e040b0758, 0x4fe013d08fc0b46, 0x1d30ac508250895, 0x3070b2d055b0873, 0x17502660b8e0a4d, 0xc2709df06c605cb, 0x5d03fd06810a9e, 0xa1602b50566053a, 0x604009b0a370bbb, 0x99900ab099b0770, 0x3c400a70349064b, 0x62506240b5c0b5b, 0xc130c1202640263, 0x41d041c02160215, 0x8e608e50a5f0a5e, 0x97f097e05f605f5, 0x3cc03cb09630962, 0x9db09da09190918, 0x453045204150414, 0xffffffff0beb0bea, 0xffffffffffffffff, 0x5fe05fdffffffff, 0xf500f408b608b5, 0x670066073f073e, 0x50004067b067a, 0xd400d307a407a3, 0x5b505b409440943, 0x11e011d07220721, 0x1b901b805380537, 0x49504940ac10ac0, 0xc3b0c3a08350834, 0x442044108bc08bb, 0x98d098c0a680a67, 0x977097603510350, 0x3eb03ea0aa90aa8, 0x23c073207310302, 0x25506330632023d, 0x4e10ad50ad40256, 0x303080d080c04e2, 0x5a905a8025a0259, 0x754075302820281, 0x687068600610060, 0x6e006df00220021, 0x6db06da01290128, 0x5b705b602680267, 0x823082201310130, 0x7ef07ee04dc04db, 0x4a904a80b4a0b49, 0xbc50bc402540253, 0x467046603be03bd, 0x967096609af09ae, 0x9c509c403650364, 0x40f040e0ab10ab0, 0xb4e0b4d08b008af, 0x1e401e308150814, 0x2eb02ea0acf0ace, 0x18a018905340533, 0x61306120710070f, 0x30002f06ac06ab, 0x3c003b06980697, 0xbe00bd0c350c34, 0xb8c0b8b07ae07ad, 0x536053509230922, 0x24501970c72ffff, 0xb5302b6078904fb, 0x5d804be08df0b83, 0x14a0c2e074403da, 0x32a038206e403b5, 0x14c09d006e609a4, 0xbf009ed0748060c, 0x549056f08e70ab6, 0x24d0af0078502b8, 0xffff08000637019d, 0xffffffffffffffff, 0xffffffffffffffff, 0x24601980c73ffff, 0xb5402b7078a04fc, 0x5d904bf08e00b84, 0x14b0c2f074503db, 0x32b038306e503b6, 0x14d09d106e709a5, 0xbf109ee0749060d, 0x54a057008e80ab7, 0x24e0af1078602b9, 0x66208010638019e, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x556042208ad0a60, 0x1ca0c5e0766020c, 0x1d004d904c60261, 0x4ac090d0b570b55, 0xbbc070b088605b8, 0x46c06a703c50107, 0x96006f709aa0300, 0x9b806d403680168, 0x40808db0a970c1a, 0xb61ffff0308011b, 0xffffffffffffffff, 0xffffffff0b0bffff, 0x43507020bac016c, 0x9d606ca0468061c, 0x3fe064c03420031, 0x9cb0c040aa10029, 0x8eb071d05aa0096, 0x46409130a530ba5, 0xaba07d802320547, 0x7830519026901f3, 0x8a30a400b6802c4, 0x75c040005d60418, 0xffff03d101340bfe, 0x6fd09a60010ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x39100cd046e062e, 0x9d8007608a1072f, 0xaac0bf203a5093b, 0x362008c09580660, 0xb1102f402130b24, 0x5ac014e09fb0725, 0x84205c40c4a085b, 0x7d40a9b052704cc, 0x6ad03a9030e048a, 0x70d0a48015808dd, 0x93009ba004a049a, 0x693033e004c0c6c, 0xc320a8c02510a59, 0x7af059000940291, 0x7f607870abc0ba0, 0x4ff095302000573, 0x3e2074a0aae02ab, 0x8900c0806100217, 0x39906ee037a0639, 0x9d2071902d30150, 0x3bf06820c500054, 0xffffffff0474006a, 0x3c006830c510055, 0xffffffff0475006b, 0x55c0ac60759058f, 0x62609e00b2f0b2e, 0xffffffffffff0708, 0xffffffffffffffff, 0x43607030bad016d, 0x9d706cb0469061d, 0x3ff064d03430032, 0x9cc0c050aa2002a, 0x8ec071e05ab0097, 0x46509140a540ba6, 0xabb07d902330548, 0x784051a026a01f4, 0x8a40a410b6902c5, 0x75d040105d70419, 0xffff03d201350bff, 0x6fe09a70011ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0561ffff, 0xffffffff0338ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0c62ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x50e050d07630762, 0xc530c5207ed07ec, 0x4b304b2088b088a, 0x280027f0a2d0a2c, 0x9a909a805c705c6, 0x361036009950994, 0x9b509b402f302f2, 0x40d040c04990498, 0x84108400bc90bc8, 0xad10ad005260525, 0x623062201c501c4, 0x7a0079f0260025f, 0x8ca08c900e500e4, 0x675067400690068, 0x66d066c00150014, 0x6fc06fb02c702c6, 0x724072301770176, 0x819081806080607, 0x4d404d30b1a0b19, 0xc250c2402250224, 0x4170416022b022a, 0x90c090b09ea09e9, 0x9a109a003850384, 0x3ae03ad096f096e, 0xa080a0709160915, 0x221022004110410, 0x1cf01ce0c070c06, 0xaf60af504c104c0, 0x61b061a085e085d, 0x1670166089c089b, 0x2d202d106be06bd, 0x51005006920691, 0x930092067d067c, 0x58c058b09380937, 0x223022207ac07ab, 0x1ea01e905080507, 0x47b047a0b100b0f, 0xdf0c5c084d084c, 0x917049e05ba03fa, 0xffff0ba3ffffffff, 0x987098603310330, 0x3d603d50a740a73, 0xb9f0b9e02740273, 0x8660865046b046a, 0x82b082a0ad90ad8, 0x7930792050a0509, 0x593059202370236, 0x774077300a300a2, 0x655065400ad00ac, 0x6b406b300570056, 0xbbf0bbe013b013a, 0x57e057d03270326, 0x7e907e8012d012c, 0x82f082e04d804d7, 0x430042f0b270b26, 0xc490c48026e026d, 0x477047603f203f1, 0x997099609710970, 0x9c309c20390038f, 0x59905980a3d0a3c, 0xb310b30093a0939, 0x1b301b2048d048c, 0x1ee01ed0b000aff, 0xfd00fc074f074e, 0xab2003903dc0664, 0x5a2010209f30c0a, 0xab3003a03dd0665, 0x5a3010309f40c0b, 0x24901b60ae807e4, 0xffffffff07680513, 0x24a01b70ae907e5, 0xffffffff07690514, 0x1a032c065c03cf, 0x18b090106e80988, 0x1b032d065d03d0, 0x18c090206e90989, 0x19b0b870aec030c, 0x1fc080704ed01bc, 0x19c0b880aed030d, 0x1fd080804ee01bd, 0x386063e037e007d, 0xffffffff095c000c, 0x387063f037f007e, 0xffffffff095d000d, 0xb1508ed02020085, 0x7e6072b051b0bec, 0xb16ffff0203ffff, 0x7e7ffff051cffff, 0x6b7047802ec0a3a, 0x6400c5a002d03e6, 0x6b8047902ed0a3b, 0x6410c5b002e03e7, 0xa8202fc03140482, 0x45a062702260b2a, 0xb0d0b6a000a0982, 0xffffffff0678034c, 0x8560b760ac70be3, 0x991014005f20794, 0x8570b770ac80be4, 0x992014105f30795, 0xaa3063403ec0750, 0x609021909c80bda, 0xaa4063503ed0751, 0x60a021a09c90bdb, 0xb1f0b950c450a90, 0x1f7054f07b50947, 0xb200b960c460a91, 0x1f8055007b60948, 0xa23048e06cc03a1, 0x3f0c43ffff0336, 0x315048306cd03a2, 0xffff0a1cffff0a24, 0xaf2084effffffff, 0x51f0581ffff0a9f, 0x2270b2b0a8302fd, 0xffffffffffff0af3, 0x884091e038d00c5, 0x96c064effffffff, 0x45b0628038e00c6, 0xffffffffffffffff, 0xa7a08e901dc018f, 0x4e707f402be0c16, 0xb0e0b6b01dd0190, 0xffffffffffff02bf, 0x6ff0a6bffffffff, 0x6d8091cffff05d2, 0x679034d000b0983, 0xffffffffffff0700, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff076cffffffff, 0xa660bf6ffffffff, 0xffffffffffffffff, 0xffff09f7ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff09f8ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x49604d50b32082c, 0xaf70a86019107de, 0x77903180208057f, 0x8b9048800eb0bb0, 0x49704d60b33082d, 0xaf80a87019207df, 0x77a031902090580, 0x8ba048900ec0bb1, 0x905ffffffffffff, 0xffffffffffff0906, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5e803abffffffff, 0x7bc08a500b00bee, 0x92e0a7705750437, 0x83004c80b4b022c, 0xb59078e01a60241, 0x56308f102c00115, 0x9e706bf0a210be6, 0xb10bef05e903ac, 0x576043807bd08a6, 0xb4c022d092f0a78, 0x1a70242083104c9, 0x2c101160b5a078f, 0xa220be7056408f2, 0xffffffff09e806c0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x11f0bb206b90402, 0x554047e071f08b7, 0xb6c01e108fd0b05, 0x243022807ca04dd, 0x29705830c2a077b, 0xa2e00b20447089d, 0x5f9003309e10775, 0x97400450a010699, 0x907016a03d306d2, 0x41e062c0bd206ec, 0xb5d012a043d0850, 0x58501d4030a0501, 0x1200bb306ba0403, 0x555047f072008b8, 0xb6d01e208fe0b06, 0x244022907cb04de, 0x29805840c2b077c, 0xa2f00b30448089e, 0x5fa003409e20776, 0x97500460a02069a, 0x908016b03d406d3, 0x41f062d0bd306ed, 0xb5e012b043e0851, 0x58601d5030b0502, 0x339069c003e003d, 0xa8408390abf0036, 0x28503b003af0a85, 0x43c05f80be90286, 0xacd0accffff023b, 0xffff07c507c4ffff, 0xffffffffffffffff, 0x2ae0a04ffffffff, 0x367036602c902c8, 0x9b309b209690968, 0x2df02de03a403a3, 0x4af04ae0a3f0a3e, 0xc210c20088d088c, 0x4f504f407f107f0, 0x20502040b1c0b1b, 0xee00ed05bf05be, 0x6f006e079e079d, 0x2400230940093f, 0x63006206890688, 0x28402830be20be1, 0x1a901a8072e072d, 0x6150614083b083a, 0xaef0aee07c707c6, 0x2a0029f052a0529, 0x3df03de0bc70bc6, 0x9fe09fd04b104b0, 0x353035209730972, 0xa6a0a6909d509d4, 0x8be08bd05cd05cc, 0x45d045c0b670b66, 0xac30ac202350234, 0x77e077d01bf01be, 0x8ac08ab01220121, 0xffffffffffffffff, 0x38bffffffffffff, 0xffff03550354038c, 0x7410740ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x557042308ae0a61, 0x1cb0c5f0767020d, 0x1d104da04c70262, 0x4ad090e0b580b56, 0xbbd070c088705b9, 0x46d06a803c60108, 0x96106f809ab0301, 0x9b906d503690169, 0x40908dc0a980c1b, 0xb62ffff0309011c, 0xffffffffffffffff, 0xffffffff0b0cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xad30ad201f201f1, 0x81708160b520b51, 0x70a070901570156, 0x53e053d02e102e0, 0x6a206a100420041, 0x6aa06a906170616, 0x7b207b10080007f, 0xc370c3600440043, 0x7fd07fc05320531, 0x92709260b940b93, 0xb860b8502ef02ee, 0xffffffff01940193, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x2bb02ba055e055d, 0xab50ab409f009ef, 0xb3c0b3b08290828, 0x1a301a20afe0afd, 0xb900b807c107c0, 0x57a057909210920, 0x38003706470646, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x90008ffffffff, 0xd000cf09420941, 0xf700f607610760, 0x710070066f066e, 0x1710170ffffffff, 0xc150c1408c008bf, 0xa700a6f054c054b, 0x2d602d50adf0ade, 0xa060a050910090f, 0x3c803c70a290a28, 0x8e208e10c290c28, 0x35d035c033d033c, 0x60005ff022f022e, 0xa350a34044c044b, 0x8fa08f905680567, 0xadb0ada025c025b, 0x6cf06ce01140113, 0x71207110bd70bd6, 0x6c206c1016f016e, 0x705070403110310, 0xffffffffffffffff, 0xffffffffffffffff, 0x51d081d081cffff, 0xc3d0c3c0562051e, 0xa630a6205d505d4, 0x8d208d10b900b8f, 0x58ffffffffffff, 0xffffffff0c420059, 0x26c026b0bd50bd4, 0x3e503e4ffff0826, 0x4e004df085a0859, 0xa8f0a8e04340433, 0x29a029905590558, 0x1330132089a0899, 0x9e600c007780777, 0xffff010a0a330bf8, 0xc2c009d03810780, 0xa900a806450644, 0x155015407560755, 0x2b002af059d059c, 0x4710470088f088e, 0x7d20c6305600827, 0xffff018e018d07d3, 0xffffffffffffffff, 0xffffffff031f031e, 0x33b033affffffff, 0xffffffff0bb70bb6, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0a9a0a99ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xc2dffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x39200ce046f062f, 0x9d9007708a20730, 0xaad0bf303a6093c, 0x363008d09590661, 0xb1202f502140b25, 0x5ad014f09fc0726, 0x84305c50c4b085c, 0x7d50a9c052804cd, 0x6ae03aa030f048b, 0x70e0a49015908de, 0x93109bb004b049b, 0x694033f004d0c6d, 0xc330a8d02520a5a, 0x7b0059100950292, 0x7f707880abd0ba1, 0x500095402010574, 0x3e3074b0aaf02ac, 0x8910c0906110218, 0x39a06ef037b063a, 0x9d3071a02d40151, 0x5fb014808c10bca, 0xffff0b640b630846, 0xffffffffffffffff, 0xffffffffffffffff, 0x9f5ffffffffffff, 0x35a001604b4069d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x2870bb80a6dffff, 0x9f106a30601015a, 0xc6607ea07c20515, 0x439053f083c0152, 0x3160426059a0279, 0x1b0081e0b3f0b6e, 0xffff0490065e0964, 0xffffffffffffffff, 0x2880bb90a6effff, 0x9f206a40602015b, 0xc6707eb07c30516, 0x43a0540083d0153, 0x3170427059b027a, 0x1b1081f0b400b6f, 0xffff0491065f0965, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x61807d607c80b1d, 0xa570b70086d0146, 0x3040a460bc009ff, 0x15c0854052b0541, 0x96a069504ba00f8, 0x39d079702f60052, 0x27d0596044302f8, 0x3b106d60c56015e, 0x4bc08050b890b34, 0xc1c07fa024f04c4, 0x61907d707c90b1e, 0xa580b71086e0147, 0x3050a470bc10a00, 0x15d0855052c0542, 0x96b069604bb00f9, 0x39e079802f70053, 0x27e0597044402f9, 0x3b206d70c57015f, 0x4bd08060b8a0b35, 0xc1d07fb025004c5, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x7b808690b980b01, 0xbcc0a42025705c0, 0x80e0c100a71024b, 0x7da04c204e3026f, 0x7150370061e035e, 0x73802a401d80c00, 0x6b1042002a90a55, 0x66a0978002b0312, 0x94a0ae20ae007cc, 0xffffffffffffffff, 0x7b9086a0b990b02, 0xbcd0a43025805c1, 0x80f0c110a72024c, 0x7db04c304e40270, 0x7160371061f035f, 0x73902a501d90c01, 0x6b2042102aa0a56, 0x66b0979002c0313, 0x94b0ae30ae107cd, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x28b00ae04a00924, 0x27101230bae0717, 0xffff00c109eb0c0c, 0x9a200c3099c0642, 0x1600c5808480892, 0x32e041a05ae08c7, 0xffff02cd045e05dc, 0x52d04b807dc0adc, 0xffff03e806af0ae4, 0x925ffff074202f0, 0x718028c00af04a1, 0xc0d027201240baf, 0x643ffff00c209ec, 0x89309a300c4099d, 0x8c801610c590849, 0x5dd032f041b05af, 0xaddffff02ce045f, 0xae5052e04b907dd, 0x2f1ffff03e906b0, 0xffffffffffff0743, 0x16201aa04ca0517, 0x5c201fe08630c64, 0x480062004240706, 0x3320b030b43086b, 0xd109b00c6009b6, 0xd9092a07a1036e, 0x1110a1108f704a4, 0x83039707a70932, 0x36c0505056d021e, 0x4a2081a0b9c0b28, 0x58904aa08cb0a09, 0x1d60002075a025d, 0xffff06d00a930322, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x16301ab04cb0518, 0x5c301ff08640c65, 0x481062104250707, 0x3330b040b44086c, 0xd209b10c6109b7, 0xda092b07a2036f, 0x1120a1208f804a5, 0x84039807a80933, 0x36d0506056e021f, 0x4a3081b0b9d0b29, 0x58a04ab08cc0a0a, 0x1d70003075b025e, 0xffff06d10a940323, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xc68082001f505ce, 0x52f04d101da01c2, 0x8cf07a9039f00e9, 0x49c08d50a2600fe, 0x6f5090301780bdd, 0x670098002fe0378, 0x8d30b740b220395, 0x727040405a40492, 0xc69082101f605cf, 0x53004d201db01c3, 0x8d007aa03a000ea, 0x49d08d60a2700ff, 0x6f6090401790bde, 0x671098102ff0379, 0x8d40b750b230396, 0x728040505a50493, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x34a07990a4a008e, 0x4490652044d027b, 0x5b0074c09bc0072, 0xab80676037c0012, 0x1ae083604ef04b6, 0x20a0b5f075e0334, 0xbb4073a093d053b, 0x54d08320a950b09, 0x34b079a0a4b008f, 0x44a0653044e027c, 0x5b1074d09bd0073, 0xab90677037d0013, 0x1af083704f004b7, 0x20b0b60075f0335, 0xbb5073b093e053c, 0x54e08330a960b0a, 0x94c005e043106bb, 0x4720027097a0648, 0xc903a705ea, 0x5520587089f07ba, 0x7ce01b400060852, 0xb4f036a048604e9, 0x594018702930bc2, 0xa7e0c6e0a44071b, 0x43206bc0018043f, 0x97b0649094d005f, 0x3a805eb04730028, 0x8a007bb000100ca, 0x7085305530588, 0x48704ea07cf01b5, 0x2940bc30b50036b, 0xa45071c05950188, 0x1904400a7f0c6f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//5568 bytes -enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0xd0], [ 0x100, 0x2c0, 0x7a00], [ 0x605040303020100, 0xe0d0c0b0a090807, 0x11100f0303030303, 0x1414141414141312, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x1414141414141414, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0xb000a00090008, 0xf000e000d000c, 0x12001100010010, 0x15001400010013, 0x19001800170016, 0x1c0001001b001a, 0x1f001f001e001d, 0x1f001f001f0020, 0x1f001f001f001f, 0x1f002300220021, 0x1f001f00250024, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100260001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x29002800010027, 0x2d002c002b002a, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x2e000100010001, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x30002f0001001f, 0x33003200310001, 0x37003600350034, 0x3a000100390038, 0x3e003d003c003b, 0x4200410040003f, 0x46004500440043, 0x4a004900480047, 0x1f004d004c004b, 0x510050004f004e, 0x52000100010001, 0x1f001f00540053, 0x1f001f001f001f, 0x55001f001f001f, 0x1000100010001, 0x1f001f001f0056, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f005700010001, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x59005800010001, 0x5b005a001f001f, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x5c000100010001, 0x1000100010001, 0x1f001f005e005d, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x5f001f001f001f, 0x1f006100600001, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f0062, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x66006500640063, 0x1f001f001f001f, 0x67001f001f001f, 0x1f006a00690068, 0x6c001f001f006b, 0x1f001f006e006d, 0x1f006f001f001f, 0x1f001f0070001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1000100010001, 0x1007100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x72000100010001, 0x1000100010073, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1007400010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x75000100010001, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f007600010001, 0x1f001f001f001f, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x77000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x78000100010001, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x1f001f001f001f, 0x0, 0x7fffffe07fffffe, 0x420040000000000, 0xff7fffffff7fffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x501f0003ffc3, 0x0, 0xbcdf000000000020, 0xfffffffbffffd740, 0xffbfffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffffffc03, 0xffffffffffffffff, 0xfffeffffffffffff, 0xffffffff027fffff, 0xbfff0000000001ff, 0x787ffffff00b6, 0xffffffff07ff0000, 0xffffc000feffffff, 0xffffffffffffffff, 0x9c00e1fe1fefffff, 0xffffffffffff0000, 0xffffffffffffe000, 0x3ffffffffffff, 0x43007fffffffc00, 0x1ffffcffffff, 0xffff07ff01ffffff, 0xffffffff00007eff, 0xffff03f8fff003ff, 0xefffffffffffffff, 0xfffe000fffe1dfff, 0xe3c5fdfffff99fef, 0x1003000fb080599f, 0xc36dfdfffff987ee, 0x3f00005e021987, 0xe3edfdfffffbbfee, 0x1e00000f00011bbf, 0xe3edfdfffff99fee, 0x2000fb0c0199f, 0xc3ffc718d63dc7ec, 0x811dc7, 0xe3fffdfffffddfff, 0xf27601ddf, 0xe3effdfffffddfef, 0xe000f60601ddf, 0xe7fffffffffddfff, 0xfc00000f80f05ddf, 0x2ffbfffffc7fffee, 0xc0000ff5f807f, 0x7fffffffffffffe, 0x207f, 0x3bffffaffffff7d6, 0xf000205f, 0x1, 0xfffe1ffffffffeff, 0x1ffffffffeffff0f, 0x0, 0xf97fffffffffffff, 0xffffffffffff0000, 0xffffffff3c00ffff, 0xf7ffffffffff20bf, 0xffffffffffffffff, 0xffffffff3d7f3dff, 0x7f3dffffffff3dff, 0xffffffffff7fff3d, 0xffffffffff3dffff, 0x7ffffff, 0xffffffff0000ffff, 0x3f3fffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff9fffffffffff, 0xffffffff07fffffe, 0x1ffc7ffffffffff, 0xfffff800fffff, 0xddfff000fffff, 0xffcfffffffffffff, 0x108001ff, 0xffffffff00000000, 0x1ffffffffffffff, 0xffff07ffffffffff, 0x3fffffffffffff, 0x1ff0fff7fffffff, 0x1f3fffffff0000, 0xffff0fffffffffff, 0x3ff, 0xffffffff0fffffff, 0x1ffffe7fffffff, 0x8000008000000000, 0x7001, 0xffefffffffffffff, 0x1fef, 0xfc00f3ffffffffff, 0x3ffbfffffffff, 0x7fffffffffffff, 0x3ffffffffc00e000, 0xe7ffffffffff01ff, 0x46fde0000000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1fff8000000000, 0xffffffff3f3fffff, 0x3fffffffaaff3f3f, 0x5fdfffffffffffff, 0x1fdc1fff0fcf1fdc, 0x0, 0x8002000000000000, 0x1fff0000, 0x0, 0xf3ffbd503e2ffc84, 0xffffffff000043e0, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffc0000000000000, 0x3ffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xc781fffffffff, 0xffff20bfffffffff, 0x80ffffffffff, 0x7f7f7f7f007fffff, 0xffffffff7f7f7f7f, 0x800000000000, 0x0, 0x0, 0x0, 0x1f3e03fe000000e0, 0xfffffffffffffffe, 0xfffffffee07fffff, 0xf7ffffffffffffff, 0xfffeffffffffffe0, 0xffffffffffffffff, 0xffffffff00007fff, 0xffff000000000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0x1fff, 0x3fffffffffff0000, 0xc00ffff1fff, 0x8ff07fffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0xfffffffcff800000, 0xffffffffffffffff, 0xfffffffffffff9ff, 0xfffc000003eb07ff, 0xffffffffbf, 0xfffffffffffff, 0xffffffffffffffff, 0xe8fc00000000002f, 0xffff07fffffffc00, 0x1fffffff0007ffff, 0xfff7ffffffffffff, 0x7c00ffff00008000, 0x7fffffffffffff, 0xfc7fffff00003fff, 0x7fffffffffffffff, 0x3cffff38000005, 0xffff7f7f007e7e7e, 0xffff03fff7ffffff, 0xffffffffffffffff, 0x7ffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff000fffffffff, 0xffffffffffff87f, 0xffffffffffffffff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7ffdffe0f8007f, 0xffffffffffffffdb, 0x3ffffffffffff, 0xfffffffffff80000, 0x3fffffffffffffff, 0xffffffffffff0000, 0xfffffffffffcffff, 0xfff0000000000ff, 0x0, 0xffdf000000000000, 0xffffffffffffffff, 0x1fffffffffffffff, 0x7fffffe00000000, 0xffffffc007fffffe, 0x7fffffffffffffff, 0x1cfcfcfc, 0xb7ffff7fffffefff, 0x3fff3fff, 0xffffffffffffffff, 0x7ffffffffffffff, 0x0, 0x1fffffffffffff, 0x0, 0x0, 0x0, 0x0, 0xffffffff1fffffff, 0x1ffff, 0xffffe000ffffffff, 0x7ffffffffff07ff, 0xffffffff3fffffff, 0x3eff0f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00003fffffff, 0xfffffffff0fffff, 0xffff00ffffffffff, 0xf7ff000fffffffff, 0x1bfbfffbffb7f7ff, 0x0, 0x7fffffffffffff, 0xff003fffff, 0x7fdffffffffffbf, 0x0, 0x91bffffffffffd3f, 0x7fffff003fffff, 0x7fffffff, 0x37ffff00000000, 0x3ffffff003fffff, 0x0, 0xc0ffffffffffffff, 0x0, 0x3ffffffeeff06f, 0x1fffffff00000000, 0x1fffffff, 0x1ffffffeff, 0x3fffffffffffff, 0x7ffff003fffff, 0x3ffff, 0x0, 0xffffffffffffffff, 0x1ff, 0x7ffffffffffff, 0x7ffffffffffff, 0xffffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31bffffffffff, 0x0, 0xffff00801fffffff, 0xffff00000000003f, 0xffff000000000003, 0x7fffff0000001f, 0xffffffffffffffff, 0x3e00000000003f, 0x1ffffffffffffff, 0x1ffffff0004, 0x7ffffffffffff, 0x47ffffffff00f0, 0xffffffffffffffff, 0x1400c01e, 0xc09ffffffffbffff, 0x3, 0xffff01ffbfffbd7f, 0x1ffffffffff, 0xe3edfdfffff99fef, 0xfe081199f, 0x0, 0x0, 0xffffffffffffffff, 0x3800007bb, 0xffffffffffffffff, 0xb3, 0x0, 0x0, 0x7f3fffffffffffff, 0x3f000000, 0x7fffffffffffffff, 0x11, 0x13fffffffffffff, 0x0, 0x7ffe7ffffff, 0x7f, 0x0, 0x0, 0x1ffffffffffffff, 0x0, 0xffffffff00000000, 0x80000000ffffffff, 0x99bfffffff6ff27f, 0x7, 0xfffffcff00000000, 0x1afcffffff, 0x7fe7ffffffffffff, 0xffffffffffff0000, 0xffff000020ffffff, 0x1ffffffffffffff, 0x7f7ffffffffffdff, 0xfffc000000000001, 0x7ffefffffcffff, 0x0, 0xb47ffffffffffb7f, 0xfffffdbf000000cb, 0x17b7fff, 0x0, 0x0, 0x0, 0x0, 0x7fffff00000000, 0xc7fffffffffdffff, 0x1, 0x1000000000000, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x0, 0xffffffffffffffff, 0x7fffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0xffffffffffff0000, 0x1ffffffffffff, 0xffffffffffff, 0x7e, 0x0, 0x0, 0xffffffffffffffff, 0x7f, 0x0, 0x0, 0x1ffffffffffffff, 0xffff00007fffffff, 0x7fffffffffffffff, 0x3fffffff0000, 0xffffffffffff, 0xe0fffff80000000f, 0xffff, 0x0, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffff87ff, 0xffff80ff, 0x3000b00000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffff, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6fef000000000000, 0x40007ffffffff, 0xffff00f000270000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffffffff, 0xffffffffffffffff, 0x1fff07ffffffffff, 0x43ff01ff, 0x0, 0xffffffffffffffff, 0xffffffffffdfffff, 0xebffde64dfffffff, 0xffffffffffffffef, 0x7bffffffdfdfe7bf, 0xfffffffffffdfc5f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffff3fffffffff, 0xf7fffffff7fffffd, 0xffdfffffffdfffff, 0xffff7fffffff7fff, 0xfffffdfffffffdff, 0xff7, 0x7e07fffffff, 0x0, 0x0, 0x0, 0xffff07dbf9ffff7f, 0x3fffffffffff, 0x8000, 0x0, 0x3f801fffffffffff, 0x4000, 0x0, 0x0, 0x0, 0x0, 0x3fffffff0000, 0xfffffffffff, 0x0, 0x0, 0x0, 0xfffffff0000, 0x0, 0x0, 0x0, 0x7fff6f7f00000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1f, 0xffffffffffffffff, 0x88f, 0x0, 0x0, 0xaf7fe96ffffffef, 0x5ef7f796aa96ea84, 0xffffbee0ffffbff, 0x0, 0xffff000000000000, 0xffff03ffffff03ff, 0x3ff, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff, 0x3ffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff3fffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0003ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1ffffffff, 0x3fffffff, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffff07ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3392 bytes -enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x88], [ 0x100, 0x1a0, 0x4800], [ 0x402030202020100, 0xa09080207020605, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x20202020202020b, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000000000000, 0x5000400030002, 0x9000800070006, 0xd000c000b000a, 0xf00000000000e, 0x10000000000000, 0x14001300120011, 0x160015, 0x17, 0x0, 0x0, 0x190018, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b00000000, 0x1f001e001d001c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20000000000000, 0x2100000000, 0x24002300220000, 0x0, 0x2500000000, 0x28002700260000, 0x2c002b002a0029, 0x30002f002e002d, 0x3300320031, 0x37003600350034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x0, 0x0, 0x3a003900000000, 0x3b000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x3d000000000000, 0x3f003e0000, 0x0, 0x4000000000, 0x0, 0x42003a0041, 0x43, 0x450044, 0x0, 0x0, 0x0, 0x0, 0x0, 0x460000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0, 0x3f8, 0x0, 0x0, 0x0, 0xbffffffffffe0000, 0xb6, 0x7ff0000, 0x10000fffff800, 0x0, 0x3d9f9fc00000, 0xffff000000020000, 0x7ff, 0x1ffc000000000, 0x200ff80000000000, 0x3eeffbc00000, 0xe000000, 0xff000000, 0xfffffffbfffffc00, 0xdc0000000000000f, 0xc00feffff, 0xd00000000000000e, 0x4000000c0080399f, 0xd00000000000000e, 0x23000000023987, 0xd00000000000000e, 0xfc00000c00003bbf, 0xd00000000000000e, 0xc00e0399f, 0xc000000000000004, 0x803dc7, 0xd00000000000001f, 0xc00603ddf, 0xd00000000000000e, 0x8000c00603ddf, 0xd80000000000000f, 0xc00803ddf, 0xe, 0xc0000ff5f8400, 0x7f2000000000000, 0x7f80, 0x1ff2000000000000, 0x7f00, 0xc2a0000003000000, 0xfffe000000000000, 0x1ffffffffeffe0df, 0x40, 0x7ffff80000000000, 0x1e3f9dc3c00000, 0x3c00bffc, 0x0, 0x0, 0xe0000000, 0x0, 0x0, 0x1c0000003c0000, 0xc0000000c0000, 0xfff0000000000000, 0x200fffff, 0xb800, 0x0, 0x20000000060, 0x0, 0xfff0fff00000000, 0x0, 0x0, 0x0, 0xf800000, 0x9fffffff7fe00000, 0xffff000000000000, 0x7fff, 0xfff000000000001f, 0xff8000000001f, 0x3ffe00000007, 0xfffc000000000, 0xfffff000000000, 0x0, 0x0, 0x39021fffff70000, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x1ffffffff0000, 0x0, 0x0, 0x0, 0x3800000000000, 0x0, 0x8000000000000000, 0x0, 0xffffffff00000000, 0xfc0000000000, 0x0, 0x6000000, 0x0, 0x0, 0x3ff7800000000000, 0xc0000000, 0x3000000000000, 0x10f800000844, 0x0, 0xfff0000000000003, 0x8003ffff0000003f, 0x3fc000000000, 0xfff80, 0xfff800000000000f, 0x2000000001, 0x7ffe0000000000, 0x3800000000003008, 0xc19d000000000000, 0x60f80000000002, 0x0, 0x0, 0x0, 0x37f800000000, 0x40000000, 0x0, 0x0, 0x0, 0xffff0000ffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000000000000000, 0x0, 0x0, 0x0, 0x100000000, 0x0, 0x7c0000000000000, 0x0, 0x0, 0x870000000000f06e, 0x0, 0x0, 0x6000000000, 0xf000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180000000000, 0xe000000000000000, 0x0, 0x1ffc0, 0x3c, 0x0, 0xff00000000000007, 0x801900000000007f, 0x7ff000000000007, 0x4, 0x1fff8000000007, 0x8000000000060, 0xfff8000000000007, 0xde01, 0x40fff00000000000, 0x2, 0x0, 0x7ff80000000, 0xd80000000000000f, 0x1f1fcc0080399f, 0x0, 0x0, 0xffe0000000000000, 0x4000007f, 0xffff000000000000, 0xf, 0x0, 0x0, 0xff3f800000000000, 0x30000001, 0xffff000000000000, 0x1, 0xfff80000000000, 0x0, 0xfffe0000000, 0x0, 0x0, 0x0, 0x7fff00000000000, 0x0, 0x0, 0x0, 0x79bf000000000000, 0xd, 0x0, 0x11fcfe0000, 0x7bf80000000007fe, 0xffe0080, 0x3fffc00, 0x0, 0xff7f800000000000, 0x0, 0x7ffefffffc0000, 0x0, 0xb47e000000000000, 0xbf, 0xfb7c00, 0x0, 0x0, 0x0, 0x0, 0x78000000000000, 0xc7f000000000000b, 0x7, 0x0, 0x0, 0x0, 0x3fff81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f000000000000, 0x7f000000000000, 0x0, 0x0, 0x0, 0x0, 0xfffffffffffe8000, 0x780ff, 0x3001000000000, 0x0, 0x0, 0x60000000, 0x0, 0xffff3fffffffffff, 0x7f, 0x0, 0x0, 0x0, 0xf807e3e000000000, 0x3c0000000fe7, 0x0, 0x0, 0x1c, 0x0, 0x0, 0xf87fffffffffffff, 0x201fffffffffff, 0xfffef8000010, 0x0, 0x7dbf9ffff7f, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x400000000000, 0xf00000000000, 0x0, 0x0, 0x0, 0xf00000000000, 0x0, 0x0, 0x0, 0x7f0000, 0x0, 0x7f0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0]); -//2848 bytes -enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)([ 0x0, 0x20, 0xd0], [ 0x100, 0x2c0, 0x2500], [ 0x402030202020100, 0x908020207020605, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000200010000, 0x2000200020002, 0x2000200020002, 0x5000200040003, 0x7000600020002, 0x9000800060006, 0x6000b0006000a, 0x2000d000c000c, 0x20002000e0005, 0x2000f00020002, 0x2000200020002, 0x11000200100002, 0x1300120002000e, 0xc00140002, 0x2000200020015, 0x2000200020002, 0x19001800170016, 0x2000200020002, 0x20002001b001a, 0x1d001c00020002, 0x2000200020002, 0x2000200020002, 0x20002001e0002, 0x2000200020002, 0x2000020002001f, 0x2000200220021, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200060023, 0x250017000c0024, 0x400020002000c, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000e00020002, 0x27002600020002, 0x2a002900280002, 0x2000200230002, 0x2000200020002, 0x2e002d002c002b, 0x3200310030002f, 0x2000000330002, 0x36003500020034, 0x39003800040037, 0x2000200040002, 0x20002000c000c, 0x2003a0005000c, 0x2000c003b0002, 0x2000200020002, 0x23000c0002003c, 0x3d000c00020002, 0x2000200020002, 0x2000200020002, 0x200020002003e, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2003f00050003, 0x2000200020002, 0x2000200400002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2004200410002, 0x2000200020002, 0x43000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000500020002, 0x2000200040002, 0x2000200040002, 0x2000200020002, 0x2000c00440002, 0x2000200020002, 0x2004700460045, 0x2000200020002, 0x2004800020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x4000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x2000200020002, 0x3ff000000000000, 0x0, 0x720c000000000000, 0x0, 0x0, 0x0, 0x0, 0x3ff00000000, 0x0, 0x3ff000000000000, 0x0, 0x3ff, 0x0, 0xffc000000000, 0x0, 0x3f0ffc000000000, 0x0, 0xfcffc000000000, 0x0, 0x7ffc000000000, 0x0, 0x7f00ffc000000000, 0x0, 0x1ffffc07f000000, 0x0, 0x3ff0000, 0xfffff00000000, 0x0, 0x3ff0000, 0x0, 0x0, 0x1ffffe0000000000, 0x0, 0x1c00000000000, 0x0, 0x3ff03ff00000000, 0x0, 0xffc0, 0x0, 0x7ff0000, 0x3ff03ff, 0x0, 0x0, 0x3ff03ff, 0x0, 0x3f1000000000000, 0x3ff, 0x0, 0x0, 0xffffffffffff0000, 0x3e7, 0x0, 0x0, 0xffffffff00000000, 0xfffffff, 0xfffffc0000000000, 0x0, 0xffc0000000000000, 0xfffff, 0x0, 0x0, 0x2000000000000000, 0x70003fe00000080, 0x0, 0x3c0000, 0x0, 0x3ff00000000, 0xfffeff00, 0xfffe0000000003ff, 0x0, 0x3ff00000000, 0x0, 0x3f000000000000, 0x0, 0x0, 0x3ff000003ff0000, 0xfffffffffff80, 0x1ffffffffffffff, 0xc00, 0x0, 0x0, 0xffffffe00000000, 0xf00000000, 0x402, 0x0, 0x3e0000, 0x0, 0xfe000000ff000000, 0xff8000000000, 0xf800000000000000, 0xfc00000, 0x0, 0x3000000000000000, 0xfffffffffffcffff, 0x0, 0x60000000000001ff, 0xe0000000, 0xf80000000000, 0x0, 0xff000000ff000000, 0xfe0000000000, 0x0, 0x0, 0xfc00000000000000, 0x0, 0x7fffffff00000000, 0x7fe0000000, 0x1e0000, 0x0, 0xfe0, 0x0, 0xfffffffc0000, 0xffc0000000000000, 0x0, 0x0, 0x1ffffe03ff0000, 0xfff000000000000, 0x0, 0x0, 0x7ffff00000000, 0x0, 0x1fffffff0000, 0x0, 0x1fffff, 0xffffffffffffffff, 0x7fffffffffff, 0x0, 0x3fbff0000, 0x7fffff, 0x0, 0x0, 0xfffff000fffff, 0x0, 0x1ffffff00000000, 0x0, 0xffffffffffffc000, 0x0, 0xff80, 0x0, 0xfffe000000000000, 0x1eefffffffffff, 0x0, 0x3fffbffffffffffe, 0x0, 0x1fff, 0x0, 0x0, 0x3ff000000000000]); -//3360 bytes -enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x80], [ 0x100, 0x180, 0x4900], [ 0x402030202020100, 0xa09080207020605, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000100010000, 0x5000400030001, 0x1000800070006, 0xc000b000a0009, 0xe00010001000d, 0x1100100001000f, 0x15001400130012, 0x1000100010016, 0x18000100010017, 0x19000100010001, 0x10001001a0001, 0x1001d001c001b, 0x100010001001e, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x100200001001f, 0x24002300220021, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x27002600250001, 0x29000100280001, 0x10001002a0001, 0x2e002d002c002b, 0x30002f00010001, 0x1003300320031, 0x37003600350034, 0x3b003a00390038, 0x3e003d0001003c, 0x1000100010001, 0x100010001003f, 0x1000100010001, 0x40000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x42004100010001, 0x44004300010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010045, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1004600010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100470001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x8c00f7ee00000000, 0x28000000b8000001, 0x88c0088200000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000000000000, 0x80, 0x0, 0x0, 0xfc000000, 0x4000000000000600, 0x18000000000049, 0xe8003600, 0x3c0000000000, 0x0, 0x100000, 0x3fff, 0x0, 0x0, 0x380000000000000, 0x7fff000000000000, 0x40000000, 0x0, 0x0, 0x0, 0x1003000000000, 0x0, 0x2000000000000000, 0x0, 0x40000000000000, 0x0, 0x1000000000000, 0x0, 0x80000000000000, 0x10, 0x0, 0x0, 0x0, 0x0, 0x10000000000000, 0x0, 0xc008000, 0x0, 0x0, 0x3c0000000017fff0, 0x0, 0x20, 0x61f0000, 0x0, 0xfc00, 0x0, 0x800000000000000, 0x0, 0x1ff00000000, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x400000000000, 0x18000000, 0x380000000000, 0x60000000000000, 0x0, 0x0, 0x7700000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0xc0000000, 0x0, 0x3f7f00000000, 0x0, 0x0, 0x60000001fc000000, 0x0, 0xf000000000000000, 0xf800000000000000, 0xc000000000000000, 0x0, 0x800ff, 0xffff00ffffff0000, 0x600000007ffbffef, 0x6000, 0x0, 0x60000000f00, 0x0, 0x0, 0x0, 0x0, 0x3fff0000000000, 0x0, 0xffc000000060, 0x0, 0x0, 0x1fffff8, 0x300000000f000000, 0x0, 0x0, 0x0, 0xde00000000000000, 0x0, 0x1000000000000, 0x0, 0x0, 0xffff7fffffffffff, 0x3ffcffff, 0x0, 0x0, 0x20010000fff3ff0e, 0x0, 0x100000000, 0x800000000000000, 0x0, 0x0, 0x0, 0xc000000000000000, 0xe000, 0x4008000000000000, 0x0, 0xfc000000000000, 0x0, 0xf0000000000000, 0x0, 0x170000000000c000, 0xc00000000000, 0x80000000, 0x0, 0xc0003ffe, 0x0, 0xf0000000, 0x0, 0x30000c0000000, 0x0, 0x0, 0x0, 0x80000000000, 0xc000000000000000, 0x0, 0x0, 0x0, 0xffff000003ff0000, 0xd0bfff7ffff, 0x0, 0x0, 0xb80000018c00f7ee, 0x3fa8000000, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0x10000, 0x0, 0x800000000000, 0x0, 0x0, 0x0, 0x800000, 0x0, 0x0, 0x8000000080000000, 0x0, 0x0, 0x0, 0x0, 0x8000000001ff0000, 0x0, 0x7f000000000000, 0xfe00000000000000, 0x0, 0x1e000000, 0x0, 0x0, 0x0, 0x200000000000, 0x0, 0x0, 0x3e00000, 0x3c0, 0x0, 0x0, 0x3f80, 0xd800000000000000, 0x3, 0x0, 0x3000000000000f, 0x0, 0xe80021e0, 0x3f00000000000000, 0x0, 0x20000000000, 0x0, 0x0, 0x2c00f800, 0x0, 0x40, 0x0, 0x0, 0x0, 0xfffffe, 0x0, 0x1fff0000000e, 0x200000000000000, 0x0, 0x7000000000000000, 0x0, 0x0, 0x0, 0x800000000000000, 0x0, 0x0, 0x0, 0x0, 0x70, 0x0, 0x400000000, 0x8000000000000000, 0x7f, 0x7dc000000, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x300000000003e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x180000000000000, 0x0, 0xfff8, 0x0, 0x8000000000000000, 0x0, 0x1f000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6000000000000, 0x0, 0xc00000000000, 0x0, 0x20000000000000, 0xf80000000000000, 0x10, 0x0, 0x0, 0x0, 0x0, 0x7800000, 0x0, 0x0, 0x0, 0x0, 0x400000000, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0xf80, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]); -//3424 bytes -enum symbolTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0x80], [ 0x100, 0x180, 0x4b00], [ 0x503040303020100, 0xa09080307030306, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x303030303030303, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0xb000a00090008, 0xf000e000d000c, 0x11000100010010, 0x13001200010001, 0x15000100140001, 0x16000100010001, 0x1a001900180017, 0x1c00190019001b, 0x1e0019001d0019, 0x2100200001001f, 0x19002400230022, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100250001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x27000100010026, 0x2a002900010028, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x2b000100010001, 0x2e002d002c0001, 0x10001002f0001, 0x1000100010001, 0x1003100010030, 0x1000100010001, 0x1000100010001, 0xe000100010001, 0x1000100010001, 0x32000100010001, 0x1000100010001, 0x1000100010001, 0x33000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010034, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x35000100010001, 0x39003800370036, 0x3b003a00010001, 0x1003c00190019, 0x1000100010001, 0x1003e003d0001, 0x1000100010001, 0x1000100010001, 0x100410040003f, 0x19004400430042, 0x46004500190019, 0x49004800190047, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x7000081000000000, 0x5000000140000000, 0x113d37c00000000, 0x80000000800000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffafe0fffc003c, 0x0, 0x20000000000000, 0x30, 0x40000000000000, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0xe000, 0x0, 0xc9c0, 0x0, 0x0, 0x6000020040000000, 0x0, 0x0, 0x0, 0xc040000000000000, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0xc0c000000000000, 0x0, 0x0, 0x0, 0x2000000000000, 0x0, 0x1000000000000, 0x0, 0x7f8000000000000, 0x0, 0x8000000000000000, 0x0, 0x0, 0x0, 0x200000000008000, 0x0, 0x0, 0x8000000000000000, 0x0, 0x0, 0x0, 0x1500000fce8000e, 0x0, 0xc000000000000000, 0x1e0dfbf, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x200000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x1, 0x0, 0xffffffffc0000000, 0x0, 0x1ff007fe00000000, 0x0, 0x0, 0x0, 0x0, 0xa000000000000000, 0x6000e000e000e003, 0x0, 0x1c00000000040010, 0xffffffff00001c00, 0x1, 0xc0042afc1d0037b, 0xbc1f, 0xffffffffffff0c00, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffff9fffffff0ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x7fffffffff, 0x7ff, 0xfffffffff0000000, 0x3ffffffffff, 0xffffffffffffffff, 0xffffffffff, 0xfffffffffff00000, 0xffff003fffffff9f, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffe000007, 0xcffffffff0ffffff, 0xffffffffffffffff, 0xffcfffffffffffff, 0xffffffffffbfffff, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x7e000000000, 0x0, 0x30000, 0xfffffffffbffffff, 0xfffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfff0000003fffff, 0xc0c00001000c0010, 0x0, 0x18000000, 0x0, 0x0, 0x0, 0xffc30000, 0xfffffffff, 0xfffffc007fffffff, 0xffffffff000100ff, 0x1fffffffffc00, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0x0, 0x0, 0xffffffffffff0000, 0x7f, 0x3007fffff, 0x0, 0x600, 0x0, 0x3c00f0000000000, 0x0, 0x0, 0x0, 0x0, 0x380000000000000, 0x0, 0x0, 0x0, 0xc0008000000, 0x0, 0x0, 0x20000000000, 0x0, 0xfffc000000000000, 0x7, 0x0, 0xffff, 0x0, 0xf000000000008000, 0x0, 0x27400000000, 0x0, 0x0, 0x4000000070000810, 0x50000001, 0x0, 0x30007f7f00000000, 0xff80000000000000, 0xfe00000000000000, 0x11fff73ff, 0x1fffffffffff0000, 0x0, 0x180000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x3ffffffe00000, 0xf000000000000000, 0x20, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0xffffffffffff0000, 0xffffffffffffffff, 0xf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffffffffffff, 0xfffffe7fffffffff, 0x1c1fffffffff, 0xffffc3fffffff018, 0x7ffffffffff, 0xffffffffffffffff, 0x23, 0x0, 0x0, 0xffffffffffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800000008000002, 0x20000000200000, 0x800000008000, 0x20000000200, 0x8, 0x780000000000000, 0xffdfe00000000000, 0x6f, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000000000000, 0x0, 0x0, 0x1100000000000, 0x0, 0x400000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000000000000, 0xffff0fffffffffff, 0xffffffffffffffff, 0xfffe7fff000fffff, 0x3ffffffffefffe, 0xffffffffffffe000, 0xffffffffffffffff, 0x3fffffffffff, 0xffffffc000000000, 0xfffffffffff0007, 0x3f000301ff, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1fff1ffff0ffffff, 0xffffffffffffffff, 0xf87fffffffffffff, 0xffffffffffffffff, 0x10fff03ffffff, 0xffffffffffff0fff, 0xffffffff03ff00ff, 0x33fffffff00ff, 0x0, 0xffffffffffffffff, 0x1fff3fff000fffff, 0xbfffffffffff01ff, 0x1ff01ff0fffc03f, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffff7ffff, 0x7ff, 0x0, 0x0, 0x0, 0x0]); -//6048 bytes -enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)([ 0x0, 0x20, 0xd0], [ 0x100, 0x2c0, 0x8900], [ 0x504030202020100, 0xd0c0b0a09080706, 0x100f0e0202020202, 0x1313131313131211, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131313, 0x1313131313131314, 0x1313131313131313, 0x1313131313131313, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2000100010000, 0x5000400030001, 0x9000800070006, 0xd000c000b000a, 0x10000f0001000e, 0x12001100010001, 0x16001500140013, 0x18000100010017, 0x10001001a0019, 0x100010001001b, 0x1c000100010001, 0x20001f001e001d, 0x1002300220021, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x26002500010024, 0x2a002900280027, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x2b000100010001, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2e002d0001002c, 0x310030002f0001, 0x35003400330032, 0x38000100370036, 0x3c003b003a0039, 0x40003f003e003d, 0x44004300420041, 0x48004700460045, 0x4c004b004a0049, 0x50004f004e004d, 0x51000100010001, 0x2c002c00530052, 0x2c002c002c002c, 0x54002c002c002c, 0x1000100010001, 0x2c002c002c0055, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c005600010001, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x58005700010001, 0x5a0059002c002c, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x5b000100010001, 0x1000100010001, 0x2c002c005d005c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x5e002c002c002c, 0x2c0060005f0001, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c0061, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x62002c002c002c, 0x66006500640063, 0x6a006900680067, 0x2c006b00010001, 0x6c002c002c002c, 0x2c006f006e006d, 0x71002c002c0070, 0x2c002c00730072, 0x2c007600750074, 0x1007900780077, 0x7b007a00010001, 0x7e007d0001007c, 0x2c002c002c002c, 0x1000100010001, 0x1007f00010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x80000100010001, 0x1000100010081, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1008200010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x83000100010001, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c008400010001, 0x2c002c002c002c, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x85000100010001, 0x1000100010001, 0x1000100010001, 0x1000100010001, 0x86000100010001, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c0087002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0x2c002c002c002c, 0xffffffff00000000, 0x7fffffffffffffff, 0xffffdfff00000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfcffffffffffffff, 0xfffffffbffffd7f0, 0xffffffffffffffff, 0xfffeffffffffffff, 0xfffffffffe7fffff, 0xfffffffffffee7ff, 0x1f87ffffff00ff, 0xffffffffefffffc0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffdfffffff, 0xffffffffffff3fff, 0xffffffffffffe7ff, 0x3ffffffffffff, 0xe7ffffffffffffff, 0x7fff3fffffffffff, 0xffff07ff4fffffff, 0xffffffffff007fff, 0xfffffffbffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xf3c5fdfffff99fef, 0x7fffffcfb080799f, 0xd36dfdfffff987ee, 0x7fffc05e023987, 0xf3edfdfffffbbfee, 0xfe03ffcf00013bbf, 0xf3edfdfffff99fee, 0xffffcfb0e0399f, 0xc3ffc718d63dc7ec, 0x7ffffc000813dc7, 0xf3fffdfffffddfff, 0xff80ffcf27603ddf, 0xf3effdfffffddfff, 0xeffcf60603ddf, 0xfffffffffffddfff, 0xffffffcffff0fddf, 0x2ffbfffffc7fffee, 0x1cffc0ff5f847f, 0x87fffffffffffffe, 0xfffffff, 0x3fffffaffffff7d6, 0xf3ff7f5f, 0xffffffffffffffff, 0xfffe1ffffffffeff, 0xdffffffffeffffff, 0x7ffdfff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff20bf, 0xffffffffffffffff, 0xffffffff3d7f3dff, 0x7f3dffffffff3dff, 0xffffffffff7fff3d, 0xffffffffff3dffff, 0x1fffffffe7ffffff, 0xffffffff03ffffff, 0x3f3fffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff1fffffff, 0x1ffffffffffffff, 0x7fffff803fffff, 0xddfff000fffff, 0xffffffffffffffff, 0x3ff03ff3fffffff, 0xffffffff03ffbfff, 0x1ffffffffffffff, 0xffff07ffffffffff, 0x3fffffffffffff, 0xfff0fff7fffffff, 0x1f3ffffffffff1, 0xffff0fffffffffff, 0xffffffffc7ff03ff, 0xffffffffcfffffff, 0x9fffffff7fffffff, 0xffff3fff03ff03ff, 0x7fff, 0xffffffffffffffff, 0x7fffffffffff1fff, 0xffffffffffffffff, 0xf00fffffffffffff, 0xf8ffffffffffffff, 0xffffffffffffe3ff, 0xe7ffffffffff01ff, 0x7ffffffffff00ff, 0xffffffff3f3fffff, 0x3fffffffaaff3f3f, 0xffdfffffffffffff, 0x7fdcffffefcfffdf, 0xffff80ffffff07ff, 0xfff30000ffffffff, 0xffffffff1fff7fff, 0x1ffffffff0001, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff0fff, 0xffffffffffffffff, 0x7fffffffff, 0xffffffff000007ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffcfffffffffffff, 0xffffffffffbfffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfe0fffffffffffff, 0xffff20bfffffffff, 0x800180ffffffffff, 0x7f7f7f7f007fffff, 0xffffffff7f7f7f7f, 0xffffffffffffffff, 0x3fffffff, 0xfffffffffbffffff, 0xfffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfff0000003fffff, 0xffffffffffffffff, 0xfffffffffffffffe, 0xfffffffffe7fffff, 0xffffffffffffffff, 0xfffeffffffffffe0, 0xffffffffffffffff, 0xffffffffffff7fff, 0xffff000fffffffff, 0xffffffff7fffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff1fff, 0xffffffffffff007f, 0xfffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffc000003eb07ff, 0x3ff1fffffffffff, 0xffffffffffffff, 0xffffffffffffffff, 0xffffffff03ffc03f, 0xffffffffffffffff, 0x1fffffff800fffff, 0xffffffffffffffff, 0x7fffffffc3ffbfff, 0x7fffffffffffff, 0xfffffffff3ff3fff, 0xffffffffffffffff, 0x7ffffff8000007, 0xffff7f7f007e7e7e, 0xffff0fffffffffff, 0xffffffffffffffff, 0x3ff3fffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff000fffffffff, 0xffffffffffff87f, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffff3fffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x5f7fffffe0f8007f, 0xffffffffffffffdb, 0xffffffffffffffff, 0xfffffffffff80007, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffffcffff, 0xffff0000000080ff, 0xffffffff03ffffff, 0xffdf0f7ffff7ffff, 0xffffffffffffffff, 0x1fffffffffffffff, 0xfffffffffffffffe, 0xffffffffffffffff, 0x7fffffffffffffff, 0x30007f7f1cfcfcfc, 0xb7ffff7fffffefff, 0x3fff3fff, 0xffffffffffffffff, 0x7ffffffffffffff, 0xff8fffffffffff87, 0xffffffffffffffff, 0x11fff7fff, 0x3fffffffffff0000, 0x0, 0x0, 0xffffffff1fffffff, 0xfffffff0001ffff, 0xffffe00fffffffff, 0x7ffffffffff07ff, 0xffffffffbfffffff, 0x3fff0f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff03ff3fffffff, 0xfffffffff0fffff, 0xffff00ffffffffff, 0xf7ff800fffffffff, 0x1bfbfffbffb7f7ff, 0x0, 0x7fffffffffffff, 0xff003fffff, 0x7fdffffffffffbf, 0x0, 0x91bffffffffffd3f, 0xffffffffffbfffff, 0xff807fffffff, 0xf837ffff00000000, 0x83ffffff8fffffff, 0x0, 0xf0ffffffffffffff, 0xfffffffffffcffff, 0x873ffffffeeff06f, 0xffffffff01ff01ff, 0xffffffff, 0x7ff87fffffffff, 0xfe3fffffffffffff, 0xff07ffffff3fffff, 0xfe001e03ffff, 0x0, 0xffffffffffffffff, 0x1ff, 0x7ffffffffffff, 0xfc07ffffffffffff, 0x3ff00ffffffffff, 0x0, 0x0, 0x0, 0x0, 0x7fffffff00000000, 0x33bffffffffff, 0xe000000000000000, 0xffff00ffffffffff, 0xffff000003ffffff, 0xffff0000000003ff, 0x7fffff00000fff, 0xffffffffffffffff, 0x803ffffffffc3fff, 0xdfffffffffffffff, 0x3ff01ffffff0007, 0xffdfffffffffffff, 0x7fffffffff00ff, 0xffffffffffffffff, 0x1ffffeffffffff, 0xfffffffffffbffff, 0x3, 0xffff03ffbfffbd7f, 0x3ff07ffffffffff, 0xfbedfdfffff99fef, 0x1f1fcfe081399f, 0x0, 0x0, 0xffffffffffffffff, 0x3efffffff, 0xffffffffffffffff, 0x3ff00ff, 0x0, 0x0, 0xff3fffffffffffff, 0x3fffffff, 0xffffffffffffffff, 0x1fff03ff001f, 0x3ffffffffffffff, 0x3ff, 0xffff0fffe7ffffff, 0x7f, 0x0, 0x0, 0xfffffffffffffff, 0x0, 0xffffffff00000000, 0x8007ffffffffffff, 0xf9bfffffff6ff27f, 0x3ff007f, 0xfffffcff00000000, 0x1ffcffffff, 0xffffffffffffffff, 0xffffffffffff00ff, 0xffff0007ffffffff, 0x1ffffffffffffff, 0x3ff, 0x0, 0x0, 0x0, 0xff7ffffffffffdff, 0xffff1fffffff003f, 0x7ffefffffcffff, 0x0, 0xb47ffffffffffb7f, 0xfffffdbf03ff00ff, 0x3ff01fb7fff, 0x0, 0x0, 0x0, 0x0, 0x1ffffff00000000, 0xc7fffffffffdffff, 0x3ffffff, 0x1000000000000, 0x8003ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ffffff, 0x0, 0xffffffffffffffff, 0x1f7fffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0xffffffffffff0000, 0x7ffffffffffff, 0xffffffffffff, 0x3fffff, 0x0, 0x0, 0xffffffffffffffff, 0x7f, 0x0, 0x0, 0x1ffffffffffffff, 0xffffc3ff7fffffff, 0x7fffffffffffffff, 0x3f3fffffff03ff, 0xffffffffffffffff, 0xe0fffffbfbff003f, 0xffff, 0x0, 0x0, 0xffffffffffffffff, 0x7ffffff, 0x0, 0xffffffffffffffff, 0xffffffffffff87ff, 0xffff80ff, 0x3001f00000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffff, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6fef000000000000, 0x40007ffffffff, 0xffff00f000270000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffffffff, 0xffffffffffffffff, 0x1fff07ffffffffff, 0xf3ff01ff, 0x0, 0xffff3fffffffffff, 0xffffffffffff007f, 0xffffffffffffffff, 0xf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffffffffffff, 0xfffffe7fffffffff, 0xf807ffffffffffff, 0xffffffffffffffff, 0x7ffffffffff, 0xffffffffffffffff, 0x3f, 0x0, 0xfffff000fffff, 0xffffffffffffffff, 0x1ffffff007fffff, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffdfffff, 0xebffde64dfffffff, 0xffffffffffffffef, 0x7bffffffdfdfe7bf, 0xfffffffffffdfc5f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffff3fffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffcfff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffef8000fff, 0x0, 0x7e07fffffff, 0x0, 0x0, 0x0, 0xffff07dbf9ffff7f, 0x3fffffffffff, 0x8000, 0x0, 0x3fff1fffffffffff, 0xc3ff, 0x0, 0x0, 0x0, 0x0, 0x7fffffff0000, 0x83ffffffffffffff, 0x0, 0x0, 0x0, 0x3ffffffffff0000, 0x0, 0x0, 0x0, 0x7fff6f7f00000000, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x7fff9f, 0xffffffffffffffff, 0xc3ff0fff, 0x0, 0x0, 0x0, 0xfffe000000000000, 0x1fffffffffffff, 0x0, 0x3ffffffffffffffe, 0x0, 0x0, 0x0, 0xaf7fe96ffffffef, 0x5ef7f796aa96ea84, 0xffffbee0ffffbff, 0x3000000000000, 0xffff0fffffffffff, 0xffffffffffffffff, 0xfffe7fff000fffff, 0x3ffffffffefffe, 0xffffffffffffffff, 0xffffffffffffffff, 0x3fffffffffff, 0xffffffc000000000, 0xfffffffffff0007, 0x3f000301ff, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1fff1ffff0ffffff, 0xffffffffffffffff, 0xf87fffffffffffff, 0xffffffffffffffff, 0x10fff03ffffff, 0xffffffffffff0fff, 0xffffffff03ff00ff, 0x33fffffff00ff, 0x0, 0xffffffffffffffff, 0x1fff3fff000fffff, 0xbfffffffffff01ff, 0x1ff01ff0fffc03f, 0xffffffffffffffff, 0xffffffffffffffff, 0xfffffffffff7ffff, 0x3ff0000000007ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff, 0x3ffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff3fffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0003ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1ffffffff, 0x3fffffff, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffff07ff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff, 0x0, 0x0, 0x0, 0x0]); -//4784 bytes -enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)([ 0x0, 0x10, 0x4c, 0x148], [ 0x80, 0xf0, 0x3f0, 0x4380], [ 0x706050403020100, 0xb0b0b0a09080101, 0xb0b0b0b0b0b0b0b, 0xb0b0b0b0b0b0b0b, 0xb0b0b0b0b0b0b0b, 0xb0b0b0b0b0b0b0b, 0xb0b0b0b0b0b0b0b, 0xd0101010b0b0b0c, 0xd010101, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000200010000, 0x7000600050004, 0xb000a00090008, 0xd000d000d000c, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000f000e000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d0010000d, 0xd000d000d000d, 0x120011000d000d, 0x16001500140013, 0x1a001900180017, 0x1e001d001c001b, 0x1d001d001f000d, 0x1d001d0020001d, 0x1d001d001d001d, 0x220021001d001d, 0xd000d000d000d, 0x24000d0023000d, 0x1d001d001d001d, 0x25001d001d001d, 0x27001d001d0026, 0x28001d001d001d, 0x2c002b002a0029, 0x30002f002e002d, 0x1d003300320031, 0xd000d000d000d, 0xd000d000d000d, 0xd000d0034000d, 0xd00360035000d, 0x37000d000d000d, 0xd000d000d000d, 0x1d0038000d000d, 0x1d0039001d001d, 0xd000d000d000d, 0xd000d000d003a, 0x1d001d001d003b, 0x1d001d001d001d, 0x1d001d001d001d, 0x1d001d001d001d, 0x1d001d001d001d, 0x1d001d001d001d, 0x1d001d001d003c, 0x1d001d001d001d, 0x1d001d001d001d, 0x1d001d001d001d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0x3d000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0xd000d000d000d, 0x3d000d000d000d, 0x0, 0x0, 0x0, 0x200010000, 0x0, 0x6000500040003, 0x0, 0xa000900080007, 0xd000c000b, 0xf000e00000000, 0x13001200110010, 0x17001600150014, 0x1b001a00190018, 0x1f001e001d001c, 0x23002200210020, 0x26002500240000, 0x27000000000000, 0x0, 0x2a002900280000, 0x2e002d002c002b, 0x0, 0x0, 0x30002f00000000, 0x33000000320031, 0x3500340030002d, 0x39003800370036, 0x3d003c003b003a, 0x3f0000003e0000, 0x43004200410040, 0x0, 0x0, 0x47004600450044, 0x4a004900480000, 0x4b00000000, 0x0, 0x0, 0x4d004c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f004e0000, 0x50000000000000, 0x54005300520051, 0x57005600550000, 0x58000000000000, 0x400590000, 0x5c005b0000005a, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f005e00000000, 0x0, 0x61000000000060, 0x62000000000000, 0x64000000610063, 0x66000000650000, 0x69000000680067, 0x6b00000038006a, 0x0, 0x0, 0x0, 0x6c005c00000000, 0x0, 0x0, 0x6e0000006d0000, 0x7100000070006f, 0x0, 0x73007200000000, 0x7500000074002d, 0x77007600000059, 0x7a000000790078, 0x7d007c0000007b, 0x7f002f007e007e, 0x83008200810080, 0x85008400000000, 0x7e008800870086, 0x0, 0x7e008a00890067, 0x8d008c004f008b, 0x72008f007e008e, 0x93009200910090, 0x7e009600950094, 0x99009800970000, 0x7e007e007e009a, 0x9d009c009b007e, 0xa0009f009e0086, 0xa2000000a10000, 0xa4000000a30046, 0xa800a700a600a5, 0x7e007e00aa00a9, 0xac000000ab0000, 0x5500ad007e007e, 0xb000af00ae0000, 0x7e007e00b200b1, 0xb500b4007e00b3, 0xb900b800b700b6, 0x3000bb00ba0000, 0x7e007e007e00b0, 0x7e00be00bd00bc, 0x7e00c100c000bf, 0xc2007e007e007e, 0xc500c4006e00c3, 0x0, 0x0, 0x0, 0x7e006e00000000, 0xc60000, 0x7e007e00c70000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x9800c8007e007e, 0x7e007e00c90000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x0, 0x0, 0x7e007e00b20000, 0x7e007e007e007e, 0x0, 0x0, 0xcb007600ca0030, 0x7e00cd00cc0000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e00ce0000007e, 0xd100d000cf0000, 0x0, 0x0, 0x0, 0x61000000000000, 0xc9000000000000, 0x7e007e007e0097, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0xd2007e007e007e, 0x0, 0xd400d3, 0xb3000000000000, 0x7e007e007e007e, 0x7e00d600d50000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0xc70000005f006d, 0x35000000000000, 0xd80000000000d7, 0xda007e00d90000, 0x7e007e00db0000, 0xde00dd00dc0000, 0xe000df, 0xe100000000, 0xe2000000000000, 0x0, 0x0, 0x7e00e300000000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e007e007e00e4, 0x7e00e700e600e5, 0x7e007e00e900e8, 0xeb00ea007e007e, 0x7e007e007e007e, 0xec007e007e007e, 0x7e007e007e007e, 0x7e007e007e007e, 0xed007e007e007e, 0xee000000000000, 0x7e007e00ef0000, 0x7e007e007e007e, 0x7e007e007e007e, 0x7e00f100f0007e, 0x7e007e007e00f2, 0xf600f500f400f3, 0x7e007e007e007e, 0xf800f700000038, 0xf900e600000000, 0x7e007e00fb00fa, 0x0, 0x0, 0x0, 0xfc000000000000, 0xfe000000fd0000, 0x7e010000ff004b, 0x0, 0x103010201010000, 0x105010400000000, 0x0, 0x0, 0x92000000000000, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x106, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10700000000, 0x0, 0x0, 0x0, 0x0, 0x108000000000000, 0x0, 0x0, 0x7e007e007e0055, 0x7e007e007e007e, 0x0, 0x0, 0x0, 0x1090000, 0x0, 0x0, 0x0, 0x7e010a00000000, 0x7e007e0000010b, 0x10a000000000000, 0x7e007e007e007e, 0x7e007e007e007e, 0x0, 0x0, 0x0, 0x10c000000000000, 0x0, 0x0, 0x0, 0x10c000000000000, 0x0, 0x300000000000000, 0x40000280f, 0x1000000000000, 0x1800000, 0x11800, 0xffe078000000ff00, 0x4000, 0x1800, 0xfffc000000000000, 0x1800000000000000, 0x8000c00000000000, 0xf800b0000000, 0xfc8000, 0xc3a020000066010, 0x800000304f7f8660, 0x2c92020000067811, 0xff80003fa1fdc678, 0xc12020000044011, 0x1fc0030fffec440, 0xc12020000066011, 0xff0000304f1fc660, 0x3c0038e729c23813, 0xf800003fff7ec238, 0xc00020000022000, 0x7f0030d89fc220, 0xc10020000022000, 0xfff100309f9fc220, 0x22000, 0x30000f0220, 0xd004000003800011, 0xffe3003f00a07b80, 0x7800000000000001, 0xfffffffff0000000, 0xc000005000000829, 0xffffffff0c0080a0, 0x1e00000000100, 0x2000000001000000, 0xfffffffff8002000, 0xdf40, 0xc280c200, 0x80c200000000c200, 0x8000c2, 0xc20000, 0xe000000018000000, 0xfc000000, 0xc0c0000000000000, 0xe0000000, 0xfe00000000000000, 0xff8000007fc00000, 0xfff22000fff00000, 0xfc00fc00c0000000, 0xf80000000000, 0xffc0000000000000, 0xf000f00080000000, 0xffe0c0000000000e, 0xf00000000000, 0x3800fc00, 0x30000000, 0x6000000080000000, 0xc000fc00fc00, 0xffffffffffff8000, 0x800000000000e000, 0xff0000000000000, 0x700000000000000, 0x1c00, 0x180000000000fe00, 0xf80000000000ff00, 0xc0c00000, 0xc00000005500c0c0, 0x20000000000000, 0x8023000010300020, 0xc002000000000, 0xe0008000, 0xfffe00000000fffe, 0xf000, 0xffffff8000000000, 0xfffff800, 0x30000000000000, 0x400000, 0x1f0000000000000, 0xdf4000000000, 0x7ffe7f0000000000, 0x80808080ff800000, 0x80808080, 0xffffffffc0000000, 0x4000000, 0xfff0000000000000, 0xf000ffffffc00000, 0x1, 0x100000000001f, 0x8000, 0xfff000000000, 0x80000000, 0xe000, 0xff80, 0xfffff00000000000, 0xff00000000000000, 0x3fffffc14f800, 0xfc00e00000000000, 0xfc003fc0, 0xe00000007ff00000, 0x800000003c004000, 0xff80000000000000, 0xc00c000, 0xff80000007fffff8, 0x8080ff818181, 0xfc00c00000000000, 0xf000000000000780, 0xc00000000000, 0xfffffffffc000000, 0xa08000001f07ff80, 0x24, 0x7fff8, 0x30000, 0xffffffff7f00, 0x20f08000080000, 0x6000000000000000, 0x8000000000000000, 0xc1ff8080e3030303, 0x4800008000001000, 0xffffffffc000c000, 0xf800000000000000, 0x70000000000078, 0xfffffffee0008000, 0xc00000000000ffff, 0xffffffffffffffff, 0xf0000000fffe0000, 0x1ff000000000, 0xf80000000000f800, 0x40000000, 0xffffffffffc000f0, 0xfc00c0000000, 0xf000000000f00000, 0xff0000000000, 0x8007ff000000000, 0xe404000400480800, 0xffffff00ffc00000, 0xf802000000000040, 0x6e400000000002c0, 0xffff007f80000000, 0x7c80000ffffffff, 0x7c00000070000000, 0xf00000000000000, 0x78c0000001100f90, 0xfe00fe00, 0xffffffff00000000, 0xff80078000000000, 0x1c0000000000000, 0xf8000000c00000, 0xffff01ffe1fc0000, 0xfffffffffffffe00, 0xfff8000000000000, 0x3f8000000000000, 0xfc00ff0000000000, 0x80000000ffffffff, 0xfffcc40000000000, 0x1fffffffffffffff, 0xfffffc000000, 0xfffffffffc00, 0xff800000fffff000, 0x7fc000000003c000, 0xfc00fe000000dff8, 0xff8000000000ff00, 0xffe0000100000000, 0x40000, 0xfffffffffffffffc, 0xfc0040004280, 0xfc00f80000000000, 0x412020000066010, 0xffe0e0301f7ec660, 0xfffffffc10000000, 0xfffffffffc00ff00, 0xc0000000000000, 0xffffe000fc00ffe0, 0xfc00000000000000, 0xfffffffffffffc00, 0xf00018000000, 0xffffffffffffff80, 0xf000000000000000, 0xffffffff, 0x7ff8000000000000, 0x640000000900d80, 0xfffffffffc00ff80, 0x300ffffffff, 0xffffffe003000000, 0xff00, 0xfff800000000, 0x80000000000200, 0xe0000000ffc0, 0xff80010000030000, 0x4b80000000000480, 0x240fc00ff00, 0xfffffc00fe048000, 0xfe000000ffffffff, 0x3800000000020000, 0xfffeffffffffffff, 0x7ffc000000000000, 0xffe0800000000000, 0xfffffffffffffff0, 0xffff, 0xffffffffffc00000, 0x3c0080000000, 0xffc0c0000000fc00, 0x1f0000040400ffc0, 0xffffffffffff0000, 0xfffffffff8000000, 0x7800, 0xffffffff00007f00, 0xfffcffe0ffffffff, 0x9010ffffffffffff, 0xfffbfff800000000, 0xff0fffd8ffff, 0xe000f80000000000, 0xfffffff00c00fe00, 0x18000000000, 0xfffff80000000000, 0xffffffffffffffc0, 0xfff00000fff00000, 0xfe000000ff800000, 0x200000, 0x1400219b20000000, 0x10, 0x8400000020201840, 0x203a0, 0xc000000000, 0x3000, 0xffff000107fff000, 0xfffff81f80000000, 0xf82406000080, 0xffffc00000000000, 0xffffffffffff7fff, 0xc000e00000000000, 0xffffffffffff3c00, 0xffff80000000ffff, 0x7c00000000000000, 0xfc0000000000ffff, 0x80009080ffffffff, 0xffffffffff800060, 0xffffffff3c00f000, 0x1ffffffffffff, 0xffe0000000000000, 0xc000000000000001, 0xf508016900000010, 0xa10808695569157b, 0xf0000411f0000400, 0xfffcffffffffffff, 0x18000fff00000, 0xffc0000000010001, 0x3fffffffff, 0xf00000000000fff8, 0xffffffc0fffcfe00, 0xe000e0000f000000, 0x780000000000000, 0xfffef000fc000000, 0xfc00ff00, 0xfffcc0000000ff00, 0xe000c000fff00000, 0x400000000000fe00, 0xfe00fe00f0003fc0, 0x80000, 0xfc00fffffffff800, 0xc0000000, 0xfffc00000000, 0xfffffffe00000000, 0xf800, 0xffff000000000000, 0xfffffffd, 0xc000000000000000, 0xc000000000000000]); -enum MAX_SIMPLE_LOWER = 1433; -enum MAX_SIMPLE_UPPER = 1450; -enum MAX_SIMPLE_TITLE = 1454; -//10496 bytes -enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xf80], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15000000000000, 0x0, 0x0, 0x16000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1700000000, 0x1900180000, 0x1d001c001b001a, 0x210020001f001e, 0x0, 0x2300220000, 0x0, 0x0, 0x24000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28002700260025, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b002a0000, 0x2f002e002d002c, 0x0, 0x0, 0x0, 0x3100300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, 0x0, 0x330000, 0x0, 0x0, 0x0, 0x0, 0x36000000350034, 0x3700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c003b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff001affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5aaffffffffffff, 0x1e001d001c001b, 0x2200210020001f, 0x26002500240023, 0x2a002900280027, 0x2e002d002c002b, 0xffff00310030002f, 0x35003400330032, 0x39003800370036, 0x3bffff003affff, 0x3dffff003cffff, 0x3fffff003effff, 0x41ffff0040ffff, 0x43ffff0042ffff, 0x45ffff0044ffff, 0x47ffff0046ffff, 0x49ffff0048ffff, 0x4bffff004affff, 0x4dffff004cffff, 0x4fffff004effff, 0x51ffff0050ffff, 0x53ffff005205ac, 0x55ffff0054ffff, 0xffff0056ffffffff, 0xffff0058ffff0057, 0xffff005affff0059, 0xffff005cffff005b, 0x5effff05c9005d, 0x60ffff005fffff, 0x62ffff0061ffff, 0x64ffff0063ffff, 0x66ffff0065ffff, 0x68ffff0067ffff, 0x6affff0069ffff, 0x6cffff006bffff, 0x6effff006dffff, 0x70ffff006fffff, 0x72ffff0071ffff, 0x74ffff0073ffff, 0xffff0075ffffffff, 0x780077ffff0076, 0x7affffffff0079, 0xffffffff007bffff, 0xffffffffffff007c, 0xffffffffffff007d, 0xffff007effffffff, 0xffffffff007fffff, 0xffff00810080ffff, 0xffff0082ffffffff, 0x84ffff0083ffff, 0xffffffff0085ffff, 0xffffffffffff0086, 0xffffffff0087ffff, 0xffffffffffff0088, 0xffff008affff0089, 0xffffffff008bffff, 0x8dffff008cffff, 0xffffffffffffffff, 0xffff008f008effff, 0x92ffff00910090, 0xffff0094ffff0093, 0xffff0096ffff0095, 0xffff0098ffff0097, 0xffff009affff0099, 0x9dffff009c009b, 0x9fffff009effff, 0xa1ffff00a0ffff, 0xa3ffff00a2ffff, 0xa5ffff00a4ffff, 0xa700a6ffff05d1, 0xffffffff00a8ffff, 0xaaffff00a9ffff, 0xacffff00abffff, 0xaeffff00adffff, 0xb0ffff00afffff, 0xb2ffff00b1ffff, 0xb4ffff00b3ffff, 0xb6ffff00b5ffff, 0xb8ffff00b7ffff, 0xbaffff00b9ffff, 0xbcffff00bbffff, 0xbdffffffffffff, 0xbfffff00beffff, 0xc1ffff00c0ffff, 0xc3ffff00c2ffff, 0xc5ffff00c4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xc7ffffffff00c6, 0xffff00c9ffff00c8, 0xcaffffffffffff, 0xccffff00cbffff, 0xceffff00cdffff, 0xd200d100d000cf, 0xd500d4ffff00d3, 0xd7ffff00d6ffff, 0xffffffffffff00d8, 0xdbffff00da00d9, 0xffff00dd00dcffff, 0xe100e000df00de, 0xe3ffffffff00e2, 0xffff00e500e4ffff, 0xffffffff00e6ffff, 0xffffffffffffffff, 0xffffffff00e7ffff, 0xea00e9ffff00e8, 0xebffffffffffff, 0xef00ee00ed00ec, 0xffffffffffff00f0, 0xffff00f1ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00f300f2ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff00f4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xf6ffff00f5ffff, 0xf7ffffffffffff, 0xf8ffffffffffff, 0xffffffff00fa00f9, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff05cb, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfe00fd00fc00fb, 0x101010000ff05ce, 0x105010401030102, 0x109010801070106, 0x10d010c010b010a, 0x1110110010f010e, 0x115011401130112, 0x119011801170116, 0xffff011c011b011a, 0xffffffff011e011d, 0x1210120011fffff, 0x123ffff0122ffff, 0x125ffff0124ffff, 0x127ffff0126ffff, 0x129ffff0128ffff, 0x12bffff012affff, 0x12dffff012cffff, 0x1310130012f012e, 0xffffffff0132ffff, 0x134ffffffff0133, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x138013701360135, 0x13c013b013a0139, 0x140013f013e013d, 0x144014301420141, 0x148014701460145, 0x14c014b014a0149, 0x150014f014e014d, 0x154015301520151, 0x158015701560155, 0x15c015b015a0159, 0x160015f015e015d, 0x164016301620161, 0x166ffff0165ffff, 0x168ffff0167ffff, 0x16affff0169ffff, 0x16cffff016bffff, 0x16effff016dffff, 0x170ffff016fffff, 0x172ffff0171ffff, 0x174ffff0173ffff, 0xffffffff0175ffff, 0xffffffffffffffff, 0x176ffffffffffff, 0x178ffff0177ffff, 0x17affff0179ffff, 0x17cffff017bffff, 0x17effff017dffff, 0x180ffff017fffff, 0x182ffff0181ffff, 0x184ffff0183ffff, 0x186ffff0185ffff, 0x188ffff0187ffff, 0x18affff0189ffff, 0x18cffff018bffff, 0x18effff018dffff, 0x190ffff018fffff, 0xffff0191ffffffff, 0xffff0193ffff0192, 0xffff0195ffff0194, 0x1980197ffff0196, 0x19affff0199ffff, 0x19cffff019bffff, 0x19effff019dffff, 0x1a0ffff019fffff, 0x1a2ffff01a1ffff, 0x1a4ffff01a3ffff, 0x1a6ffff01a5ffff, 0x1a8ffff01a7ffff, 0x1aaffff01a9ffff, 0x1acffff01abffff, 0x1aeffff01adffff, 0x1b0ffff01afffff, 0x1b2ffff01b1ffff, 0x1b4ffff01b3ffff, 0x1b6ffff01b5ffff, 0x1b8ffff01b7ffff, 0x1baffff01b9ffff, 0x1bcffff01bbffff, 0x1beffff01bdffff, 0x1c0ffff01bfffff, 0x1c2ffff01c1ffff, 0x1c4ffff01c3ffff, 0x1c6ffff01c5ffff, 0x1c8ffff01c7ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1cb01ca01c9ffff, 0x1cf01ce01cd01cc, 0x1d301d201d101d0, 0x1d701d601d501d4, 0x1db01da01d901d8, 0x1df01de01dd01dc, 0x1e301e201e101e0, 0x1e701e601e501e4, 0x1eb01ea01e901e8, 0x5bd01ee01ed01ec, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1f201f101f001ef, 0x1f601f501f401f3, 0x1fa01f901f801f7, 0x1fe01fd01fc01fb, 0x2020201020001ff, 0x206020502040203, 0x20a020902080207, 0x20e020d020c020b, 0x21202110210020f, 0x216021502140213, 0xffff021902180217, 0x21c021b021affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x220021f021e021d, 0xffffffff02220221, 0x226022502240223, 0x22a022902280227, 0xffffffffffff022b, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff022cffff, 0xffffffff022dffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff022effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x230ffff022fffff, 0x232ffff0231ffff, 0x234ffff0233ffff, 0x236ffff0235ffff, 0x238ffff0237ffff, 0x23affff0239ffff, 0x23cffff023bffff, 0x23effff023dffff, 0x240ffff023fffff, 0x242ffff0241ffff, 0x244ffff0243ffff, 0x246ffff0245ffff, 0x248ffff0247ffff, 0x24affff0249ffff, 0x24cffff024bffff, 0x24effff024dffff, 0x250ffff024fffff, 0x252ffff0251ffff, 0x254ffff0253ffff, 0x256ffff0255ffff, 0x258ffff0257ffff, 0x25affff0259ffff, 0x25cffff025bffff, 0x25effff025dffff, 0x260ffff025fffff, 0x262ffff0261ffff, 0x264ffff0263ffff, 0x266ffff0265ffff, 0x268ffff0267ffff, 0x26affff0269ffff, 0x26cffff026bffff, 0x26effff026dffff, 0x270ffff026fffff, 0x272ffff0271ffff, 0x274ffff0273ffff, 0x276ffff0275ffff, 0x278ffff0277ffff, 0x5d505d30279ffff, 0x27a05db05d905d7, 0xffffffffffffffff, 0x27cffff027bffff, 0x27effff027dffff, 0x280ffff027fffff, 0x282ffff0281ffff, 0x284ffff0283ffff, 0x286ffff0285ffff, 0x288ffff0287ffff, 0x28affff0289ffff, 0x28cffff028bffff, 0x28effff028dffff, 0x290ffff028fffff, 0x292ffff0291ffff, 0x294ffff0293ffff, 0x296ffff0295ffff, 0x298ffff0297ffff, 0x29affff0299ffff, 0x29cffff029bffff, 0x29effff029dffff, 0x2a0ffff029fffff, 0x2a2ffff02a1ffff, 0x2a4ffff02a3ffff, 0x2a6ffff02a5ffff, 0x2a8ffff02a7ffff, 0x2aaffff02a9ffff, 0x2ae02ad02ac02ab, 0x2b202b102b002af, 0xffffffffffffffff, 0xffffffffffffffff, 0x2b602b502b402b3, 0xffffffff02b802b7, 0xffffffffffffffff, 0xffffffffffffffff, 0x2bc02bb02ba02b9, 0x2c002bf02be02bd, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c402c302c202c1, 0x2c802c702c602c5, 0xffffffffffffffff, 0xffffffffffffffff, 0x2cc02cb02ca02c9, 0xffffffff02ce02cd, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d005df02cf05dd, 0x2d205e502d105e2, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d602d502d402d3, 0x2da02d902d802d7, 0xffffffffffffffff, 0xffffffffffffffff, 0x2de02dd02dc02db, 0x2e202e102e002df, 0x2e602e502e402e3, 0xffffffff02e802e7, 0x60c060a06080606, 0x61406120610060e, 0x61c061a06180616, 0x62406220620061e, 0x62c062a06280626, 0x63406320630062e, 0x63c063a06380636, 0x64406420640063e, 0x64c064a06480646, 0x65406520650064e, 0x65c065a06580656, 0x66406620660065e, 0x666067203020301, 0x67e05e8ffff0674, 0xffffffffffffffff, 0xffff0304ffff0668, 0x66a0676ffffffff, 0x68105eaffff0678, 0xffffffffffffffff, 0xffffffffffff066c, 0x5ef05ec03070306, 0x5f405f2ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5fa05f703090308, 0x60105ff030a05fd, 0xffffffffffffffff, 0xffffffffffffffff, 0x66e067affffffff, 0x6840604ffff067c, 0xffffffffffffffff, 0xffffffffffff0670, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff030cffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x310030f030e030d, 0x314031303120311, 0x318031703160315, 0x31c031b031a0319, 0xffffffffffffffff, 0xffffffffffff031d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3210320031f031e, 0x325032403230322, 0x329032803270326, 0x32d032c032b032a, 0x3310330032f032e, 0x335033403330332, 0xffffffff03370336, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x33b033a03390338, 0x33f033e033d033c, 0x343034203410340, 0x347034603450344, 0x34b034a03490348, 0x34f034e034d034c, 0x353035203510350, 0x357035603550354, 0x35b035a03590358, 0x35f035e035d035c, 0x363036203610360, 0x367036603650364, 0xffffffff0368ffff, 0xffff036a0369ffff, 0xffff036cffff036b, 0xffffffffffff036d, 0x36effffffffffff, 0xffff036fffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x371ffff0370ffff, 0x373ffff0372ffff, 0x375ffff0374ffff, 0x377ffff0376ffff, 0x379ffff0378ffff, 0x37bffff037affff, 0x37dffff037cffff, 0x37fffff037effff, 0x381ffff0380ffff, 0x383ffff0382ffff, 0x385ffff0384ffff, 0x387ffff0386ffff, 0x389ffff0388ffff, 0x38bffff038affff, 0x38dffff038cffff, 0x38fffff038effff, 0x391ffff0390ffff, 0x393ffff0392ffff, 0x395ffff0394ffff, 0x397ffff0396ffff, 0x399ffff0398ffff, 0x39bffff039affff, 0x39dffff039cffff, 0x39fffff039effff, 0x3a1ffff03a0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff03a3ffff03a2, 0x3a4ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3a803a703a603a5, 0x3ac03ab03aa03a9, 0x3b003af03ae03ad, 0x3b403b303b203b1, 0x3b803b703b603b5, 0x3bc03bb03ba03b9, 0x3c003bf03be03bd, 0x3c403c303c203c1, 0x3c803c703c603c5, 0x3cbffff03ca03c9, 0xffffffffffffffff, 0xffffffff03ccffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ceffff03cdffff, 0x3d0ffff03cfffff, 0x3d2ffff03d1ffff, 0x3d4ffff03d3ffff, 0x3d6ffff03d5ffff, 0x3d8ffff03d7ffff, 0x3daffff03d9ffff, 0x3dcffff03dbffff, 0x3deffff03ddffff, 0x3e0ffff03dfffff, 0x3e2ffff03e1ffff, 0xffffffff03e3ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3e5ffff03e4ffff, 0x3e7ffff03e6ffff, 0x3e9ffff03e8ffff, 0x3ebffff03eaffff, 0x3edffff03ecffff, 0x3efffff03eeffff, 0x3f1ffff03f0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3f2ffffffffffff, 0x3f4ffff03f3ffff, 0x3f6ffff03f5ffff, 0x3f8ffff03f7ffff, 0x3f9ffffffffffff, 0x3fbffff03faffff, 0x3fdffff03fcffff, 0x3ffffff03feffff, 0x401ffff0400ffff, 0x403ffff0402ffff, 0x405ffff0404ffff, 0x407ffff0406ffff, 0x409ffff0408ffff, 0x40bffff040affff, 0x40dffff040cffff, 0x40fffff040effff, 0x411ffff0410ffff, 0x413ffff0412ffff, 0x415ffff0414ffff, 0x417ffff0416ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0418ffffffff, 0x41affffffff0419, 0x41cffff041bffff, 0x41effff041dffff, 0xffffffffffffffff, 0xffffffffffff041f, 0x421ffff0420ffff, 0x423ffffffff0422, 0x425ffff0424ffff, 0x427ffff0426ffff, 0x429ffff0428ffff, 0x42bffff042affff, 0xffffffff042cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x42effff042dffff, 0x430ffff042fffff, 0x432ffff0431ffff, 0x434ffff0433ffff, 0xffffffffffffffff, 0xffff0436ffff0435, 0xffffffffffffffff, 0xffffffff0437ffff, 0x438ffffffffffff, 0xffffffff0439ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff043affffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43bffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43f043e043d043c, 0x443044204410440, 0x447044604450444, 0x44b044a04490448, 0x44f044e044d044c, 0x453045204510450, 0x457045604550454, 0x45b045a04590458, 0x45f045e045d045c, 0x463046204610460, 0x467046604650464, 0x46b046a04690468, 0x46f046e046d046c, 0x473047204710470, 0x477047604750474, 0x47b047a04790478, 0x47f047e047d047c, 0x483048204810480, 0x487048604850484, 0x48b048a04890488, 0x5b305b105af05ad, 0xffff05bb05b905b6, 0xffffffffffffffff, 0xffffffffffffffff, 0x5bfffffffffffff, 0x5c705c505c305c1, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x48e048d048cffff, 0x49204910490048f, 0x496049504940493, 0x49a049904980497, 0x49e049d049c049b, 0x4a204a104a0049f, 0xffff04a504a404a3, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4a904a804a704a6, 0x4ad04ac04ab04aa, 0x4b104b004af04ae, 0x4b504b404b304b2, 0x4b904b804b704b6, 0x4bd04bc04bb04ba, 0x4c104c004bf04be, 0x4c504c404c304c2, 0x4c904c804c704c6, 0x4cd04cc04cb04ca, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4d104d004cf04ce, 0x4d504d404d304d2, 0x4d904d804d704d6, 0x4dd04dc04db04da, 0x4e104e004df04de, 0x4e504e404e304e2, 0x4e904e804e704e6, 0x4ed04ec04eb04ea, 0x4f104f004ef04ee, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4f2ffffffffffff, 0x4f604f504f404f3, 0x4fa04f904f804f7, 0x4fdffff04fc04fb, 0x501050004ff04fe, 0x505050405030502, 0x509050805070506, 0x50cffff050b050a, 0x510050f050e050d, 0x513ffff05120511, 0xffffffffffff0514, 0x518051705160515, 0x51c051b051a0519, 0x520051f051e051d, 0x524052305220521, 0x528052705260525, 0x52c052b052a0529, 0x530052f052e052d, 0x534053305320531, 0x538053705360535, 0x53c053b053a0539, 0x540053f053e053d, 0x544054305420541, 0xffff054705460545, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x54b054a05490548, 0x54f054e054d054c, 0x553055205510550, 0x557055605550554, 0x55b055a05590558, 0x55f055e055d055c, 0x563056205610560, 0x567056605650564, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x56b056a05690568, 0x56f056e056d056c, 0x573057205710570, 0x577057605750574, 0x57b057a05790578, 0x57f057e057d057c, 0x583058205810580, 0x587058605850584, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5890588ffffffff, 0x58d058c058b058a, 0x5910590058f058e, 0x595059405930592, 0x599059805970596, 0x59d059c059b059a, 0x5a105a0059f059e, 0x5a505a405a305a2, 0x5a905a805a705a6, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//10112 bytes -enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xec0], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x2000000010000, 0x6000500040003, 0x80007, 0xb000a00090000, 0xf000e000d000c, 0x1200110010, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14001300000000, 0x0, 0x0, 0x16001500000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1700000000, 0x0, 0x1b001a00190018, 0x1f001e001d001c, 0x0, 0x2200210020, 0x0, 0x0, 0x24002300000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28002700260025, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a00290000, 0x2e002d002c002b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x33003200000031, 0x3500340000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3600000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1d001c001b001a, 0x210020001f001e, 0x25002400230022, 0x29002800270026, 0x2d002c002b002a, 0xffff0030002f002e, 0x34003300320031, 0x599003700360035, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0039ffff0038, 0xffff003bffff003a, 0xffff003dffff003c, 0xffff003fffff003e, 0xffff0041ffff0040, 0xffff0043ffff0042, 0xffff0045ffff0044, 0xffff0047ffff0046, 0xffff0049ffff0048, 0xffff004bffff004a, 0xffff004dffff004c, 0xffff004fffff004e, 0xffff0051ffff059a, 0xffff0053ffff0052, 0x55ffff0054ffff, 0x57ffff0056ffff, 0x59ffff0058ffff, 0x5bffff005affff, 0xffff005c05a9ffff, 0xffff005effff005d, 0xffff0060ffff005f, 0xffff0062ffff0061, 0xffff0064ffff0063, 0xffff0066ffff0065, 0xffff0068ffff0067, 0xffff006affff0069, 0xffff006cffff006b, 0xffff006effff006d, 0xffff0070ffff006f, 0xffff0072ffff0071, 0x75ffff00740073, 0xffffffff0076ffff, 0xffff00780077ffff, 0x7b007affff0079, 0x7e007d007cffff, 0x80007fffffffff, 0x83ffff00820081, 0x860085ffff0084, 0xffffffffffff0087, 0x8affff00890088, 0xffff008cffff008b, 0x8f008effff008d, 0xffffffff0090ffff, 0x930092ffff0091, 0x9600950094ffff, 0x98ffff0097ffff, 0xffffffffffff0099, 0xffffffffffff009a, 0xffffffffffffffff, 0x9dffff009c009b, 0xa0009fffff009e, 0xa2ffff00a1ffff, 0xa4ffff00a3ffff, 0xa6ffff00a5ffff, 0xa8ffff00a7ffff, 0xffff00a9ffffffff, 0xffff00abffff00aa, 0xffff00adffff00ac, 0xffff00afffff00ae, 0xffff00b1ffff00b0, 0xffff00b300b205ac, 0xb600b5ffff00b4, 0xffff00b8ffff00b7, 0xffff00baffff00b9, 0xffff00bcffff00bb, 0xffff00beffff00bd, 0xffff00c0ffff00bf, 0xffff00c2ffff00c1, 0xffff00c4ffff00c3, 0xffff00c6ffff00c5, 0xffff00c8ffff00c7, 0xffff00caffff00c9, 0xffff00ccffff00cb, 0xffff00ceffff00cd, 0xffff00d0ffff00cf, 0xffff00d2ffff00d1, 0xffff00d4ffff00d3, 0xffffffffffffffff, 0xd600d5ffffffff, 0xffff00d800d7ffff, 0xdaffff00d9ffff, 0xffff00dd00dc00db, 0xffff00dfffff00de, 0xffff00e1ffff00e0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00e3ffff00e2, 0xffff00e4ffffffff, 0xffffffffffffffff, 0xe5ffffffffffff, 0xffffffffffffffff, 0xffff00e6ffffffff, 0xffff00e900e800e7, 0xec00ebffff00ea, 0xef00ee00ed05aa, 0xf300f200f100f0, 0xf700f600f500f4, 0xfb00fa00f900f8, 0xfeffff00fd00fc, 0x1020101010000ff, 0x106010501040103, 0xffffffffffffffff, 0xffffffffffff05ab, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x107ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0109ffff0108, 0xffff010bffff010a, 0xffff010dffff010c, 0xffff010fffff010e, 0xffff0111ffff0110, 0xffff0113ffff0112, 0xffffffffffffffff, 0x115ffffffff0114, 0xffff01170116ffff, 0x11a01190118ffff, 0x11e011d011c011b, 0x12201210120011f, 0x126012501240123, 0x12a012901280127, 0x12e012d012c012b, 0x13201310130012f, 0x136013501340133, 0x13a013901380137, 0x13e013d013c013b, 0x14201410140013f, 0x146014501440143, 0x14a014901480147, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff014cffff014b, 0xffff014effff014d, 0xffff0150ffff014f, 0xffff0152ffff0151, 0xffff0154ffff0153, 0xffff0156ffff0155, 0xffff0158ffff0157, 0xffff015affff0159, 0xffffffffffff015b, 0xffffffffffffffff, 0xffff015cffffffff, 0xffff015effff015d, 0xffff0160ffff015f, 0xffff0162ffff0161, 0xffff0164ffff0163, 0xffff0166ffff0165, 0xffff0168ffff0167, 0xffff016affff0169, 0xffff016cffff016b, 0xffff016effff016d, 0xffff0170ffff016f, 0xffff0172ffff0171, 0xffff0174ffff0173, 0xffff0176ffff0175, 0x179ffff01780177, 0x17bffff017affff, 0x17dffff017cffff, 0xffffffff017effff, 0xffff0180ffff017f, 0xffff0182ffff0181, 0xffff0184ffff0183, 0xffff0186ffff0185, 0xffff0188ffff0187, 0xffff018affff0189, 0xffff018cffff018b, 0xffff018effff018d, 0xffff0190ffff018f, 0xffff0192ffff0191, 0xffff0194ffff0193, 0xffff0196ffff0195, 0xffff0198ffff0197, 0xffff019affff0199, 0xffff019cffff019b, 0xffff019effff019d, 0xffff01a0ffff019f, 0xffff01a2ffff01a1, 0xffff01a4ffff01a3, 0xffff01a6ffff01a5, 0xffff01a8ffff01a7, 0xffff01aaffff01a9, 0xffff01acffff01ab, 0xffff01aeffff01ad, 0x1b101b001afffff, 0x1b501b401b301b2, 0x1b901b801b701b6, 0x1bd01bc01bb01ba, 0x1c101c001bf01be, 0x1c501c401c301c2, 0x1c901c801c701c6, 0x1cd01cc01cb01ca, 0x1d101d001cf01ce, 0xffff01d401d301d2, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5a3ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1d801d701d601d5, 0x1dc01db01da01d9, 0x1e001df01de01dd, 0x1e401e301e201e1, 0x1e801e701e601e5, 0x1ec01eb01ea01e9, 0x1f001ef01ee01ed, 0x1f401f301f201f1, 0x1f801f701f601f5, 0x1fbffff01fa01f9, 0xffffffffffffffff, 0xffffffff01fcffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x20001ff01fe01fd, 0x204020302020201, 0x208020702060205, 0x20c020b020a0209, 0x210020f020e020d, 0x214021302120211, 0x218021702160215, 0x21c021b021a0219, 0x220021f021e021d, 0x224022302220221, 0x228022702260225, 0x22c022b022a0229, 0x230022f022e022d, 0x234023302320231, 0x238023702360235, 0x23c023b023a0239, 0x240023f023e023d, 0x244024302420241, 0x248024702460245, 0x24c024b024a0249, 0x250024f024e024d, 0xffffffff02520251, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x256025502540253, 0x25a025902580257, 0x25e025d025c025b, 0x26202610260025f, 0x266026502640263, 0x26a026902680267, 0x26e026d026c026b, 0x27202710270026f, 0x276027502740273, 0x27a027902780277, 0xffff027d027c027b, 0x280027f027effff, 0xffff0282ffff0281, 0xffff0284ffff0283, 0xffff0286ffff0285, 0xffff0288ffff0287, 0xffff028affff0289, 0xffff028cffff028b, 0xffff028effff028d, 0xffff0290ffff028f, 0xffff0292ffff0291, 0xffff0294ffff0293, 0xffff0296ffff0295, 0xffff0298ffff0297, 0xffff029affff0299, 0xffff029cffff029b, 0xffff029effff029d, 0xffff02a0ffff029f, 0xffff02a2ffff02a1, 0xffff02a4ffff02a3, 0xffff02a6ffff02a5, 0xffff02a8ffff02a7, 0xffff02aaffff02a9, 0xffff02acffff02ab, 0xffff02aeffff02ad, 0xffff02b0ffff02af, 0xffff02b2ffff02b1, 0xffff02b4ffff02b3, 0xffff02b6ffff02b5, 0xffff02b8ffff02b7, 0xffff02baffff02b9, 0xffff02bcffff02bb, 0xffff02beffff02bd, 0xffff02c0ffff02bf, 0xffff02c2ffff02c1, 0xffff02c4ffff02c3, 0xffff02c6ffff02c5, 0xffff02c8ffff02c7, 0xffff02caffff02c9, 0x5ae05adffff02cb, 0xffff05b105b005af, 0xffff02ccffffffff, 0xffff02ceffff02cd, 0xffff02d0ffff02cf, 0xffff02d2ffff02d1, 0xffff02d4ffff02d3, 0xffff02d6ffff02d5, 0xffff02d8ffff02d7, 0xffff02daffff02d9, 0xffff02dcffff02db, 0xffff02deffff02dd, 0xffff02e0ffff02df, 0xffff02e2ffff02e1, 0xffff02e4ffff02e3, 0xffff02e6ffff02e5, 0xffff02e8ffff02e7, 0xffff02eaffff02e9, 0xffff02ecffff02eb, 0xffff02eeffff02ed, 0xffff02f0ffff02ef, 0xffff02f2ffff02f1, 0xffff02f4ffff02f3, 0xffff02f6ffff02f5, 0xffff02f8ffff02f7, 0xffff02faffff02f9, 0xffff02fcffff02fb, 0xffffffffffffffff, 0xffffffffffffffff, 0x30002ff02fe02fd, 0x304030303020301, 0xffffffffffffffff, 0xffffffffffffffff, 0x308030703060305, 0xffffffff030a0309, 0xffffffffffffffff, 0xffffffffffffffff, 0x30e030d030c030b, 0x31203110310030f, 0xffffffffffffffff, 0xffffffffffffffff, 0x316031503140313, 0x31a031903180317, 0xffffffffffffffff, 0xffffffffffffffff, 0x31e031d031c031b, 0xffffffff0320031f, 0xffff05b3ffff05b2, 0xffff05b5ffff05b4, 0x322ffff0321ffff, 0x324ffff0323ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x328032703260325, 0x32c032b032a0329, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5c505c405c305c2, 0x5c905c805c705c6, 0x5cd05cc05cb05ca, 0x5d105d005cf05ce, 0x5d505d405d305d2, 0x5d905d805d705d6, 0x5dd05dc05db05da, 0x5e105e005df05de, 0x5e505e405e305e2, 0x5e905e805e705e6, 0x5ed05ec05eb05ea, 0x5f105f005ef05ee, 0x5f205f8ffffffff, 0x5fe05b6ffff05f9, 0x348034703460345, 0xffffffffffff05f3, 0x5f405faffffffff, 0x5ff05b7ffff05fb, 0x34d034c034b034a, 0xffffffffffff05f5, 0x5b905b8ffffffff, 0x5bb05baffffffff, 0x35203510350034f, 0xffffffffffffffff, 0x5bd05bcffffffff, 0x5c005bfffff05be, 0x356035503540353, 0xffffffffffff0357, 0x5f605fcffffffff, 0x60005c1ffff05fd, 0x35b035a03590358, 0xffffffffffff05f7, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff035dffffffff, 0x35f035effffffff, 0xffffffffffffffff, 0xffff0360ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x364036303620361, 0x368036703660365, 0x36c036b036a0369, 0x370036f036e036d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x371ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3730372ffffffff, 0x377037603750374, 0x37b037a03790378, 0x37f037e037d037c, 0x383038203810380, 0x387038603850384, 0x38b038a03890388, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x38f038e038d038c, 0x393039203910390, 0x397039603950394, 0x39b039a03990398, 0x39f039e039d039c, 0x3a303a203a103a0, 0x3a703a603a503a4, 0x3ab03aa03a903a8, 0x3af03ae03ad03ac, 0x3b303b203b103b0, 0x3b703b603b503b4, 0x3bb03ba03b903b8, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3be03bdffff03bc, 0x3c0ffffffff03bf, 0x3c2ffff03c1ffff, 0x3c503c403c3ffff, 0xffff03c7ffff03c6, 0xffffffff03c8ffff, 0xffffffffffffffff, 0x3ca03c9ffffffff, 0xffff03ccffff03cb, 0xffff03ceffff03cd, 0xffff03d0ffff03cf, 0xffff03d2ffff03d1, 0xffff03d4ffff03d3, 0xffff03d6ffff03d5, 0xffff03d8ffff03d7, 0xffff03daffff03d9, 0xffff03dcffff03db, 0xffff03deffff03dd, 0xffff03e0ffff03df, 0xffff03e2ffff03e1, 0xffff03e4ffff03e3, 0xffff03e6ffff03e5, 0xffff03e8ffff03e7, 0xffff03eaffff03e9, 0xffff03ecffff03eb, 0xffff03eeffff03ed, 0xffff03f0ffff03ef, 0xffff03f2ffff03f1, 0xffff03f4ffff03f3, 0xffff03f6ffff03f5, 0xffff03f8ffff03f7, 0xffff03faffff03f9, 0xffff03fcffff03fb, 0xffffffffffffffff, 0x3fdffffffffffff, 0xffffffff03feffff, 0xffff03ffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0401ffff0400, 0xffff0403ffff0402, 0xffff0405ffff0404, 0xffff0407ffff0406, 0xffff0409ffff0408, 0xffff040bffff040a, 0xffff040dffff040c, 0xffff040fffff040e, 0xffff0411ffff0410, 0xffff0413ffff0412, 0xffff0415ffff0414, 0xffffffffffff0416, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0418ffff0417, 0xffff041affff0419, 0xffff041cffff041b, 0xffff041effff041d, 0xffff0420ffff041f, 0xffff0422ffff0421, 0xffff0424ffff0423, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0425ffffffff, 0xffff0427ffff0426, 0xffff0429ffff0428, 0xffff042bffff042a, 0xffff042cffffffff, 0xffff042effff042d, 0xffff0430ffff042f, 0xffff0432ffff0431, 0xffff0434ffff0433, 0xffff0436ffff0435, 0xffff0438ffff0437, 0xffff043affff0439, 0xffff043cffff043b, 0xffff043effff043d, 0xffff0440ffff043f, 0xffff0442ffff0441, 0xffff0444ffff0443, 0xffff0446ffff0445, 0xffff0448ffff0447, 0xffff044affff0449, 0xffffffffffffffff, 0xffffffffffffffff, 0x44cffff044bffff, 0xffff044e044dffff, 0xffff0450ffff044f, 0xffff0452ffff0451, 0x453ffffffffffff, 0xffffffff0454ffff, 0xffff0456ffff0455, 0xffff0457ffffffff, 0xffff0459ffff0458, 0xffff045bffff045a, 0xffff045dffff045c, 0xffff045fffff045e, 0x4620461ffff0460, 0xffff046504640463, 0x469046804670466, 0xffff046bffff046a, 0xffff046dffff046c, 0xffff046fffff046e, 0xffff0471ffff0470, 0x475047404730472, 0xffffffff0476ffff, 0xffffffffffffffff, 0xffffffffffff0477, 0xffff0478ffffffff, 0xffffffffffff0479, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff047affff, 0xffffffffffffffff, 0xffffffffffffffff, 0x59f059e059d059c, 0xffff05a205a105a0, 0xffffffffffffffff, 0xffffffffffffffff, 0x5a4ffffffffffff, 0x5a805a705a605a5, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x47d047c047bffff, 0x4810480047f047e, 0x485048404830482, 0x489048804870486, 0x48d048c048b048a, 0x4910490048f048e, 0xffff049404930492, 0xffffffffffffffff, 0x498049704960495, 0x49c049b049a0499, 0x4a0049f049e049d, 0x4a404a304a204a1, 0x4a804a704a604a5, 0x4ac04ab04aa04a9, 0x4b004af04ae04ad, 0x4b404b304b204b1, 0x4b804b704b604b5, 0x4bc04bb04ba04b9, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4c004bf04be04bd, 0x4c404c304c204c1, 0x4c804c704c604c5, 0x4cc04cb04ca04c9, 0x4d004cf04ce04cd, 0x4d404d304d204d1, 0x4d804d704d604d5, 0x4dc04db04da04d9, 0x4e004df04de04dd, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4e404e304e204e1, 0x4e804e704e604e5, 0xffff04eb04ea04e9, 0x4ef04ee04ed04ec, 0x4f304f204f104f0, 0x4f704f604f504f4, 0xffff04fa04f904f8, 0x4fe04fd04fc04fb, 0xffff0501050004ff, 0xffffffff05030502, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x507050605050504, 0x50b050a05090508, 0x50f050e050d050c, 0x513051205110510, 0x517051605150514, 0x51b051a05190518, 0x51f051e051d051c, 0x523052205210520, 0x527052605250524, 0x52b052a05290528, 0x52f052e052d052c, 0x533053205310530, 0xffff053605350534, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x53a053905380537, 0x53e053d053c053b, 0x54205410540053f, 0x546054505440543, 0x54a054905480547, 0x54e054d054c054b, 0x55205510550054f, 0x556055505540553, 0x55a055905580557, 0x55e055d055c055b, 0x56205610560055f, 0x566056505640563, 0x56a056905680567, 0x56e056d056c056b, 0x57205710570056f, 0x576057505740573, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x57a057905780577, 0x57e057d057c057b, 0x58205810580057f, 0x586058505840583, 0x58a058905880587, 0x58e058d058c058b, 0x59205910590058f, 0x596059505940593, 0xffffffff05980597, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//10496 bytes -enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xf80], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15000000000000, 0x0, 0x0, 0x16000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1700000000, 0x1900180000, 0x1d001c001b001a, 0x210020001f001e, 0x0, 0x2300220000, 0x0, 0x0, 0x24000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28002700260025, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b002a0000, 0x2f002e002d002c, 0x0, 0x0, 0x0, 0x3100300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, 0x0, 0x330000, 0x0, 0x0, 0x0, 0x0, 0x36000000350034, 0x3700000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x39000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c003b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff001affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5aeffffffffffff, 0x1e001d001c001b, 0x2200210020001f, 0x26002500240023, 0x2a002900280027, 0x2e002d002c002b, 0xffff00310030002f, 0x35003400330032, 0x39003800370036, 0x3bffff003affff, 0x3dffff003cffff, 0x3fffff003effff, 0x41ffff0040ffff, 0x43ffff0042ffff, 0x45ffff0044ffff, 0x47ffff0046ffff, 0x49ffff0048ffff, 0x4bffff004affff, 0x4dffff004cffff, 0x4fffff004effff, 0x51ffff0050ffff, 0x53ffff005205b0, 0x55ffff0054ffff, 0xffff0056ffffffff, 0xffff0058ffff0057, 0xffff005affff0059, 0xffff005cffff005b, 0x5effff05cd005d, 0x60ffff005fffff, 0x62ffff0061ffff, 0x64ffff0063ffff, 0x66ffff0065ffff, 0x68ffff0067ffff, 0x6affff0069ffff, 0x6cffff006bffff, 0x6effff006dffff, 0x70ffff006fffff, 0x72ffff0071ffff, 0x74ffff0073ffff, 0xffff0075ffffffff, 0x780077ffff0076, 0x7affffffff0079, 0xffffffff007bffff, 0xffffffffffff007c, 0xffffffffffff007d, 0xffff007effffffff, 0xffffffff007fffff, 0xffff00810080ffff, 0xffff0082ffffffff, 0x84ffff0083ffff, 0xffffffff0085ffff, 0xffffffffffff0086, 0xffffffff0087ffff, 0xffffffffffff0088, 0xffff008affff0089, 0xffffffff008bffff, 0x8dffff008cffff, 0xffffffffffffffff, 0x910090008f008e, 0x95009400930092, 0xffff0097ffff0096, 0xffff0099ffff0098, 0xffff009bffff009a, 0xffff009dffff009c, 0xa0ffff009f009e, 0xa2ffff00a1ffff, 0xa4ffff00a3ffff, 0xa6ffff00a5ffff, 0xa8ffff00a7ffff, 0xab00aa00a905d5, 0xffffffff00acffff, 0xaeffff00adffff, 0xb0ffff00afffff, 0xb2ffff00b1ffff, 0xb4ffff00b3ffff, 0xb6ffff00b5ffff, 0xb8ffff00b7ffff, 0xbaffff00b9ffff, 0xbcffff00bbffff, 0xbeffff00bdffff, 0xc0ffff00bfffff, 0xc1ffffffffffff, 0xc3ffff00c2ffff, 0xc5ffff00c4ffff, 0xc7ffff00c6ffff, 0xc9ffff00c8ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xcbffffffff00ca, 0xffff00cdffff00cc, 0xceffffffffffff, 0xd0ffff00cfffff, 0xd2ffff00d1ffff, 0xd600d500d400d3, 0xd900d8ffff00d7, 0xdbffff00daffff, 0xffffffffffff00dc, 0xdfffff00de00dd, 0xffff00e100e0ffff, 0xe500e400e300e2, 0xe7ffffffff00e6, 0xffff00e900e8ffff, 0xffffffff00eaffff, 0xffffffffffffffff, 0xffffffff00ebffff, 0xee00edffff00ec, 0xefffffffffffff, 0xf300f200f100f0, 0xffffffffffff00f4, 0xffff00f5ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00f700f6ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff00f8ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfaffff00f9ffff, 0xfbffffffffffff, 0xfcffffffffffff, 0xffffffff00fe00fd, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffff05cf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1020101010000ff, 0x1050104010305d2, 0x109010801070106, 0x10d010c010b010a, 0x1110110010f010e, 0x115011401130112, 0x119011801170116, 0x11d011c011b011a, 0xffff0120011f011e, 0xffffffff01220121, 0x12501240123ffff, 0x127ffff0126ffff, 0x129ffff0128ffff, 0x12bffff012affff, 0x12dffff012cffff, 0x12fffff012effff, 0x131ffff0130ffff, 0x135013401330132, 0xffffffff0136ffff, 0x138ffffffff0137, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x13c013b013a0139, 0x140013f013e013d, 0x144014301420141, 0x148014701460145, 0x14c014b014a0149, 0x150014f014e014d, 0x154015301520151, 0x158015701560155, 0x15c015b015a0159, 0x160015f015e015d, 0x164016301620161, 0x168016701660165, 0x16affff0169ffff, 0x16cffff016bffff, 0x16effff016dffff, 0x170ffff016fffff, 0x172ffff0171ffff, 0x174ffff0173ffff, 0x176ffff0175ffff, 0x178ffff0177ffff, 0xffffffff0179ffff, 0xffffffffffffffff, 0x17affffffffffff, 0x17cffff017bffff, 0x17effff017dffff, 0x180ffff017fffff, 0x182ffff0181ffff, 0x184ffff0183ffff, 0x186ffff0185ffff, 0x188ffff0187ffff, 0x18affff0189ffff, 0x18cffff018bffff, 0x18effff018dffff, 0x190ffff018fffff, 0x192ffff0191ffff, 0x194ffff0193ffff, 0xffff0195ffffffff, 0xffff0197ffff0196, 0xffff0199ffff0198, 0x19c019bffff019a, 0x19effff019dffff, 0x1a0ffff019fffff, 0x1a2ffff01a1ffff, 0x1a4ffff01a3ffff, 0x1a6ffff01a5ffff, 0x1a8ffff01a7ffff, 0x1aaffff01a9ffff, 0x1acffff01abffff, 0x1aeffff01adffff, 0x1b0ffff01afffff, 0x1b2ffff01b1ffff, 0x1b4ffff01b3ffff, 0x1b6ffff01b5ffff, 0x1b8ffff01b7ffff, 0x1baffff01b9ffff, 0x1bcffff01bbffff, 0x1beffff01bdffff, 0x1c0ffff01bfffff, 0x1c2ffff01c1ffff, 0x1c4ffff01c3ffff, 0x1c6ffff01c5ffff, 0x1c8ffff01c7ffff, 0x1caffff01c9ffff, 0x1ccffff01cbffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1cf01ce01cdffff, 0x1d301d201d101d0, 0x1d701d601d501d4, 0x1db01da01d901d8, 0x1df01de01dd01dc, 0x1e301e201e101e0, 0x1e701e601e501e4, 0x1eb01ea01e901e8, 0x1ef01ee01ed01ec, 0x5c101f201f101f0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1f601f501f401f3, 0x1fa01f901f801f7, 0x1fe01fd01fc01fb, 0x2020201020001ff, 0x206020502040203, 0x20a020902080207, 0x20e020d020c020b, 0x21202110210020f, 0x216021502140213, 0x21a021902180217, 0xffff021d021c021b, 0x220021f021effff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x224022302220221, 0xffffffff02260225, 0x22a022902280227, 0x22e022d022c022b, 0xffffffffffff022f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0230ffff, 0xffffffff0231ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0232ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x234ffff0233ffff, 0x236ffff0235ffff, 0x238ffff0237ffff, 0x23affff0239ffff, 0x23cffff023bffff, 0x23effff023dffff, 0x240ffff023fffff, 0x242ffff0241ffff, 0x244ffff0243ffff, 0x246ffff0245ffff, 0x248ffff0247ffff, 0x24affff0249ffff, 0x24cffff024bffff, 0x24effff024dffff, 0x250ffff024fffff, 0x252ffff0251ffff, 0x254ffff0253ffff, 0x256ffff0255ffff, 0x258ffff0257ffff, 0x25affff0259ffff, 0x25cffff025bffff, 0x25effff025dffff, 0x260ffff025fffff, 0x262ffff0261ffff, 0x264ffff0263ffff, 0x266ffff0265ffff, 0x268ffff0267ffff, 0x26affff0269ffff, 0x26cffff026bffff, 0x26effff026dffff, 0x270ffff026fffff, 0x272ffff0271ffff, 0x274ffff0273ffff, 0x276ffff0275ffff, 0x278ffff0277ffff, 0x27affff0279ffff, 0x27cffff027bffff, 0x5d905d7027dffff, 0x27e05df05dd05db, 0xffffffffffffffff, 0x280ffff027fffff, 0x282ffff0281ffff, 0x284ffff0283ffff, 0x286ffff0285ffff, 0x288ffff0287ffff, 0x28affff0289ffff, 0x28cffff028bffff, 0x28effff028dffff, 0x290ffff028fffff, 0x292ffff0291ffff, 0x294ffff0293ffff, 0x296ffff0295ffff, 0x298ffff0297ffff, 0x29affff0299ffff, 0x29cffff029bffff, 0x29effff029dffff, 0x2a0ffff029fffff, 0x2a2ffff02a1ffff, 0x2a4ffff02a3ffff, 0x2a6ffff02a5ffff, 0x2a8ffff02a7ffff, 0x2aaffff02a9ffff, 0x2acffff02abffff, 0x2aeffff02adffff, 0x2b202b102b002af, 0x2b602b502b402b3, 0xffffffffffffffff, 0xffffffffffffffff, 0x2ba02b902b802b7, 0xffffffff02bc02bb, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c002bf02be02bd, 0x2c402c302c202c1, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c802c702c602c5, 0x2cc02cb02ca02c9, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d002cf02ce02cd, 0xffffffff02d202d1, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d405e302d305e1, 0x2d605e902d505e6, 0xffffffffffffffff, 0xffffffffffffffff, 0x2da02d902d802d7, 0x2de02dd02dc02db, 0xffffffffffffffff, 0xffffffffffffffff, 0x2e202e102e002df, 0x2e602e502e402e3, 0x2ea02e902e802e7, 0xffffffff02ec02eb, 0x60d060c060b060a, 0x6110610060f060e, 0x615061406130612, 0x619061806170616, 0x61d061c061b061a, 0x6210620061f061e, 0x625062406230622, 0x629062806270626, 0x62d062c062b062a, 0x6310630062f062e, 0x635063406330632, 0x639063806370636, 0x63a064003060305, 0x64c05ecffff0642, 0xffffffffffffffff, 0xffff0308ffff063b, 0x63c0644ffffffff, 0x64f05eeffff0646, 0xffffffffffffffff, 0xffffffffffff063d, 0x5f305f0030b030a, 0x5f805f6ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5fe05fb030d030c, 0x6050603030e0601, 0xffffffffffffffff, 0xffffffffffffffff, 0x63e0648ffffffff, 0x6520608ffff064a, 0xffffffffffffffff, 0xffffffffffff063f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0310ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x314031303120311, 0x318031703160315, 0x31c031b031a0319, 0x320031f031e031d, 0xffffffffffffffff, 0xffffffffffff0321, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x325032403230322, 0x329032803270326, 0x32d032c032b032a, 0x3310330032f032e, 0x335033403330332, 0x339033803370336, 0xffffffff033b033a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x33f033e033d033c, 0x343034203410340, 0x347034603450344, 0x34b034a03490348, 0x34f034e034d034c, 0x353035203510350, 0x357035603550354, 0x35b035a03590358, 0x35f035e035d035c, 0x363036203610360, 0x367036603650364, 0x36b036a03690368, 0xffffffff036cffff, 0xffff036e036dffff, 0xffff0370ffff036f, 0xffffffffffff0371, 0x372ffffffffffff, 0xffff0373ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x375ffff0374ffff, 0x377ffff0376ffff, 0x379ffff0378ffff, 0x37bffff037affff, 0x37dffff037cffff, 0x37fffff037effff, 0x381ffff0380ffff, 0x383ffff0382ffff, 0x385ffff0384ffff, 0x387ffff0386ffff, 0x389ffff0388ffff, 0x38bffff038affff, 0x38dffff038cffff, 0x38fffff038effff, 0x391ffff0390ffff, 0x393ffff0392ffff, 0x395ffff0394ffff, 0x397ffff0396ffff, 0x399ffff0398ffff, 0x39bffff039affff, 0x39dffff039cffff, 0x39fffff039effff, 0x3a1ffff03a0ffff, 0x3a3ffff03a2ffff, 0x3a5ffff03a4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff03a7ffff03a6, 0x3a8ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ac03ab03aa03a9, 0x3b003af03ae03ad, 0x3b403b303b203b1, 0x3b803b703b603b5, 0x3bc03bb03ba03b9, 0x3c003bf03be03bd, 0x3c403c303c203c1, 0x3c803c703c603c5, 0x3cc03cb03ca03c9, 0x3cfffff03ce03cd, 0xffffffffffffffff, 0xffffffff03d0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3d2ffff03d1ffff, 0x3d4ffff03d3ffff, 0x3d6ffff03d5ffff, 0x3d8ffff03d7ffff, 0x3daffff03d9ffff, 0x3dcffff03dbffff, 0x3deffff03ddffff, 0x3e0ffff03dfffff, 0x3e2ffff03e1ffff, 0x3e4ffff03e3ffff, 0x3e6ffff03e5ffff, 0xffffffff03e7ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3e9ffff03e8ffff, 0x3ebffff03eaffff, 0x3edffff03ecffff, 0x3efffff03eeffff, 0x3f1ffff03f0ffff, 0x3f3ffff03f2ffff, 0x3f5ffff03f4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3f6ffffffffffff, 0x3f8ffff03f7ffff, 0x3faffff03f9ffff, 0x3fcffff03fbffff, 0x3fdffffffffffff, 0x3ffffff03feffff, 0x401ffff0400ffff, 0x403ffff0402ffff, 0x405ffff0404ffff, 0x407ffff0406ffff, 0x409ffff0408ffff, 0x40bffff040affff, 0x40dffff040cffff, 0x40fffff040effff, 0x411ffff0410ffff, 0x413ffff0412ffff, 0x415ffff0414ffff, 0x417ffff0416ffff, 0x419ffff0418ffff, 0x41bffff041affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff041cffffffff, 0x41effffffff041d, 0x420ffff041fffff, 0x422ffff0421ffff, 0xffffffffffffffff, 0xffffffffffff0423, 0x425ffff0424ffff, 0x427ffffffff0426, 0x429ffff0428ffff, 0x42bffff042affff, 0x42dffff042cffff, 0x42fffff042effff, 0xffffffff0430ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x432ffff0431ffff, 0x434ffff0433ffff, 0x436ffff0435ffff, 0x438ffff0437ffff, 0xffffffffffffffff, 0xffff043affff0439, 0xffffffffffffffff, 0xffffffff043bffff, 0x43cffffffffffff, 0xffffffff043dffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff043effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43fffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x443044204410440, 0x447044604450444, 0x44b044a04490448, 0x44f044e044d044c, 0x453045204510450, 0x457045604550454, 0x45b045a04590458, 0x45f045e045d045c, 0x463046204610460, 0x467046604650464, 0x46b046a04690468, 0x46f046e046d046c, 0x473047204710470, 0x477047604750474, 0x47b047a04790478, 0x47f047e047d047c, 0x483048204810480, 0x487048604850484, 0x48b048a04890488, 0x48f048e048d048c, 0x5b705b505b305b1, 0xffff05bf05bd05ba, 0xffffffffffffffff, 0xffffffffffffffff, 0x5c3ffffffffffff, 0x5cb05c905c705c5, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x49204910490ffff, 0x496049504940493, 0x49a049904980497, 0x49e049d049c049b, 0x4a204a104a0049f, 0x4a604a504a404a3, 0xffff04a904a804a7, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4ad04ac04ab04aa, 0x4b104b004af04ae, 0x4b504b404b304b2, 0x4b904b804b704b6, 0x4bd04bc04bb04ba, 0x4c104c004bf04be, 0x4c504c404c304c2, 0x4c904c804c704c6, 0x4cd04cc04cb04ca, 0x4d104d004cf04ce, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4d504d404d304d2, 0x4d904d804d704d6, 0x4dd04dc04db04da, 0x4e104e004df04de, 0x4e504e404e304e2, 0x4e904e804e704e6, 0x4ed04ec04eb04ea, 0x4f104f004ef04ee, 0x4f504f404f304f2, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4f6ffffffffffff, 0x4fa04f904f804f7, 0x4fe04fd04fc04fb, 0x501ffff050004ff, 0x505050405030502, 0x509050805070506, 0x50d050c050b050a, 0x510ffff050f050e, 0x514051305120511, 0x517ffff05160515, 0xffffffffffff0518, 0x51c051b051a0519, 0x520051f051e051d, 0x524052305220521, 0x528052705260525, 0x52c052b052a0529, 0x530052f052e052d, 0x534053305320531, 0x538053705360535, 0x53c053b053a0539, 0x540053f053e053d, 0x544054305420541, 0x548054705460545, 0xffff054b054a0549, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x54f054e054d054c, 0x553055205510550, 0x557055605550554, 0x55b055a05590558, 0x55f055e055d055c, 0x563056205610560, 0x567056605650564, 0x56b056a05690568, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x56f056e056d056c, 0x573057205710570, 0x577057605750574, 0x57b057a05790578, 0x57f057e057d057c, 0x583058205810580, 0x587058605850584, 0x58b058a05890588, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x58d058cffffffff, 0x5910590058f058e, 0x595059405930592, 0x599059805970596, 0x59d059c059b059a, 0x5a105a0059f059e, 0x5a505a405a305a2, 0x5a905a805a705a6, 0x5ad05ac05ab05aa, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//10368 bytes -enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xf40], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15000000000000, 0x0, 0x0, 0x16000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1700000000, 0x1900180000, 0x1d001c001b001a, 0x210020001f001e, 0x0, 0x2300220000, 0x0, 0x0, 0x24000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28002700260025, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b002a0000, 0x2f002e002d002c, 0x0, 0x0, 0x0, 0x3100300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x320000, 0x0, 0x0, 0x0, 0x0, 0x35000000340033, 0x3600000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b003a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff001affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1e001d001c001b, 0x2200210020001f, 0x26002500240023, 0x2a002900280027, 0x2e002d002c002b, 0xffff00310030002f, 0x35003400330032, 0x39003800370036, 0x3bffff003affff, 0x3dffff003cffff, 0x3fffff003effff, 0x41ffff0040ffff, 0x43ffff0042ffff, 0x45ffff0044ffff, 0x47ffff0046ffff, 0x49ffff0048ffff, 0x4bffff004affff, 0x4dffff004cffff, 0x4fffff004effff, 0x51ffff0050ffff, 0x53ffff0052ffff, 0x55ffff0054ffff, 0xffff0056ffffffff, 0xffff0058ffff0057, 0xffff005affff0059, 0xffff005cffff005b, 0x5effffffff005d, 0x60ffff005fffff, 0x62ffff0061ffff, 0x64ffff0063ffff, 0x66ffff0065ffff, 0x68ffff0067ffff, 0x6affff0069ffff, 0x6cffff006bffff, 0x6effff006dffff, 0x70ffff006fffff, 0x72ffff0071ffff, 0x74ffff0073ffff, 0xffff0075ffffffff, 0x780077ffff0076, 0x7affffffff0079, 0xffffffff007bffff, 0xffffffffffff007c, 0xffffffffffff007d, 0xffff007effffffff, 0xffffffff007fffff, 0xffff00810080ffff, 0xffff0082ffffffff, 0x84ffff0083ffff, 0xffffffff0085ffff, 0xffffffffffff0086, 0xffffffff0087ffff, 0xffffffffffff0088, 0xffff008affff0089, 0xffffffff008bffff, 0x8dffff008cffff, 0xffffffffffffffff, 0xffff008f008effff, 0x92ffff00910090, 0xffff0094ffff0093, 0xffff0096ffff0095, 0xffff0098ffff0097, 0xffff009affff0099, 0x9dffff009c009b, 0x9fffff009effff, 0xa1ffff00a0ffff, 0xa3ffff00a2ffff, 0xa5ffff00a4ffff, 0xa700a6ffffffff, 0xffffffff00a8ffff, 0xaaffff00a9ffff, 0xacffff00abffff, 0xaeffff00adffff, 0xb0ffff00afffff, 0xb2ffff00b1ffff, 0xb4ffff00b3ffff, 0xb6ffff00b5ffff, 0xb8ffff00b7ffff, 0xbaffff00b9ffff, 0xbcffff00bbffff, 0xbdffffffffffff, 0xbfffff00beffff, 0xc1ffff00c0ffff, 0xc3ffff00c2ffff, 0xc5ffff00c4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xc7ffffffff00c6, 0xffff00c9ffff00c8, 0xcaffffffffffff, 0xccffff00cbffff, 0xceffff00cdffff, 0xd200d100d000cf, 0xd500d4ffff00d3, 0xd7ffff00d6ffff, 0xffffffffffff00d8, 0xdbffff00da00d9, 0xffff00dd00dcffff, 0xe100e000df00de, 0xe3ffffffff00e2, 0xffff00e500e4ffff, 0xffffffff00e6ffff, 0xffffffffffffffff, 0xffffffff00e7ffff, 0xea00e9ffff00e8, 0xebffffffffffff, 0xef00ee00ed00ec, 0xffffffffffff00f0, 0xffff00f1ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00f300f2ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff00f4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xf6ffff00f5ffff, 0xf7ffffffffffff, 0xf8ffffffffffff, 0xffffffff00fa00f9, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfe00fd00fc00fb, 0x101010000ffffff, 0x105010401030102, 0x109010801070106, 0x10d010c010b010a, 0x1110110010f010e, 0x115011401130112, 0x119011801170116, 0xffff011c011b011a, 0xffffffff011e011d, 0x1210120011fffff, 0x123ffff0122ffff, 0x125ffff0124ffff, 0x127ffff0126ffff, 0x129ffff0128ffff, 0x12bffff012affff, 0x12dffff012cffff, 0x1310130012f012e, 0xffffffff0132ffff, 0x134ffffffff0133, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x138013701360135, 0x13c013b013a0139, 0x140013f013e013d, 0x144014301420141, 0x148014701460145, 0x14c014b014a0149, 0x150014f014e014d, 0x154015301520151, 0x158015701560155, 0x15c015b015a0159, 0x160015f015e015d, 0x164016301620161, 0x166ffff0165ffff, 0x168ffff0167ffff, 0x16affff0169ffff, 0x16cffff016bffff, 0x16effff016dffff, 0x170ffff016fffff, 0x172ffff0171ffff, 0x174ffff0173ffff, 0xffffffff0175ffff, 0xffffffffffffffff, 0x176ffffffffffff, 0x178ffff0177ffff, 0x17affff0179ffff, 0x17cffff017bffff, 0x17effff017dffff, 0x180ffff017fffff, 0x182ffff0181ffff, 0x184ffff0183ffff, 0x186ffff0185ffff, 0x188ffff0187ffff, 0x18affff0189ffff, 0x18cffff018bffff, 0x18effff018dffff, 0x190ffff018fffff, 0xffff0191ffffffff, 0xffff0193ffff0192, 0xffff0195ffff0194, 0x1980197ffff0196, 0x19affff0199ffff, 0x19cffff019bffff, 0x19effff019dffff, 0x1a0ffff019fffff, 0x1a2ffff01a1ffff, 0x1a4ffff01a3ffff, 0x1a6ffff01a5ffff, 0x1a8ffff01a7ffff, 0x1aaffff01a9ffff, 0x1acffff01abffff, 0x1aeffff01adffff, 0x1b0ffff01afffff, 0x1b2ffff01b1ffff, 0x1b4ffff01b3ffff, 0x1b6ffff01b5ffff, 0x1b8ffff01b7ffff, 0x1baffff01b9ffff, 0x1bcffff01bbffff, 0x1beffff01bdffff, 0x1c0ffff01bfffff, 0x1c2ffff01c1ffff, 0x1c4ffff01c3ffff, 0x1c6ffff01c5ffff, 0x1c8ffff01c7ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1cb01ca01c9ffff, 0x1cf01ce01cd01cc, 0x1d301d201d101d0, 0x1d701d601d501d4, 0x1db01da01d901d8, 0x1df01de01dd01dc, 0x1e301e201e101e0, 0x1e701e601e501e4, 0x1eb01ea01e901e8, 0xffff01ee01ed01ec, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1f201f101f001ef, 0x1f601f501f401f3, 0x1fa01f901f801f7, 0x1fe01fd01fc01fb, 0x2020201020001ff, 0x206020502040203, 0x20a020902080207, 0x20e020d020c020b, 0x21202110210020f, 0x216021502140213, 0xffff021902180217, 0x21c021b021affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x220021f021e021d, 0xffffffff02220221, 0x226022502240223, 0x22a022902280227, 0xffffffffffff022b, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff022cffff, 0xffffffff022dffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff022effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x230ffff022fffff, 0x232ffff0231ffff, 0x234ffff0233ffff, 0x236ffff0235ffff, 0x238ffff0237ffff, 0x23affff0239ffff, 0x23cffff023bffff, 0x23effff023dffff, 0x240ffff023fffff, 0x242ffff0241ffff, 0x244ffff0243ffff, 0x246ffff0245ffff, 0x248ffff0247ffff, 0x24affff0249ffff, 0x24cffff024bffff, 0x24effff024dffff, 0x250ffff024fffff, 0x252ffff0251ffff, 0x254ffff0253ffff, 0x256ffff0255ffff, 0x258ffff0257ffff, 0x25affff0259ffff, 0x25cffff025bffff, 0x25effff025dffff, 0x260ffff025fffff, 0x262ffff0261ffff, 0x264ffff0263ffff, 0x266ffff0265ffff, 0x268ffff0267ffff, 0x26affff0269ffff, 0x26cffff026bffff, 0x26effff026dffff, 0x270ffff026fffff, 0x272ffff0271ffff, 0x274ffff0273ffff, 0x276ffff0275ffff, 0x278ffff0277ffff, 0xffffffff0279ffff, 0x27affffffffffff, 0xffffffffffffffff, 0x27cffff027bffff, 0x27effff027dffff, 0x280ffff027fffff, 0x282ffff0281ffff, 0x284ffff0283ffff, 0x286ffff0285ffff, 0x288ffff0287ffff, 0x28affff0289ffff, 0x28cffff028bffff, 0x28effff028dffff, 0x290ffff028fffff, 0x292ffff0291ffff, 0x294ffff0293ffff, 0x296ffff0295ffff, 0x298ffff0297ffff, 0x29affff0299ffff, 0x29cffff029bffff, 0x29effff029dffff, 0x2a0ffff029fffff, 0x2a2ffff02a1ffff, 0x2a4ffff02a3ffff, 0x2a6ffff02a5ffff, 0x2a8ffff02a7ffff, 0x2aaffff02a9ffff, 0x2ae02ad02ac02ab, 0x2b202b102b002af, 0xffffffffffffffff, 0xffffffffffffffff, 0x2b602b502b402b3, 0xffffffff02b802b7, 0xffffffffffffffff, 0xffffffffffffffff, 0x2bc02bb02ba02b9, 0x2c002bf02be02bd, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c402c302c202c1, 0x2c802c702c602c5, 0xffffffffffffffff, 0xffffffffffffffff, 0x2cc02cb02ca02c9, 0xffffffff02ce02cd, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d0ffff02cfffff, 0x2d2ffff02d1ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d602d502d402d3, 0x2da02d902d802d7, 0xffffffffffffffff, 0xffffffffffffffff, 0x2de02dd02dc02db, 0x2e202e102e002df, 0x2e602e502e402e3, 0xffffffff02e802e7, 0x2ec02eb02ea02e9, 0x2f002ef02ee02ed, 0xffffffffffffffff, 0xffffffffffffffff, 0x2f402f302f202f1, 0x2f802f702f602f5, 0xffffffffffffffff, 0xffffffffffffffff, 0x2fc02fb02fa02f9, 0x30002ff02fe02fd, 0xffffffffffffffff, 0xffffffffffffffff, 0x303ffff03020301, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0304ffffffff, 0x305ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff03070306, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff03090308, 0xffffffff030affff, 0xffffffffffffffff, 0xffffffffffffffff, 0x30bffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff030cffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x310030f030e030d, 0x314031303120311, 0x318031703160315, 0x31c031b031a0319, 0xffffffffffffffff, 0xffffffffffff031d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3210320031f031e, 0x325032403230322, 0x329032803270326, 0x32d032c032b032a, 0x3310330032f032e, 0x335033403330332, 0xffffffff03370336, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x33b033a03390338, 0x33f033e033d033c, 0x343034203410340, 0x347034603450344, 0x34b034a03490348, 0x34f034e034d034c, 0x353035203510350, 0x357035603550354, 0x35b035a03590358, 0x35f035e035d035c, 0x363036203610360, 0x367036603650364, 0xffffffff0368ffff, 0xffff036a0369ffff, 0xffff036cffff036b, 0xffffffffffff036d, 0x36effffffffffff, 0xffff036fffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x371ffff0370ffff, 0x373ffff0372ffff, 0x375ffff0374ffff, 0x377ffff0376ffff, 0x379ffff0378ffff, 0x37bffff037affff, 0x37dffff037cffff, 0x37fffff037effff, 0x381ffff0380ffff, 0x383ffff0382ffff, 0x385ffff0384ffff, 0x387ffff0386ffff, 0x389ffff0388ffff, 0x38bffff038affff, 0x38dffff038cffff, 0x38fffff038effff, 0x391ffff0390ffff, 0x393ffff0392ffff, 0x395ffff0394ffff, 0x397ffff0396ffff, 0x399ffff0398ffff, 0x39bffff039affff, 0x39dffff039cffff, 0x39fffff039effff, 0x3a1ffff03a0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff03a3ffff03a2, 0x3a4ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3a803a703a603a5, 0x3ac03ab03aa03a9, 0x3b003af03ae03ad, 0x3b403b303b203b1, 0x3b803b703b603b5, 0x3bc03bb03ba03b9, 0x3c003bf03be03bd, 0x3c403c303c203c1, 0x3c803c703c603c5, 0x3cbffff03ca03c9, 0xffffffffffffffff, 0xffffffff03ccffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ceffff03cdffff, 0x3d0ffff03cfffff, 0x3d2ffff03d1ffff, 0x3d4ffff03d3ffff, 0x3d6ffff03d5ffff, 0x3d8ffff03d7ffff, 0x3daffff03d9ffff, 0x3dcffff03dbffff, 0x3deffff03ddffff, 0x3e0ffff03dfffff, 0x3e2ffff03e1ffff, 0xffffffff03e3ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3e5ffff03e4ffff, 0x3e7ffff03e6ffff, 0x3e9ffff03e8ffff, 0x3ebffff03eaffff, 0x3edffff03ecffff, 0x3efffff03eeffff, 0x3f1ffff03f0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3f2ffffffffffff, 0x3f4ffff03f3ffff, 0x3f6ffff03f5ffff, 0x3f8ffff03f7ffff, 0x3f9ffffffffffff, 0x3fbffff03faffff, 0x3fdffff03fcffff, 0x3ffffff03feffff, 0x401ffff0400ffff, 0x403ffff0402ffff, 0x405ffff0404ffff, 0x407ffff0406ffff, 0x409ffff0408ffff, 0x40bffff040affff, 0x40dffff040cffff, 0x40fffff040effff, 0x411ffff0410ffff, 0x413ffff0412ffff, 0x415ffff0414ffff, 0x417ffff0416ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0418ffffffff, 0x41affffffff0419, 0x41cffff041bffff, 0x41effff041dffff, 0xffffffffffffffff, 0xffffffffffff041f, 0x421ffff0420ffff, 0x423ffffffff0422, 0x425ffff0424ffff, 0x427ffff0426ffff, 0x429ffff0428ffff, 0x42bffff042affff, 0xffffffff042cffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x42effff042dffff, 0x430ffff042fffff, 0x432ffff0431ffff, 0x434ffff0433ffff, 0xffffffffffffffff, 0xffff0436ffff0435, 0xffffffffffffffff, 0xffffffff0437ffff, 0x438ffffffffffff, 0xffffffff0439ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff043affffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43bffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43f043e043d043c, 0x443044204410440, 0x447044604450444, 0x44b044a04490448, 0x44f044e044d044c, 0x453045204510450, 0x457045604550454, 0x45b045a04590458, 0x45f045e045d045c, 0x463046204610460, 0x467046604650464, 0x46b046a04690468, 0x46f046e046d046c, 0x473047204710470, 0x477047604750474, 0x47b047a04790478, 0x47f047e047d047c, 0x483048204810480, 0x487048604850484, 0x48b048a04890488, 0x48e048d048cffff, 0x49204910490048f, 0x496049504940493, 0x49a049904980497, 0x49e049d049c049b, 0x4a204a104a0049f, 0xffff04a504a404a3, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4a904a804a704a6, 0x4ad04ac04ab04aa, 0x4b104b004af04ae, 0x4b504b404b304b2, 0x4b904b804b704b6, 0x4bd04bc04bb04ba, 0x4c104c004bf04be, 0x4c504c404c304c2, 0x4c904c804c704c6, 0x4cd04cc04cb04ca, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4d104d004cf04ce, 0x4d504d404d304d2, 0x4d904d804d704d6, 0x4dd04dc04db04da, 0x4e104e004df04de, 0x4e504e404e304e2, 0x4e904e804e704e6, 0x4ed04ec04eb04ea, 0x4f104f004ef04ee, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4f2ffffffffffff, 0x4f604f504f404f3, 0x4fa04f904f804f7, 0x4fdffff04fc04fb, 0x501050004ff04fe, 0x505050405030502, 0x509050805070506, 0x50cffff050b050a, 0x510050f050e050d, 0x513ffff05120511, 0xffffffffffff0514, 0x518051705160515, 0x51c051b051a0519, 0x520051f051e051d, 0x524052305220521, 0x528052705260525, 0x52c052b052a0529, 0x530052f052e052d, 0x534053305320531, 0x538053705360535, 0x53c053b053a0539, 0x540053f053e053d, 0x544054305420541, 0xffff054705460545, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x54b054a05490548, 0x54f054e054d054c, 0x553055205510550, 0x557055605550554, 0x55b055a05590558, 0x55f055e055d055c, 0x563056205610560, 0x567056605650564, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x56b056a05690568, 0x56f056e056d056c, 0x573057205710570, 0x577057605750574, 0x57b057a05790578, 0x57f057e057d057c, 0x583058205810580, 0x587058605850584, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x5890588ffffffff, 0x58d058c058b058a, 0x5910590058f058e, 0x595059405930592, 0x599059805970596, 0x59d059c059b059a, 0x5a105a0059f059e, 0x5a505a405a305a2, 0x5a905a805a705a6, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//9856 bytes -enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xe40], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x2000000010000, 0x6000500040003, 0x80007, 0xb000a00090000, 0xf000e000d000c, 0x110010, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13001200000000, 0x0, 0x0, 0x15001400000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1600000000, 0x0, 0x1a001900180017, 0x1e001d001c001b, 0x0, 0x210020001f, 0x0, 0x0, 0x23002200000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27002600250024, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2900280000, 0x2d002c002b002a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x3100300000002f, 0x3300320000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3400000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3500000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x360000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1d001c001b001a, 0x210020001f001e, 0x25002400230022, 0x29002800270026, 0x2d002c002b002a, 0xffff0030002f002e, 0x34003300320031, 0xffff003700360035, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0039ffff0038, 0xffff003bffff003a, 0xffff003dffff003c, 0xffff003fffff003e, 0xffff0041ffff0040, 0xffff0043ffff0042, 0xffff0045ffff0044, 0xffff0047ffff0046, 0xffff0049ffff0048, 0xffff004bffff004a, 0xffff004dffff004c, 0xffff004fffff004e, 0xffff0051ffff0050, 0xffff0053ffff0052, 0x55ffff0054ffff, 0x57ffff0056ffff, 0x59ffff0058ffff, 0x5bffff005affff, 0xffff005cffffffff, 0xffff005effff005d, 0xffff0060ffff005f, 0xffff0062ffff0061, 0xffff0064ffff0063, 0xffff0066ffff0065, 0xffff0068ffff0067, 0xffff006affff0069, 0xffff006cffff006b, 0xffff006effff006d, 0xffff0070ffff006f, 0xffff0072ffff0071, 0x75ffff00740073, 0xffffffff0076ffff, 0xffff00780077ffff, 0x7b007affff0079, 0x7e007d007cffff, 0x80007fffffffff, 0x83ffff00820081, 0x860085ffff0084, 0xffffffffffff0087, 0x8affff00890088, 0xffff008cffff008b, 0x8f008effff008d, 0xffffffff0090ffff, 0x930092ffff0091, 0x9600950094ffff, 0x98ffff0097ffff, 0xffffffffffff0099, 0xffffffffffff009a, 0xffffffffffffffff, 0x9dffff009c009b, 0xa0009fffff009e, 0xa2ffff00a1ffff, 0xa4ffff00a3ffff, 0xa6ffff00a5ffff, 0xa8ffff00a7ffff, 0xffff00a9ffffffff, 0xffff00abffff00aa, 0xffff00adffff00ac, 0xffff00afffff00ae, 0xffff00b1ffff00b0, 0xffff00b300b2ffff, 0xb600b5ffff00b4, 0xffff00b8ffff00b7, 0xffff00baffff00b9, 0xffff00bcffff00bb, 0xffff00beffff00bd, 0xffff00c0ffff00bf, 0xffff00c2ffff00c1, 0xffff00c4ffff00c3, 0xffff00c6ffff00c5, 0xffff00c8ffff00c7, 0xffff00caffff00c9, 0xffff00ccffff00cb, 0xffff00ceffff00cd, 0xffff00d0ffff00cf, 0xffff00d2ffff00d1, 0xffff00d4ffff00d3, 0xffffffffffffffff, 0xd600d5ffffffff, 0xffff00d800d7ffff, 0xdaffff00d9ffff, 0xffff00dd00dc00db, 0xffff00dfffff00de, 0xffff00e1ffff00e0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00e3ffff00e2, 0xffff00e4ffffffff, 0xffffffffffffffff, 0xe5ffffffffffff, 0xffffffffffffffff, 0xffff00e6ffffffff, 0xffff00e900e800e7, 0xec00ebffff00ea, 0xef00ee00edffff, 0xf300f200f100f0, 0xf700f600f500f4, 0xfb00fa00f900f8, 0xfeffff00fd00fc, 0x1020101010000ff, 0x106010501040103, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x107ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0109ffff0108, 0xffff010bffff010a, 0xffff010dffff010c, 0xffff010fffff010e, 0xffff0111ffff0110, 0xffff0113ffff0112, 0xffffffffffffffff, 0x115ffffffff0114, 0xffff01170116ffff, 0x11a01190118ffff, 0x11e011d011c011b, 0x12201210120011f, 0x126012501240123, 0x12a012901280127, 0x12e012d012c012b, 0x13201310130012f, 0x136013501340133, 0x13a013901380137, 0x13e013d013c013b, 0x14201410140013f, 0x146014501440143, 0x14a014901480147, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff014cffff014b, 0xffff014effff014d, 0xffff0150ffff014f, 0xffff0152ffff0151, 0xffff0154ffff0153, 0xffff0156ffff0155, 0xffff0158ffff0157, 0xffff015affff0159, 0xffffffffffff015b, 0xffffffffffffffff, 0xffff015cffffffff, 0xffff015effff015d, 0xffff0160ffff015f, 0xffff0162ffff0161, 0xffff0164ffff0163, 0xffff0166ffff0165, 0xffff0168ffff0167, 0xffff016affff0169, 0xffff016cffff016b, 0xffff016effff016d, 0xffff0170ffff016f, 0xffff0172ffff0171, 0xffff0174ffff0173, 0xffff0176ffff0175, 0x179ffff01780177, 0x17bffff017affff, 0x17dffff017cffff, 0xffffffff017effff, 0xffff0180ffff017f, 0xffff0182ffff0181, 0xffff0184ffff0183, 0xffff0186ffff0185, 0xffff0188ffff0187, 0xffff018affff0189, 0xffff018cffff018b, 0xffff018effff018d, 0xffff0190ffff018f, 0xffff0192ffff0191, 0xffff0194ffff0193, 0xffff0196ffff0195, 0xffff0198ffff0197, 0xffff019affff0199, 0xffff019cffff019b, 0xffff019effff019d, 0xffff01a0ffff019f, 0xffff01a2ffff01a1, 0xffff01a4ffff01a3, 0xffff01a6ffff01a5, 0xffff01a8ffff01a7, 0xffff01aaffff01a9, 0xffff01acffff01ab, 0xffff01aeffff01ad, 0x1b101b001afffff, 0x1b501b401b301b2, 0x1b901b801b701b6, 0x1bd01bc01bb01ba, 0x1c101c001bf01be, 0x1c501c401c301c2, 0x1c901c801c701c6, 0x1cd01cc01cb01ca, 0x1d101d001cf01ce, 0xffff01d401d301d2, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1d801d701d601d5, 0x1dc01db01da01d9, 0x1e001df01de01dd, 0x1e401e301e201e1, 0x1e801e701e601e5, 0x1ec01eb01ea01e9, 0x1f001ef01ee01ed, 0x1f401f301f201f1, 0x1f801f701f601f5, 0x1fbffff01fa01f9, 0xffffffffffffffff, 0xffffffff01fcffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x20001ff01fe01fd, 0x204020302020201, 0x208020702060205, 0x20c020b020a0209, 0x210020f020e020d, 0x214021302120211, 0x218021702160215, 0x21c021b021a0219, 0x220021f021e021d, 0x224022302220221, 0x228022702260225, 0x22c022b022a0229, 0x230022f022e022d, 0x234023302320231, 0x238023702360235, 0x23c023b023a0239, 0x240023f023e023d, 0x244024302420241, 0x248024702460245, 0x24c024b024a0249, 0x250024f024e024d, 0xffffffff02520251, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x256025502540253, 0x25a025902580257, 0x25e025d025c025b, 0x26202610260025f, 0x266026502640263, 0x26a026902680267, 0x26e026d026c026b, 0x27202710270026f, 0x276027502740273, 0x27a027902780277, 0xffff027d027c027b, 0x280027f027effff, 0xffff0282ffff0281, 0xffff0284ffff0283, 0xffff0286ffff0285, 0xffff0288ffff0287, 0xffff028affff0289, 0xffff028cffff028b, 0xffff028effff028d, 0xffff0290ffff028f, 0xffff0292ffff0291, 0xffff0294ffff0293, 0xffff0296ffff0295, 0xffff0298ffff0297, 0xffff029affff0299, 0xffff029cffff029b, 0xffff029effff029d, 0xffff02a0ffff029f, 0xffff02a2ffff02a1, 0xffff02a4ffff02a3, 0xffff02a6ffff02a5, 0xffff02a8ffff02a7, 0xffff02aaffff02a9, 0xffff02acffff02ab, 0xffff02aeffff02ad, 0xffff02b0ffff02af, 0xffff02b2ffff02b1, 0xffff02b4ffff02b3, 0xffff02b6ffff02b5, 0xffff02b8ffff02b7, 0xffff02baffff02b9, 0xffff02bcffff02bb, 0xffff02beffff02bd, 0xffff02c0ffff02bf, 0xffff02c2ffff02c1, 0xffff02c4ffff02c3, 0xffff02c6ffff02c5, 0xffff02c8ffff02c7, 0xffff02caffff02c9, 0xffffffffffff02cb, 0xffffffffffffffff, 0xffff02ccffffffff, 0xffff02ceffff02cd, 0xffff02d0ffff02cf, 0xffff02d2ffff02d1, 0xffff02d4ffff02d3, 0xffff02d6ffff02d5, 0xffff02d8ffff02d7, 0xffff02daffff02d9, 0xffff02dcffff02db, 0xffff02deffff02dd, 0xffff02e0ffff02df, 0xffff02e2ffff02e1, 0xffff02e4ffff02e3, 0xffff02e6ffff02e5, 0xffff02e8ffff02e7, 0xffff02eaffff02e9, 0xffff02ecffff02eb, 0xffff02eeffff02ed, 0xffff02f0ffff02ef, 0xffff02f2ffff02f1, 0xffff02f4ffff02f3, 0xffff02f6ffff02f5, 0xffff02f8ffff02f7, 0xffff02faffff02f9, 0xffff02fcffff02fb, 0xffffffffffffffff, 0xffffffffffffffff, 0x30002ff02fe02fd, 0x304030303020301, 0xffffffffffffffff, 0xffffffffffffffff, 0x308030703060305, 0xffffffff030a0309, 0xffffffffffffffff, 0xffffffffffffffff, 0x30e030d030c030b, 0x31203110310030f, 0xffffffffffffffff, 0xffffffffffffffff, 0x316031503140313, 0x31a031903180317, 0xffffffffffffffff, 0xffffffffffffffff, 0x31e031d031c031b, 0xffffffff0320031f, 0xffffffffffffffff, 0xffffffffffffffff, 0x322ffff0321ffff, 0x324ffff0323ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x328032703260325, 0x32c032b032a0329, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x330032f032e032d, 0x334033303320331, 0xffffffffffffffff, 0xffffffffffffffff, 0x338033703360335, 0x33c033b033a0339, 0xffffffffffffffff, 0xffffffffffffffff, 0x340033f033e033d, 0x344034303420341, 0xffffffffffffffff, 0xffffffffffffffff, 0x348034703460345, 0xffffffffffff0349, 0xffffffffffffffff, 0xffffffffffffffff, 0x34d034c034b034a, 0xffffffffffff034e, 0xffffffffffffffff, 0xffffffffffffffff, 0x35203510350034f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x356035503540353, 0xffffffffffff0357, 0xffffffffffffffff, 0xffffffffffffffff, 0x35b035a03590358, 0xffffffffffff035c, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff035dffffffff, 0x35f035effffffff, 0xffffffffffffffff, 0xffff0360ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x364036303620361, 0x368036703660365, 0x36c036b036a0369, 0x370036f036e036d, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x371ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3730372ffffffff, 0x377037603750374, 0x37b037a03790378, 0x37f037e037d037c, 0x383038203810380, 0x387038603850384, 0x38b038a03890388, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x38f038e038d038c, 0x393039203910390, 0x397039603950394, 0x39b039a03990398, 0x39f039e039d039c, 0x3a303a203a103a0, 0x3a703a603a503a4, 0x3ab03aa03a903a8, 0x3af03ae03ad03ac, 0x3b303b203b103b0, 0x3b703b603b503b4, 0x3bb03ba03b903b8, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3be03bdffff03bc, 0x3c0ffffffff03bf, 0x3c2ffff03c1ffff, 0x3c503c403c3ffff, 0xffff03c7ffff03c6, 0xffffffff03c8ffff, 0xffffffffffffffff, 0x3ca03c9ffffffff, 0xffff03ccffff03cb, 0xffff03ceffff03cd, 0xffff03d0ffff03cf, 0xffff03d2ffff03d1, 0xffff03d4ffff03d3, 0xffff03d6ffff03d5, 0xffff03d8ffff03d7, 0xffff03daffff03d9, 0xffff03dcffff03db, 0xffff03deffff03dd, 0xffff03e0ffff03df, 0xffff03e2ffff03e1, 0xffff03e4ffff03e3, 0xffff03e6ffff03e5, 0xffff03e8ffff03e7, 0xffff03eaffff03e9, 0xffff03ecffff03eb, 0xffff03eeffff03ed, 0xffff03f0ffff03ef, 0xffff03f2ffff03f1, 0xffff03f4ffff03f3, 0xffff03f6ffff03f5, 0xffff03f8ffff03f7, 0xffff03faffff03f9, 0xffff03fcffff03fb, 0xffffffffffffffff, 0x3fdffffffffffff, 0xffffffff03feffff, 0xffff03ffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0401ffff0400, 0xffff0403ffff0402, 0xffff0405ffff0404, 0xffff0407ffff0406, 0xffff0409ffff0408, 0xffff040bffff040a, 0xffff040dffff040c, 0xffff040fffff040e, 0xffff0411ffff0410, 0xffff0413ffff0412, 0xffff0415ffff0414, 0xffffffffffff0416, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0418ffff0417, 0xffff041affff0419, 0xffff041cffff041b, 0xffff041effff041d, 0xffff0420ffff041f, 0xffff0422ffff0421, 0xffff0424ffff0423, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0425ffffffff, 0xffff0427ffff0426, 0xffff0429ffff0428, 0xffff042bffff042a, 0xffff042cffffffff, 0xffff042effff042d, 0xffff0430ffff042f, 0xffff0432ffff0431, 0xffff0434ffff0433, 0xffff0436ffff0435, 0xffff0438ffff0437, 0xffff043affff0439, 0xffff043cffff043b, 0xffff043effff043d, 0xffff0440ffff043f, 0xffff0442ffff0441, 0xffff0444ffff0443, 0xffff0446ffff0445, 0xffff0448ffff0447, 0xffff044affff0449, 0xffffffffffffffff, 0xffffffffffffffff, 0x44cffff044bffff, 0xffff044e044dffff, 0xffff0450ffff044f, 0xffff0452ffff0451, 0x453ffffffffffff, 0xffffffff0454ffff, 0xffff0456ffff0455, 0xffff0457ffffffff, 0xffff0459ffff0458, 0xffff045bffff045a, 0xffff045dffff045c, 0xffff045fffff045e, 0x4620461ffff0460, 0xffff046504640463, 0x469046804670466, 0xffff046bffff046a, 0xffff046dffff046c, 0xffff046fffff046e, 0xffff0471ffff0470, 0x475047404730472, 0xffffffff0476ffff, 0xffffffffffffffff, 0xffffffffffff0477, 0xffff0478ffffffff, 0xffffffffffff0479, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff047affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x47d047c047bffff, 0x4810480047f047e, 0x485048404830482, 0x489048804870486, 0x48d048c048b048a, 0x4910490048f048e, 0xffff049404930492, 0xffffffffffffffff, 0x498049704960495, 0x49c049b049a0499, 0x4a0049f049e049d, 0x4a404a304a204a1, 0x4a804a704a604a5, 0x4ac04ab04aa04a9, 0x4b004af04ae04ad, 0x4b404b304b204b1, 0x4b804b704b604b5, 0x4bc04bb04ba04b9, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4c004bf04be04bd, 0x4c404c304c204c1, 0x4c804c704c604c5, 0x4cc04cb04ca04c9, 0x4d004cf04ce04cd, 0x4d404d304d204d1, 0x4d804d704d604d5, 0x4dc04db04da04d9, 0x4e004df04de04dd, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4e404e304e204e1, 0x4e804e704e604e5, 0xffff04eb04ea04e9, 0x4ef04ee04ed04ec, 0x4f304f204f104f0, 0x4f704f604f504f4, 0xffff04fa04f904f8, 0x4fe04fd04fc04fb, 0xffff0501050004ff, 0xffffffff05030502, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x507050605050504, 0x50b050a05090508, 0x50f050e050d050c, 0x513051205110510, 0x517051605150514, 0x51b051a05190518, 0x51f051e051d051c, 0x523052205210520, 0x527052605250524, 0x52b052a05290528, 0x52f052e052d052c, 0x533053205310530, 0xffff053605350534, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x53a053905380537, 0x53e053d053c053b, 0x54205410540053f, 0x546054505440543, 0x54a054905480547, 0x54e054d054c054b, 0x55205510550054f, 0x556055505540553, 0x55a055905580557, 0x55e055d055c055b, 0x56205610560055f, 0x566056505640563, 0x56a056905680567, 0x56e056d056c056b, 0x57205710570056f, 0x576057505740573, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x57a057905780577, 0x57e057d057c057b, 0x58205810580057f, 0x586058505840583, 0x58a058905880587, 0x58e058d058c058b, 0x59205910590058f, 0x596059505940593, 0xffffffff05980597, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -//10368 bytes -enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)([ 0x0, 0x20, 0x140], [ 0x100, 0x480, 0xf40], [ 0x402030202020100, 0x702020206020205, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x202020202020202, 0x3000200010000, 0x7000600050004, 0xa00090008, 0xd000c000b0000, 0x110010000f000e, 0x1400130012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15000000000000, 0x0, 0x0, 0x16000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1700000000, 0x1900180000, 0x1d001c001b001a, 0x210020001f001e, 0x0, 0x2300220000, 0x0, 0x0, 0x24000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28002700260025, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b002a0000, 0x2f002e002d002c, 0x0, 0x0, 0x0, 0x3100300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x320000, 0x0, 0x0, 0x0, 0x0, 0x35000000340033, 0x3600000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x390000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b003a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x200010000ffff, 0x6000500040003, 0xa000900080007, 0xe000d000c000b, 0x1200110010000f, 0x16001500140013, 0xffff001900180017, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff001affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1e001d001c001b, 0x2200210020001f, 0x26002500240023, 0x2a002900280027, 0x2e002d002c002b, 0xffff00310030002f, 0x35003400330032, 0x39003800370036, 0x3bffff003affff, 0x3dffff003cffff, 0x3fffff003effff, 0x41ffff0040ffff, 0x43ffff0042ffff, 0x45ffff0044ffff, 0x47ffff0046ffff, 0x49ffff0048ffff, 0x4bffff004affff, 0x4dffff004cffff, 0x4fffff004effff, 0x51ffff0050ffff, 0x53ffff0052ffff, 0x55ffff0054ffff, 0xffff0056ffffffff, 0xffff0058ffff0057, 0xffff005affff0059, 0xffff005cffff005b, 0x5effffffff005d, 0x60ffff005fffff, 0x62ffff0061ffff, 0x64ffff0063ffff, 0x66ffff0065ffff, 0x68ffff0067ffff, 0x6affff0069ffff, 0x6cffff006bffff, 0x6effff006dffff, 0x70ffff006fffff, 0x72ffff0071ffff, 0x74ffff0073ffff, 0xffff0075ffffffff, 0x780077ffff0076, 0x7affffffff0079, 0xffffffff007bffff, 0xffffffffffff007c, 0xffffffffffff007d, 0xffff007effffffff, 0xffffffff007fffff, 0xffff00810080ffff, 0xffff0082ffffffff, 0x84ffff0083ffff, 0xffffffff0085ffff, 0xffffffffffff0086, 0xffffffff0087ffff, 0xffffffffffff0088, 0xffff008affff0089, 0xffffffff008bffff, 0x8dffff008cffff, 0xffffffffffffffff, 0x910090008f008e, 0x95009400930092, 0xffff0097ffff0096, 0xffff0099ffff0098, 0xffff009bffff009a, 0xffff009dffff009c, 0xa0ffff009f009e, 0xa2ffff00a1ffff, 0xa4ffff00a3ffff, 0xa6ffff00a5ffff, 0xa8ffff00a7ffff, 0xab00aa00a9ffff, 0xffffffff00acffff, 0xaeffff00adffff, 0xb0ffff00afffff, 0xb2ffff00b1ffff, 0xb4ffff00b3ffff, 0xb6ffff00b5ffff, 0xb8ffff00b7ffff, 0xbaffff00b9ffff, 0xbcffff00bbffff, 0xbeffff00bdffff, 0xc0ffff00bfffff, 0xc1ffffffffffff, 0xc3ffff00c2ffff, 0xc5ffff00c4ffff, 0xc7ffff00c6ffff, 0xc9ffff00c8ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xcbffffffff00ca, 0xffff00cdffff00cc, 0xceffffffffffff, 0xd0ffff00cfffff, 0xd2ffff00d1ffff, 0xd600d500d400d3, 0xd900d8ffff00d7, 0xdbffff00daffff, 0xffffffffffff00dc, 0xdfffff00de00dd, 0xffff00e100e0ffff, 0xe500e400e300e2, 0xe7ffffffff00e6, 0xffff00e900e8ffff, 0xffffffff00eaffff, 0xffffffffffffffff, 0xffffffff00ebffff, 0xee00edffff00ec, 0xefffffffffffff, 0xf300f200f100f0, 0xffffffffffff00f4, 0xffff00f5ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff00f700f6ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff00f8ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xfaffff00f9ffff, 0xfbffffffffffff, 0xfcffffffffffff, 0xffffffff00fe00fd, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1020101010000ff, 0x10501040103ffff, 0x109010801070106, 0x10d010c010b010a, 0x1110110010f010e, 0x115011401130112, 0x119011801170116, 0x11d011c011b011a, 0xffff0120011f011e, 0xffffffff01220121, 0x12501240123ffff, 0x127ffff0126ffff, 0x129ffff0128ffff, 0x12bffff012affff, 0x12dffff012cffff, 0x12fffff012effff, 0x131ffff0130ffff, 0x135013401330132, 0xffffffff0136ffff, 0x138ffffffff0137, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x13c013b013a0139, 0x140013f013e013d, 0x144014301420141, 0x148014701460145, 0x14c014b014a0149, 0x150014f014e014d, 0x154015301520151, 0x158015701560155, 0x15c015b015a0159, 0x160015f015e015d, 0x164016301620161, 0x168016701660165, 0x16affff0169ffff, 0x16cffff016bffff, 0x16effff016dffff, 0x170ffff016fffff, 0x172ffff0171ffff, 0x174ffff0173ffff, 0x176ffff0175ffff, 0x178ffff0177ffff, 0xffffffff0179ffff, 0xffffffffffffffff, 0x17affffffffffff, 0x17cffff017bffff, 0x17effff017dffff, 0x180ffff017fffff, 0x182ffff0181ffff, 0x184ffff0183ffff, 0x186ffff0185ffff, 0x188ffff0187ffff, 0x18affff0189ffff, 0x18cffff018bffff, 0x18effff018dffff, 0x190ffff018fffff, 0x192ffff0191ffff, 0x194ffff0193ffff, 0xffff0195ffffffff, 0xffff0197ffff0196, 0xffff0199ffff0198, 0x19c019bffff019a, 0x19effff019dffff, 0x1a0ffff019fffff, 0x1a2ffff01a1ffff, 0x1a4ffff01a3ffff, 0x1a6ffff01a5ffff, 0x1a8ffff01a7ffff, 0x1aaffff01a9ffff, 0x1acffff01abffff, 0x1aeffff01adffff, 0x1b0ffff01afffff, 0x1b2ffff01b1ffff, 0x1b4ffff01b3ffff, 0x1b6ffff01b5ffff, 0x1b8ffff01b7ffff, 0x1baffff01b9ffff, 0x1bcffff01bbffff, 0x1beffff01bdffff, 0x1c0ffff01bfffff, 0x1c2ffff01c1ffff, 0x1c4ffff01c3ffff, 0x1c6ffff01c5ffff, 0x1c8ffff01c7ffff, 0x1caffff01c9ffff, 0x1ccffff01cbffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1cf01ce01cdffff, 0x1d301d201d101d0, 0x1d701d601d501d4, 0x1db01da01d901d8, 0x1df01de01dd01dc, 0x1e301e201e101e0, 0x1e701e601e501e4, 0x1eb01ea01e901e8, 0x1ef01ee01ed01ec, 0xffff01f201f101f0, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x1f601f501f401f3, 0x1fa01f901f801f7, 0x1fe01fd01fc01fb, 0x2020201020001ff, 0x206020502040203, 0x20a020902080207, 0x20e020d020c020b, 0x21202110210020f, 0x216021502140213, 0x21a021902180217, 0xffff021d021c021b, 0x220021f021effff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x224022302220221, 0xffffffff02260225, 0x22a022902280227, 0x22e022d022c022b, 0xffffffffffff022f, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff0230ffff, 0xffffffff0231ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0232ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x234ffff0233ffff, 0x236ffff0235ffff, 0x238ffff0237ffff, 0x23affff0239ffff, 0x23cffff023bffff, 0x23effff023dffff, 0x240ffff023fffff, 0x242ffff0241ffff, 0x244ffff0243ffff, 0x246ffff0245ffff, 0x248ffff0247ffff, 0x24affff0249ffff, 0x24cffff024bffff, 0x24effff024dffff, 0x250ffff024fffff, 0x252ffff0251ffff, 0x254ffff0253ffff, 0x256ffff0255ffff, 0x258ffff0257ffff, 0x25affff0259ffff, 0x25cffff025bffff, 0x25effff025dffff, 0x260ffff025fffff, 0x262ffff0261ffff, 0x264ffff0263ffff, 0x266ffff0265ffff, 0x268ffff0267ffff, 0x26affff0269ffff, 0x26cffff026bffff, 0x26effff026dffff, 0x270ffff026fffff, 0x272ffff0271ffff, 0x274ffff0273ffff, 0x276ffff0275ffff, 0x278ffff0277ffff, 0x27affff0279ffff, 0x27cffff027bffff, 0xffffffff027dffff, 0x27effffffffffff, 0xffffffffffffffff, 0x280ffff027fffff, 0x282ffff0281ffff, 0x284ffff0283ffff, 0x286ffff0285ffff, 0x288ffff0287ffff, 0x28affff0289ffff, 0x28cffff028bffff, 0x28effff028dffff, 0x290ffff028fffff, 0x292ffff0291ffff, 0x294ffff0293ffff, 0x296ffff0295ffff, 0x298ffff0297ffff, 0x29affff0299ffff, 0x29cffff029bffff, 0x29effff029dffff, 0x2a0ffff029fffff, 0x2a2ffff02a1ffff, 0x2a4ffff02a3ffff, 0x2a6ffff02a5ffff, 0x2a8ffff02a7ffff, 0x2aaffff02a9ffff, 0x2acffff02abffff, 0x2aeffff02adffff, 0x2b202b102b002af, 0x2b602b502b402b3, 0xffffffffffffffff, 0xffffffffffffffff, 0x2ba02b902b802b7, 0xffffffff02bc02bb, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c002bf02be02bd, 0x2c402c302c202c1, 0xffffffffffffffff, 0xffffffffffffffff, 0x2c802c702c602c5, 0x2cc02cb02ca02c9, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d002cf02ce02cd, 0xffffffff02d202d1, 0xffffffffffffffff, 0xffffffffffffffff, 0x2d4ffff02d3ffff, 0x2d6ffff02d5ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x2da02d902d802d7, 0x2de02dd02dc02db, 0xffffffffffffffff, 0xffffffffffffffff, 0x2e202e102e002df, 0x2e602e502e402e3, 0x2ea02e902e802e7, 0xffffffff02ec02eb, 0x2f002ef02ee02ed, 0x2f402f302f202f1, 0xffffffffffffffff, 0xffffffffffffffff, 0x2f802f702f602f5, 0x2fc02fb02fa02f9, 0xffffffffffffffff, 0xffffffffffffffff, 0x30002ff02fe02fd, 0x304030303020301, 0xffffffffffffffff, 0xffffffffffffffff, 0x307ffff03060305, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0308ffffffff, 0x309ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff030b030a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffff030d030c, 0xffffffff030effff, 0xffffffffffffffff, 0xffffffffffffffff, 0x30fffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff0310ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x314031303120311, 0x318031703160315, 0x31c031b031a0319, 0x320031f031e031d, 0xffffffffffffffff, 0xffffffffffff0321, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x325032403230322, 0x329032803270326, 0x32d032c032b032a, 0x3310330032f032e, 0x335033403330332, 0x339033803370336, 0xffffffff033b033a, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x33f033e033d033c, 0x343034203410340, 0x347034603450344, 0x34b034a03490348, 0x34f034e034d034c, 0x353035203510350, 0x357035603550354, 0x35b035a03590358, 0x35f035e035d035c, 0x363036203610360, 0x367036603650364, 0x36b036a03690368, 0xffffffff036cffff, 0xffff036e036dffff, 0xffff0370ffff036f, 0xffffffffffff0371, 0x372ffffffffffff, 0xffff0373ffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x375ffff0374ffff, 0x377ffff0376ffff, 0x379ffff0378ffff, 0x37bffff037affff, 0x37dffff037cffff, 0x37fffff037effff, 0x381ffff0380ffff, 0x383ffff0382ffff, 0x385ffff0384ffff, 0x387ffff0386ffff, 0x389ffff0388ffff, 0x38bffff038affff, 0x38dffff038cffff, 0x38fffff038effff, 0x391ffff0390ffff, 0x393ffff0392ffff, 0x395ffff0394ffff, 0x397ffff0396ffff, 0x399ffff0398ffff, 0x39bffff039affff, 0x39dffff039cffff, 0x39fffff039effff, 0x3a1ffff03a0ffff, 0x3a3ffff03a2ffff, 0x3a5ffff03a4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff03a7ffff03a6, 0x3a8ffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3ac03ab03aa03a9, 0x3b003af03ae03ad, 0x3b403b303b203b1, 0x3b803b703b603b5, 0x3bc03bb03ba03b9, 0x3c003bf03be03bd, 0x3c403c303c203c1, 0x3c803c703c603c5, 0x3cc03cb03ca03c9, 0x3cfffff03ce03cd, 0xffffffffffffffff, 0xffffffff03d0ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3d2ffff03d1ffff, 0x3d4ffff03d3ffff, 0x3d6ffff03d5ffff, 0x3d8ffff03d7ffff, 0x3daffff03d9ffff, 0x3dcffff03dbffff, 0x3deffff03ddffff, 0x3e0ffff03dfffff, 0x3e2ffff03e1ffff, 0x3e4ffff03e3ffff, 0x3e6ffff03e5ffff, 0xffffffff03e7ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3e9ffff03e8ffff, 0x3ebffff03eaffff, 0x3edffff03ecffff, 0x3efffff03eeffff, 0x3f1ffff03f0ffff, 0x3f3ffff03f2ffff, 0x3f5ffff03f4ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x3f6ffffffffffff, 0x3f8ffff03f7ffff, 0x3faffff03f9ffff, 0x3fcffff03fbffff, 0x3fdffffffffffff, 0x3ffffff03feffff, 0x401ffff0400ffff, 0x403ffff0402ffff, 0x405ffff0404ffff, 0x407ffff0406ffff, 0x409ffff0408ffff, 0x40bffff040affff, 0x40dffff040cffff, 0x40fffff040effff, 0x411ffff0410ffff, 0x413ffff0412ffff, 0x415ffff0414ffff, 0x417ffff0416ffff, 0x419ffff0418ffff, 0x41bffff041affff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff041cffffffff, 0x41effffffff041d, 0x420ffff041fffff, 0x422ffff0421ffff, 0xffffffffffffffff, 0xffffffffffff0423, 0x425ffff0424ffff, 0x427ffffffff0426, 0x429ffff0428ffff, 0x42bffff042affff, 0x42dffff042cffff, 0x42fffff042effff, 0xffffffff0430ffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x432ffff0431ffff, 0x434ffff0433ffff, 0x436ffff0435ffff, 0x438ffff0437ffff, 0xffffffffffffffff, 0xffff043affff0439, 0xffffffffffffffff, 0xffffffff043bffff, 0x43cffffffffffff, 0xffffffff043dffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffff043effffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x43fffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x443044204410440, 0x447044604450444, 0x44b044a04490448, 0x44f044e044d044c, 0x453045204510450, 0x457045604550454, 0x45b045a04590458, 0x45f045e045d045c, 0x463046204610460, 0x467046604650464, 0x46b046a04690468, 0x46f046e046d046c, 0x473047204710470, 0x477047604750474, 0x47b047a04790478, 0x47f047e047d047c, 0x483048204810480, 0x487048604850484, 0x48b048a04890488, 0x48f048e048d048c, 0x49204910490ffff, 0x496049504940493, 0x49a049904980497, 0x49e049d049c049b, 0x4a204a104a0049f, 0x4a604a504a404a3, 0xffff04a904a804a7, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4ad04ac04ab04aa, 0x4b104b004af04ae, 0x4b504b404b304b2, 0x4b904b804b704b6, 0x4bd04bc04bb04ba, 0x4c104c004bf04be, 0x4c504c404c304c2, 0x4c904c804c704c6, 0x4cd04cc04cb04ca, 0x4d104d004cf04ce, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4d504d404d304d2, 0x4d904d804d704d6, 0x4dd04dc04db04da, 0x4e104e004df04de, 0x4e504e404e304e2, 0x4e904e804e704e6, 0x4ed04ec04eb04ea, 0x4f104f004ef04ee, 0x4f504f404f304f2, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x4f6ffffffffffff, 0x4fa04f904f804f7, 0x4fe04fd04fc04fb, 0x501ffff050004ff, 0x505050405030502, 0x509050805070506, 0x50d050c050b050a, 0x510ffff050f050e, 0x514051305120511, 0x517ffff05160515, 0xffffffffffff0518, 0x51c051b051a0519, 0x520051f051e051d, 0x524052305220521, 0x528052705260525, 0x52c052b052a0529, 0x530052f052e052d, 0x534053305320531, 0x538053705360535, 0x53c053b053a0539, 0x540053f053e053d, 0x544054305420541, 0x548054705460545, 0xffff054b054a0549, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x54f054e054d054c, 0x553055205510550, 0x557055605550554, 0x55b055a05590558, 0x55f055e055d055c, 0x563056205610560, 0x567056605650564, 0x56b056a05690568, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x56f056e056d056c, 0x573057205710570, 0x577057605750574, 0x57b057a05790578, 0x57f057e057d057c, 0x583058205810580, 0x587058605850584, 0x58b058a05890588, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x58d058cffffffff, 0x5910590058f058e, 0x595059405930592, 0x599059805970596, 0x59d059c059b059a, 0x5a105a0059f059e, 0x5a505a405a305a2, 0x5a905a805a705a6, 0x5ad05ac05ab05aa, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff]); -@property -{ -private alias _IUA = immutable(uint[]); -_IUA toUpperTable() nothrow @nogc @safe pure { static _IUA t = [ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x39c, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x49, 0x132, 0x134, 0x136, 0x139, 0x13b, 0x13d, 0x13f, 0x141, 0x143, 0x145, 0x147, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17b, 0x17d, 0x53, 0x243, 0x182, 0x184, 0x187, 0x18b, 0x191, 0x1f6, 0x198, 0x23d, 0x220, 0x1a0, 0x1a2, 0x1a4, 0x1a7, 0x1ac, 0x1af, 0x1b3, 0x1b5, 0x1b8, 0x1bc, 0x1f7, 0x1c4, 0x1c4, 0x1c7, 0x1c7, 0x1ca, 0x1ca, 0x1cd, 0x1cf, 0x1d1, 0x1d3, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x18e, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f1, 0x1f1, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x23b, 0x2c7e, 0x2c7f, 0x241, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x2c6f, 0x2c6d, 0x2c70, 0x181, 0x186, 0x189, 0x18a, 0x18f, 0x190, 0xa7ab, 0x193, 0xa7ac, 0x194, 0xa78d, 0xa7aa, 0x197, 0x196, 0xa7ae, 0x2c62, 0xa7ad, 0x19c, 0x2c6e, 0x19d, 0x19f, 0x2c64, 0x1a6, 0xa7c5, 0x1a9, 0xa7b1, 0x1ae, 0x244, 0x1b1, 0x1b2, 0x245, 0x1b7, 0xa7b2, 0xa7b0, 0x399, 0x370, 0x372, 0x376, 0x3fd, 0x3fe, 0x3ff, 0x386, 0x388, 0x389, 0x38a, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0x392, 0x398, 0x3a6, 0x3a0, 0x3cf, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x39a, 0x3a1, 0x3f9, 0x37f, 0x395, 0x3f7, 0x3fa, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c1, 0x4c3, 0x4c5, 0x4c7, 0x4c9, 0x4cb, 0x4cd, 0x4c0, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x1c90, 0x1c91, 0x1c92, 0x1c93, 0x1c94, 0x1c95, 0x1c96, 0x1c97, 0x1c98, 0x1c99, 0x1c9a, 0x1c9b, 0x1c9c, 0x1c9d, 0x1c9e, 0x1c9f, 0x1ca0, 0x1ca1, 0x1ca2, 0x1ca3, 0x1ca4, 0x1ca5, 0x1ca6, 0x1ca7, 0x1ca8, 0x1ca9, 0x1caa, 0x1cab, 0x1cac, 0x1cad, 0x1cae, 0x1caf, 0x1cb0, 0x1cb1, 0x1cb2, 0x1cb3, 0x1cb4, 0x1cb5, 0x1cb6, 0x1cb7, 0x1cb8, 0x1cb9, 0x1cba, 0x1cbd, 0x1cbe, 0x1cbf, 0x13f0, 0x13f1, 0x13f2, 0x13f3, 0x13f4, 0x13f5, 0x412, 0x414, 0x41e, 0x421, 0x422, 0x422, 0x42a, 0x462, 0xa64a, 0xa77d, 0x2c63, 0xa7c6, 0x1e00, 0x1e02, 0x1e04, 0x1e06, 0x1e08, 0x1e0a, 0x1e0c, 0x1e0e, 0x1e10, 0x1e12, 0x1e14, 0x1e16, 0x1e18, 0x1e1a, 0x1e1c, 0x1e1e, 0x1e20, 0x1e22, 0x1e24, 0x1e26, 0x1e28, 0x1e2a, 0x1e2c, 0x1e2e, 0x1e30, 0x1e32, 0x1e34, 0x1e36, 0x1e38, 0x1e3a, 0x1e3c, 0x1e3e, 0x1e40, 0x1e42, 0x1e44, 0x1e46, 0x1e48, 0x1e4a, 0x1e4c, 0x1e4e, 0x1e50, 0x1e52, 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e60, 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72, 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c, 0x1e7e, 0x1e80, 0x1e82, 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c, 0x1e8e, 0x1e90, 0x1e92, 0x1e94, 0x1e60, 0x1ea0, 0x1ea2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc, 0x1ece, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, 0x1ef2, 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc, 0x1efe, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f59, 0x1f5b, 0x1f5d, 0x1f5f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fb8, 0x1fb9, 0x1fbc, 0x399, 0x1fcc, 0x1fd8, 0x1fd9, 0x1fe8, 0x1fe9, 0x1fec, 0x1ffc, 0x2132, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0x216c, 0x216d, 0x216e, 0x216f, 0x2183, 0x24b6, 0x24b7, 0x24b8, 0x24b9, 0x24ba, 0x24bb, 0x24bc, 0x24bd, 0x24be, 0x24bf, 0x24c0, 0x24c1, 0x24c2, 0x24c3, 0x24c4, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, 0x24ca, 0x24cb, 0x24cc, 0x24cd, 0x24ce, 0x24cf, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c60, 0x23a, 0x23e, 0x2c67, 0x2c69, 0x2c6b, 0x2c72, 0x2c75, 0x2c80, 0x2c82, 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, 0x2ceb, 0x2ced, 0x2cf2, 0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0x10c7, 0x10cd, 0xa640, 0xa642, 0xa644, 0xa646, 0xa648, 0xa64a, 0xa64c, 0xa64e, 0xa650, 0xa652, 0xa654, 0xa656, 0xa658, 0xa65a, 0xa65c, 0xa65e, 0xa660, 0xa662, 0xa664, 0xa666, 0xa668, 0xa66a, 0xa66c, 0xa680, 0xa682, 0xa684, 0xa686, 0xa688, 0xa68a, 0xa68c, 0xa68e, 0xa690, 0xa692, 0xa694, 0xa696, 0xa698, 0xa69a, 0xa722, 0xa724, 0xa726, 0xa728, 0xa72a, 0xa72c, 0xa72e, 0xa732, 0xa734, 0xa736, 0xa738, 0xa73a, 0xa73c, 0xa73e, 0xa740, 0xa742, 0xa744, 0xa746, 0xa748, 0xa74a, 0xa74c, 0xa74e, 0xa750, 0xa752, 0xa754, 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa790, 0xa792, 0xa7c4, 0xa796, 0xa798, 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b4, 0xa7b6, 0xa7b8, 0xa7ba, 0xa7bc, 0xa7be, 0xa7c0, 0xa7c2, 0xa7c7, 0xa7c9, 0xa7d0, 0xa7d6, 0xa7d8, 0xa7f5, 0xa7b3, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6, 0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf, 0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da, 0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3, 0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec, 0x13ed, 0x13ee, 0x13ef, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x10570, 0x10571, 0x10572, 0x10573, 0x10574, 0x10575, 0x10576, 0x10577, 0x10578, 0x10579, 0x1057a, 0x1057c, 0x1057d, 0x1057e, 0x1057f, 0x10580, 0x10581, 0x10582, 0x10583, 0x10584, 0x10585, 0x10586, 0x10587, 0x10588, 0x10589, 0x1058a, 0x1058c, 0x1058d, 0x1058e, 0x1058f, 0x10590, 0x10591, 0x10592, 0x10594, 0x10595, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae, 0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x16e40, 0x16e41, 0x16e42, 0x16e43, 0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a, 0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c, 0x16e5d, 0x16e5e, 0x16e5f, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x2000053, 0x53, 0x130, 0x2000046, 0x46, 0x2000046, 0x49, 0x2000046, 0x4c, 0x3000046, 0x46, 0x49, 0x3000046, 0x46, 0x4c, 0x2000053, 0x54, 0x2000053, 0x54, 0x2000535, 0x552, 0x2000544, 0x546, 0x2000544, 0x535, 0x2000544, 0x53b, 0x200054e, 0x546, 0x2000544, 0x53d, 0x20002bc, 0x4e, 0x3000399, 0x308, 0x301, 0x30003a5, 0x308, 0x301, 0x200004a, 0x30c, 0x2000048, 0x331, 0x2000054, 0x308, 0x2000057, 0x30a, 0x2000059, 0x30a, 0x2000041, 0x2be, 0x20003a5, 0x313, 0x30003a5, 0x313, 0x300, 0x30003a5, 0x313, 0x301, 0x30003a5, 0x313, 0x342, 0x2000391, 0x342, 0x2000397, 0x342, 0x3000399, 0x308, 0x300, 0x3000399, 0x308, 0x301, 0x2000399, 0x342, 0x3000399, 0x308, 0x342, 0x30003a5, 0x308, 0x300, 0x30003a5, 0x308, 0x301, 0x20003a1, 0x313, 0x20003a5, 0x342, 0x30003a5, 0x308, 0x342, 0x20003a9, 0x342, 0x2001f08, 0x399, 0x2001f09, 0x399, 0x2001f0a, 0x399, 0x2001f0b, 0x399, 0x2001f0c, 0x399, 0x2001f0d, 0x399, 0x2001f0e, 0x399, 0x2001f0f, 0x399, 0x2001f08, 0x399, 0x2001f09, 0x399, 0x2001f0a, 0x399, 0x2001f0b, 0x399, 0x2001f0c, 0x399, 0x2001f0d, 0x399, 0x2001f0e, 0x399, 0x2001f0f, 0x399, 0x2001f28, 0x399, 0x2001f29, 0x399, 0x2001f2a, 0x399, 0x2001f2b, 0x399, 0x2001f2c, 0x399, 0x2001f2d, 0x399, 0x2001f2e, 0x399, 0x2001f2f, 0x399, 0x2001f28, 0x399, 0x2001f29, 0x399, 0x2001f2a, 0x399, 0x2001f2b, 0x399, 0x2001f2c, 0x399, 0x2001f2d, 0x399, 0x2001f2e, 0x399, 0x2001f2f, 0x399, 0x2001f68, 0x399, 0x2001f69, 0x399, 0x2001f6a, 0x399, 0x2001f6b, 0x399, 0x2001f6c, 0x399, 0x2001f6d, 0x399, 0x2001f6e, 0x399, 0x2001f6f, 0x399, 0x2001f68, 0x399, 0x2001f69, 0x399, 0x2001f6a, 0x399, 0x2001f6b, 0x399, 0x2001f6c, 0x399, 0x2001f6d, 0x399, 0x2001f6e, 0x399, 0x2001f6f, 0x399, 0x2000391, 0x399, 0x2000391, 0x399, 0x2000397, 0x399, 0x2000397, 0x399, 0x20003a9, 0x399, 0x20003a9, 0x399, 0x2001fba, 0x399, 0x2000386, 0x399, 0x2001fca, 0x399, 0x2000389, 0x399, 0x2001ffa, 0x399, 0x200038f, 0x399, 0x3000391, 0x342, 0x399, 0x3000397, 0x342, 0x399, 0x30003a9, 0x342, 0x399]; return t; } -_IUA toLowerTable() nothrow @nogc @safe pure { static _IUA t = [ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12b, 0x12d, 0x12f, 0x69, 0x133, 0x135, 0x137, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14b, 0x14d, 0x14f, 0x151, 0x153, 0x155, 0x157, 0x159, 0x15b, 0x15d, 0x15f, 0x161, 0x163, 0x165, 0x167, 0x169, 0x16b, 0x16d, 0x16f, 0x171, 0x173, 0x175, 0x177, 0xff, 0x17a, 0x17c, 0x17e, 0x253, 0x183, 0x185, 0x254, 0x188, 0x256, 0x257, 0x18c, 0x1dd, 0x259, 0x25b, 0x192, 0x260, 0x263, 0x269, 0x268, 0x199, 0x26f, 0x272, 0x275, 0x1a1, 0x1a3, 0x1a5, 0x280, 0x1a8, 0x283, 0x1ad, 0x288, 0x1b0, 0x28a, 0x28b, 0x1b4, 0x1b6, 0x292, 0x1b9, 0x1bd, 0x1c6, 0x1c6, 0x1c9, 0x1c9, 0x1cc, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1df, 0x1e1, 0x1e3, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1ed, 0x1ef, 0x1f3, 0x1f3, 0x1f5, 0x195, 0x1bf, 0x1f9, 0x1fb, 0x1fd, 0x1ff, 0x201, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20d, 0x20f, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21b, 0x21d, 0x21f, 0x19e, 0x223, 0x225, 0x227, 0x229, 0x22b, 0x22d, 0x22f, 0x231, 0x233, 0x2c65, 0x23c, 0x19a, 0x2c66, 0x242, 0x180, 0x289, 0x28c, 0x247, 0x249, 0x24b, 0x24d, 0x24f, 0x371, 0x373, 0x377, 0x3f3, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3cc, 0x3cd, 0x3ce, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3d7, 0x3d9, 0x3db, 0x3dd, 0x3df, 0x3e1, 0x3e3, 0x3e5, 0x3e7, 0x3e9, 0x3eb, 0x3ed, 0x3ef, 0x3b8, 0x3f8, 0x3f2, 0x3fb, 0x37b, 0x37c, 0x37d, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x461, 0x463, 0x465, 0x467, 0x469, 0x46b, 0x46d, 0x46f, 0x471, 0x473, 0x475, 0x477, 0x479, 0x47b, 0x47d, 0x47f, 0x481, 0x48b, 0x48d, 0x48f, 0x491, 0x493, 0x495, 0x497, 0x499, 0x49b, 0x49d, 0x49f, 0x4a1, 0x4a3, 0x4a5, 0x4a7, 0x4a9, 0x4ab, 0x4ad, 0x4af, 0x4b1, 0x4b3, 0x4b5, 0x4b7, 0x4b9, 0x4bb, 0x4bd, 0x4bf, 0x4cf, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d1, 0x4d3, 0x4d5, 0x4d7, 0x4d9, 0x4db, 0x4dd, 0x4df, 0x4e1, 0x4e3, 0x4e5, 0x4e7, 0x4e9, 0x4eb, 0x4ed, 0x4ef, 0x4f1, 0x4f3, 0x4f5, 0x4f7, 0x4f9, 0x4fb, 0x4fd, 0x4ff, 0x501, 0x503, 0x505, 0x507, 0x509, 0x50b, 0x50d, 0x50f, 0x511, 0x513, 0x515, 0x517, 0x519, 0x51b, 0x51d, 0x51f, 0x521, 0x523, 0x525, 0x527, 0x529, 0x52b, 0x52d, 0x52f, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x2d00, 0x2d01, 0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d12, 0x2d13, 0x2d14, 0x2d15, 0x2d16, 0x2d17, 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c, 0x2d1d, 0x2d1e, 0x2d1f, 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 0x2d27, 0x2d2d, 0xab70, 0xab71, 0xab72, 0xab73, 0xab74, 0xab75, 0xab76, 0xab77, 0xab78, 0xab79, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, 0xab7f, 0xab80, 0xab81, 0xab82, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab92, 0xab93, 0xab94, 0xab95, 0xab96, 0xab97, 0xab98, 0xab99, 0xab9a, 0xab9b, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, 0xaba1, 0xaba2, 0xaba3, 0xaba4, 0xaba5, 0xaba6, 0xaba7, 0xaba8, 0xaba9, 0xabaa, 0xabab, 0xabac, 0xabad, 0xabae, 0xabaf, 0xabb0, 0xabb1, 0xabb2, 0xabb3, 0xabb4, 0xabb5, 0xabb6, 0xabb7, 0xabb8, 0xabb9, 0xabba, 0xabbb, 0xabbc, 0xabbd, 0xabbe, 0xabbf, 0x13f8, 0x13f9, 0x13fa, 0x13fb, 0x13fc, 0x13fd, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x10f7, 0x10f8, 0x10f9, 0x10fa, 0x10fd, 0x10fe, 0x10ff, 0x1e01, 0x1e03, 0x1e05, 0x1e07, 0x1e09, 0x1e0b, 0x1e0d, 0x1e0f, 0x1e11, 0x1e13, 0x1e15, 0x1e17, 0x1e19, 0x1e1b, 0x1e1d, 0x1e1f, 0x1e21, 0x1e23, 0x1e25, 0x1e27, 0x1e29, 0x1e2b, 0x1e2d, 0x1e2f, 0x1e31, 0x1e33, 0x1e35, 0x1e37, 0x1e39, 0x1e3b, 0x1e3d, 0x1e3f, 0x1e41, 0x1e43, 0x1e45, 0x1e47, 0x1e49, 0x1e4b, 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, 0x1e59, 0x1e5b, 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, 0x1e69, 0x1e6b, 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, 0x1e79, 0x1e7b, 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, 0x1e89, 0x1e8b, 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0xdf, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, 0x1eb9, 0x1ebb, 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ec9, 0x1ecb, 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, 0x1ee9, 0x1eeb, 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1efb, 0x1efd, 0x1eff, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f51, 0x1f53, 0x1f55, 0x1f57, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x3c9, 0x6b, 0xe5, 0x214e, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, 0x2184, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c61, 0x26b, 0x1d7d, 0x27d, 0x2c68, 0x2c6a, 0x2c6c, 0x251, 0x271, 0x250, 0x252, 0x2c73, 0x2c76, 0x23f, 0x240, 0x2c81, 0x2c83, 0x2c85, 0x2c87, 0x2c89, 0x2c8b, 0x2c8d, 0x2c8f, 0x2c91, 0x2c93, 0x2c95, 0x2c97, 0x2c99, 0x2c9b, 0x2c9d, 0x2c9f, 0x2ca1, 0x2ca3, 0x2ca5, 0x2ca7, 0x2ca9, 0x2cab, 0x2cad, 0x2caf, 0x2cb1, 0x2cb3, 0x2cb5, 0x2cb7, 0x2cb9, 0x2cbb, 0x2cbd, 0x2cbf, 0x2cc1, 0x2cc3, 0x2cc5, 0x2cc7, 0x2cc9, 0x2ccb, 0x2ccd, 0x2ccf, 0x2cd1, 0x2cd3, 0x2cd5, 0x2cd7, 0x2cd9, 0x2cdb, 0x2cdd, 0x2cdf, 0x2ce1, 0x2ce3, 0x2cec, 0x2cee, 0x2cf3, 0xa641, 0xa643, 0xa645, 0xa647, 0xa649, 0xa64b, 0xa64d, 0xa64f, 0xa651, 0xa653, 0xa655, 0xa657, 0xa659, 0xa65b, 0xa65d, 0xa65f, 0xa661, 0xa663, 0xa665, 0xa667, 0xa669, 0xa66b, 0xa66d, 0xa681, 0xa683, 0xa685, 0xa687, 0xa689, 0xa68b, 0xa68d, 0xa68f, 0xa691, 0xa693, 0xa695, 0xa697, 0xa699, 0xa69b, 0xa723, 0xa725, 0xa727, 0xa729, 0xa72b, 0xa72d, 0xa72f, 0xa733, 0xa735, 0xa737, 0xa739, 0xa73b, 0xa73d, 0xa73f, 0xa741, 0xa743, 0xa745, 0xa747, 0xa749, 0xa74b, 0xa74d, 0xa74f, 0xa751, 0xa753, 0xa755, 0xa757, 0xa759, 0xa75b, 0xa75d, 0xa75f, 0xa761, 0xa763, 0xa765, 0xa767, 0xa769, 0xa76b, 0xa76d, 0xa76f, 0xa77a, 0xa77c, 0x1d79, 0xa77f, 0xa781, 0xa783, 0xa785, 0xa787, 0xa78c, 0x265, 0xa791, 0xa793, 0xa797, 0xa799, 0xa79b, 0xa79d, 0xa79f, 0xa7a1, 0xa7a3, 0xa7a5, 0xa7a7, 0xa7a9, 0x266, 0x25c, 0x261, 0x26c, 0x26a, 0x29e, 0x287, 0x29d, 0xab53, 0xa7b5, 0xa7b7, 0xa7b9, 0xa7bb, 0xa7bd, 0xa7bf, 0xa7c1, 0xa7c3, 0xa794, 0x282, 0x1d8e, 0xa7c8, 0xa7ca, 0xa7d1, 0xa7d7, 0xa7d9, 0xa7f6, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, 0x104d8, 0x104d9, 0x104da, 0x104db, 0x104dc, 0x104dd, 0x104de, 0x104df, 0x104e0, 0x104e1, 0x104e2, 0x104e3, 0x104e4, 0x104e5, 0x104e6, 0x104e7, 0x104e8, 0x104e9, 0x104ea, 0x104eb, 0x104ec, 0x104ed, 0x104ee, 0x104ef, 0x104f0, 0x104f1, 0x104f2, 0x104f3, 0x104f4, 0x104f5, 0x104f6, 0x104f7, 0x104f8, 0x104f9, 0x104fa, 0x104fb, 0x10597, 0x10598, 0x10599, 0x1059a, 0x1059b, 0x1059c, 0x1059d, 0x1059e, 0x1059f, 0x105a0, 0x105a1, 0x105a3, 0x105a4, 0x105a5, 0x105a6, 0x105a7, 0x105a8, 0x105a9, 0x105aa, 0x105ab, 0x105ac, 0x105ad, 0x105ae, 0x105af, 0x105b0, 0x105b1, 0x105b3, 0x105b4, 0x105b5, 0x105b6, 0x105b7, 0x105b8, 0x105b9, 0x105bb, 0x105bc, 0x10cc0, 0x10cc1, 0x10cc2, 0x10cc3, 0x10cc4, 0x10cc5, 0x10cc6, 0x10cc7, 0x10cc8, 0x10cc9, 0x10cca, 0x10ccb, 0x10ccc, 0x10ccd, 0x10cce, 0x10ccf, 0x10cd0, 0x10cd1, 0x10cd2, 0x10cd3, 0x10cd4, 0x10cd5, 0x10cd6, 0x10cd7, 0x10cd8, 0x10cd9, 0x10cda, 0x10cdb, 0x10cdc, 0x10cdd, 0x10cde, 0x10cdf, 0x10ce0, 0x10ce1, 0x10ce2, 0x10ce3, 0x10ce4, 0x10ce5, 0x10ce6, 0x10ce7, 0x10ce8, 0x10ce9, 0x10cea, 0x10ceb, 0x10cec, 0x10ced, 0x10cee, 0x10cef, 0x10cf0, 0x10cf1, 0x10cf2, 0x118c0, 0x118c1, 0x118c2, 0x118c3, 0x118c4, 0x118c5, 0x118c6, 0x118c7, 0x118c8, 0x118c9, 0x118ca, 0x118cb, 0x118cc, 0x118cd, 0x118ce, 0x118cf, 0x118d0, 0x118d1, 0x118d2, 0x118d3, 0x118d4, 0x118d5, 0x118d6, 0x118d7, 0x118d8, 0x118d9, 0x118da, 0x118db, 0x118dc, 0x118dd, 0x118de, 0x118df, 0x16e60, 0x16e61, 0x16e62, 0x16e63, 0x16e64, 0x16e65, 0x16e66, 0x16e67, 0x16e68, 0x16e69, 0x16e6a, 0x16e6b, 0x16e6c, 0x16e6d, 0x16e6e, 0x16e6f, 0x16e70, 0x16e71, 0x16e72, 0x16e73, 0x16e74, 0x16e75, 0x16e76, 0x16e77, 0x16e78, 0x16e79, 0x16e7a, 0x16e7b, 0x16e7c, 0x16e7d, 0x16e7e, 0x16e7f, 0x1e922, 0x1e923, 0x1e924, 0x1e925, 0x1e926, 0x1e927, 0x1e928, 0x1e929, 0x1e92a, 0x1e92b, 0x1e92c, 0x1e92d, 0x1e92e, 0x1e92f, 0x1e930, 0x1e931, 0x1e932, 0x1e933, 0x1e934, 0x1e935, 0x1e936, 0x1e937, 0x1e938, 0x1e939, 0x1e93a, 0x1e93b, 0x1e93c, 0x1e93d, 0x1e93e, 0x1e93f, 0x1e940, 0x1e941, 0x1e942, 0x1e943, 0xdf, 0x2000069, 0x307, 0xfb00, 0xfb01, 0xfb02, 0xfb03, 0xfb04, 0xfb05, 0xfb06, 0x587, 0xfb13, 0xfb14, 0xfb15, 0xfb16, 0xfb17, 0x149, 0x390, 0x3b0, 0x1f0, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1f50, 0x1f52, 0x1f54, 0x1f56, 0x1fb6, 0x1fc6, 0x1fd2, 0x1fd3, 0x1fd6, 0x1fd7, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe6, 0x1fe7, 0x1ff6, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fb3, 0x1fb3, 0x1fc3, 0x1fc3, 0x1ff3, 0x1ff3, 0x1fb2, 0x1fb4, 0x1fc2, 0x1fc4, 0x1ff2, 0x1ff4, 0x1fb7, 0x1fc7, 0x1ff7]; return t; } -_IUA toTitleTable() nothrow @nogc @safe pure { static _IUA t = [ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x39c, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x178, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x49, 0x132, 0x134, 0x136, 0x139, 0x13b, 0x13d, 0x13f, 0x141, 0x143, 0x145, 0x147, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x179, 0x17b, 0x17d, 0x53, 0x243, 0x182, 0x184, 0x187, 0x18b, 0x191, 0x1f6, 0x198, 0x23d, 0x220, 0x1a0, 0x1a2, 0x1a4, 0x1a7, 0x1ac, 0x1af, 0x1b3, 0x1b5, 0x1b8, 0x1bc, 0x1f7, 0x1c5, 0x1c5, 0x1c5, 0x1c8, 0x1c8, 0x1c8, 0x1cb, 0x1cb, 0x1cb, 0x1cd, 0x1cf, 0x1d1, 0x1d3, 0x1d5, 0x1d7, 0x1d9, 0x1db, 0x18e, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f2, 0x1f2, 0x1f2, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x23b, 0x2c7e, 0x2c7f, 0x241, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x2c6f, 0x2c6d, 0x2c70, 0x181, 0x186, 0x189, 0x18a, 0x18f, 0x190, 0xa7ab, 0x193, 0xa7ac, 0x194, 0xa78d, 0xa7aa, 0x197, 0x196, 0xa7ae, 0x2c62, 0xa7ad, 0x19c, 0x2c6e, 0x19d, 0x19f, 0x2c64, 0x1a6, 0xa7c5, 0x1a9, 0xa7b1, 0x1ae, 0x244, 0x1b1, 0x1b2, 0x245, 0x1b7, 0xa7b2, 0xa7b0, 0x399, 0x370, 0x372, 0x376, 0x3fd, 0x3fe, 0x3ff, 0x386, 0x388, 0x389, 0x38a, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a3, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x38c, 0x38e, 0x38f, 0x392, 0x398, 0x3a6, 0x3a0, 0x3cf, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x39a, 0x3a1, 0x3f9, 0x37f, 0x395, 0x3f7, 0x3fa, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c1, 0x4c3, 0x4c5, 0x4c7, 0x4c9, 0x4cb, 0x4cd, 0x4c0, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x10f7, 0x10f8, 0x10f9, 0x10fa, 0x10fd, 0x10fe, 0x10ff, 0x13f0, 0x13f1, 0x13f2, 0x13f3, 0x13f4, 0x13f5, 0x412, 0x414, 0x41e, 0x421, 0x422, 0x422, 0x42a, 0x462, 0xa64a, 0xa77d, 0x2c63, 0xa7c6, 0x1e00, 0x1e02, 0x1e04, 0x1e06, 0x1e08, 0x1e0a, 0x1e0c, 0x1e0e, 0x1e10, 0x1e12, 0x1e14, 0x1e16, 0x1e18, 0x1e1a, 0x1e1c, 0x1e1e, 0x1e20, 0x1e22, 0x1e24, 0x1e26, 0x1e28, 0x1e2a, 0x1e2c, 0x1e2e, 0x1e30, 0x1e32, 0x1e34, 0x1e36, 0x1e38, 0x1e3a, 0x1e3c, 0x1e3e, 0x1e40, 0x1e42, 0x1e44, 0x1e46, 0x1e48, 0x1e4a, 0x1e4c, 0x1e4e, 0x1e50, 0x1e52, 0x1e54, 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e60, 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72, 0x1e74, 0x1e76, 0x1e78, 0x1e7a, 0x1e7c, 0x1e7e, 0x1e80, 0x1e82, 0x1e84, 0x1e86, 0x1e88, 0x1e8a, 0x1e8c, 0x1e8e, 0x1e90, 0x1e92, 0x1e94, 0x1e60, 0x1ea0, 0x1ea2, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eaa, 0x1eac, 0x1eae, 0x1eb0, 0x1eb2, 0x1eb4, 0x1eb6, 0x1eb8, 0x1eba, 0x1ebc, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ec8, 0x1eca, 0x1ecc, 0x1ece, 0x1ed0, 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1eda, 0x1edc, 0x1ede, 0x1ee0, 0x1ee2, 0x1ee4, 0x1ee6, 0x1ee8, 0x1eea, 0x1eec, 0x1eee, 0x1ef0, 0x1ef2, 0x1ef4, 0x1ef6, 0x1ef8, 0x1efa, 0x1efc, 0x1efe, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f59, 0x1f5b, 0x1f5d, 0x1f5f, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1fba, 0x1fbb, 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 0x1feb, 0x1ffa, 0x1ffb, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fb8, 0x1fb9, 0x1fbc, 0x399, 0x1fcc, 0x1fd8, 0x1fd9, 0x1fe8, 0x1fe9, 0x1fec, 0x1ffc, 0x2132, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0x216c, 0x216d, 0x216e, 0x216f, 0x2183, 0x24b6, 0x24b7, 0x24b8, 0x24b9, 0x24ba, 0x24bb, 0x24bc, 0x24bd, 0x24be, 0x24bf, 0x24c0, 0x24c1, 0x24c2, 0x24c3, 0x24c4, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, 0x24ca, 0x24cb, 0x24cc, 0x24cd, 0x24ce, 0x24cf, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c60, 0x23a, 0x23e, 0x2c67, 0x2c69, 0x2c6b, 0x2c72, 0x2c75, 0x2c80, 0x2c82, 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, 0x2ceb, 0x2ced, 0x2cf2, 0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba, 0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3, 0x10c4, 0x10c5, 0x10c7, 0x10cd, 0xa640, 0xa642, 0xa644, 0xa646, 0xa648, 0xa64a, 0xa64c, 0xa64e, 0xa650, 0xa652, 0xa654, 0xa656, 0xa658, 0xa65a, 0xa65c, 0xa65e, 0xa660, 0xa662, 0xa664, 0xa666, 0xa668, 0xa66a, 0xa66c, 0xa680, 0xa682, 0xa684, 0xa686, 0xa688, 0xa68a, 0xa68c, 0xa68e, 0xa690, 0xa692, 0xa694, 0xa696, 0xa698, 0xa69a, 0xa722, 0xa724, 0xa726, 0xa728, 0xa72a, 0xa72c, 0xa72e, 0xa732, 0xa734, 0xa736, 0xa738, 0xa73a, 0xa73c, 0xa73e, 0xa740, 0xa742, 0xa744, 0xa746, 0xa748, 0xa74a, 0xa74c, 0xa74e, 0xa750, 0xa752, 0xa754, 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa790, 0xa792, 0xa7c4, 0xa796, 0xa798, 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b4, 0xa7b6, 0xa7b8, 0xa7ba, 0xa7bc, 0xa7be, 0xa7c0, 0xa7c2, 0xa7c7, 0xa7c9, 0xa7d0, 0xa7d6, 0xa7d8, 0xa7f5, 0xa7b3, 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6, 0x13b7, 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf, 0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7, 0x13d8, 0x13d9, 0x13da, 0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df, 0x13e0, 0x13e1, 0x13e2, 0x13e3, 0x13e4, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec, 0x13ed, 0x13ee, 0x13ef, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x10570, 0x10571, 0x10572, 0x10573, 0x10574, 0x10575, 0x10576, 0x10577, 0x10578, 0x10579, 0x1057a, 0x1057c, 0x1057d, 0x1057e, 0x1057f, 0x10580, 0x10581, 0x10582, 0x10583, 0x10584, 0x10585, 0x10586, 0x10587, 0x10588, 0x10589, 0x1058a, 0x1058c, 0x1058d, 0x1058e, 0x1058f, 0x10590, 0x10591, 0x10592, 0x10594, 0x10595, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae, 0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x16e40, 0x16e41, 0x16e42, 0x16e43, 0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a, 0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c, 0x16e5d, 0x16e5e, 0x16e5f, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x2000053, 0x73, 0x130, 0x2000046, 0x66, 0x2000046, 0x69, 0x2000046, 0x6c, 0x3000046, 0x66, 0x69, 0x3000046, 0x66, 0x6c, 0x2000053, 0x74, 0x2000053, 0x74, 0x2000535, 0x582, 0x2000544, 0x576, 0x2000544, 0x565, 0x2000544, 0x56b, 0x200054e, 0x576, 0x2000544, 0x56d, 0x20002bc, 0x4e, 0x3000399, 0x308, 0x301, 0x30003a5, 0x308, 0x301, 0x200004a, 0x30c, 0x2000048, 0x331, 0x2000054, 0x308, 0x2000057, 0x30a, 0x2000059, 0x30a, 0x2000041, 0x2be, 0x20003a5, 0x313, 0x30003a5, 0x313, 0x300, 0x30003a5, 0x313, 0x301, 0x30003a5, 0x313, 0x342, 0x2000391, 0x342, 0x2000397, 0x342, 0x3000399, 0x308, 0x300, 0x3000399, 0x308, 0x301, 0x2000399, 0x342, 0x3000399, 0x308, 0x342, 0x30003a5, 0x308, 0x300, 0x30003a5, 0x308, 0x301, 0x20003a1, 0x313, 0x20003a5, 0x342, 0x30003a5, 0x308, 0x342, 0x20003a9, 0x342, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf, 0x1fbc, 0x1fbc, 0x1fcc, 0x1fcc, 0x1ffc, 0x1ffc, 0x2001fba, 0x345, 0x2000386, 0x345, 0x2001fca, 0x345, 0x2000389, 0x345, 0x2001ffa, 0x345, 0x200038f, 0x345, 0x3000391, 0x342, 0x345, 0x3000397, 0x342, 0x345, 0x30003a9, 0x342, 0x345]; return t; } +//2112 bytes +enum lowerCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000070", +x" +000000000000010000000000000001400000000000002600", +x" +040203020202010008070202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000003000200010000000600060005000400060006000600060006000600060006 +000800060006000700060006000600060006000600060006000C000B000A000900060006000E000D000600060006000F +000600060006000600060006001100100006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006001300120006000600140006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600150006000600060016000600060006 +00060006000600060019000600180017000600060006000600060006001B001A00060006000600060006000600060006 +000600060006001C00060006000600060006000600060006000600060006000600060006000600060006001D00060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +00060006000600060006000600060006000600060006000600210020001F001E00060006000600060022000600060006 +000600060006002300060006000600060006000600240006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +0006000600060006000600060006000600060006000600060006000600060006000000000000000007FFFFFE00000000 +0420040000000000FF7FFFFF8000000055AAAAAAAAAAAAAAD4AAAAAAAAAAAB55E6512D2A4E243129AA29AAAAB5555240 +93FAAAAAAAAAAAAAFFFFFFFFFFFFAA8501FFFFFFFFEFFFFF0000001F0000000300000000000000003C8A000000000020 +FFFFF00000010000192FAAAAAAE37FFFFFFF000000000000AAAAAAAAFFFFFFFFAAAAAAAAAAAAA802AAAAAAAAAAAAD554 +0000AAAAAAAAAAAAFFFFFFFF0000000000000000000001FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000F7FFFFFFFFFF0000 +0000000000000000000000000000000000000000000000003F0000000000000000000000000000000000000000000000 +00000000000005FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFEAAAAAAAAAAAAAAAAAAAAA00FF00FF003F00FF3FFF00FF00FF003F +40DF00FF00FF00FF00DC00FF00CF00DC00000000000000008002000000000000000000001FFF00000000000000000000 +321080000008C400FFFF0000000043C00000000000000010000000000000000000000000000000000000000000000000 +0000000000000000000003FFFFFF0000FFFF0000000000003FDA1562FFFFFFFFAAAAAAAAAAAAAAAA0008501AAAAAAAAA +000020BFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000002AAAAAAAAAAA +000000003AAAAAAA0000000000000000AAABAAA80000000095FFAAAAAAAAAAAAAAA082AAAABA50AA075C00000AAA250A +FFFF000000000000FFFF03FFF7FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000F8007F0000000000000000 +0000000000000000000000000000000000000000000000000000000007FFFFFE00000000000000000000000000000000 +FFFFFF0000000000000000000000FFFF00000000000000000FFFFFFFFF00000000000000000000000000000000000000 +1BFBFFFBFF80000000000000000000000000000000000000000000000000000007FDFFFFFFFFFFB90000000000000000 +0000000000000000000000000000000000000000000000000007FFFFFFFFFFFF0000000000000000FFFF000000000000 +000000000000003F000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF +0000000000000000FFFFFFFF0000000000000000000000000000000000000000000FFFFFFC000000000000FFFFDFC000 +EBC000000FFFFFFCFFFFFC000000FFEF00FFFFFFC000000F00000FFFFFFC0000FC000000FFFFFFC0FFFFC000000FFFFF +0FFFFFFC000000FF0000FFFFFFC000000000003FFFFFFC00F0000003F7FFFFFCFFC000000FDFFFFFFFFF0000003F7FFF +FFFFFC000000FDFF0000000000000BF7000007E07FFFFBFF000000000000000000000000000000000000000000000000 +FFFF00000000000000003FFFFFFFFFFF00000000000000000000000000000000FFFFFFFC00000000000000000000000F +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//1888 bytes +enum upperCaseTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000070", +x" +000000000000010000000000000001400000000000001F00", +x" +040203020202010008070202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000003000200010000000600060005000400060006000600060006000600060006 +000800060006000700060006000600060006000600060006000B000A0006000900060006000C0006000600060006000D +0006000600060006000600060006000E0006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +0006000600060006000600060006000600060006000600060010000F0006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060011000600060006 +000600060006000600060006001300120006000600060006000600060015001400060006000600060006000600060006 +000600060006001600060006000600060006000600060006000600060006000600060006000600060006001700060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006001B001A0019001800060006000600060006000600060006 +0006000600060006000600060006000600060006001C0006000600060006000600060006001D00060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006 +000600060006000600060006000600060006000600060006000600060006000600000000000000000000000007FFFFFE +0000000000000000000000007F7FFFFFAA555555555555552B555555555554AA11AED2D5B1DBCED655D255554AAAA490 +6C05555555555555000000000000557A0000000000000000000000000000000000000000000000008045000000000000 +00000FFBFFFED740E6905555551C80000000FFFFFFFFFFFF555555550000000055555555555554015555555555552AAB +FFFE55555555555500000000007FFFFF0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000000000020BF +00000000000000000000000000000000FFFFFFFF00000000003FFFFFFFFFFFFF00000000000000000000000000000000 +E7FFFFFFFFFF020000000000000000005555555555555555555555555555555555555555401555555555555555555555 +FF00FF003F00FF000000FF00AA003F000F000000000000000F001F000F000F00C00F3D503E2738840000FFFF00000020 +0000000000000008000000000000000000000000000000000000000000000000FFC0000000000000000000000000FFFF +0000FFFFFFFFFFFFC025EA9D000000005555555555555555000428055555555500000000000000000000155555555555 +0000000005555555000000000000000055545554000000006A00555555555555555F7D55554528550020000015411AF5 +07FFFFFE00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF0000000000000000 +FFFF00000000000000000000000FFFFF0000000000000000F7FF000000000000000000000037F7FF0000000000000000 +000000000000000000000000000000000007FFFFFFFFFFFF000000000000000000000000000000000000003FFFFF0000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000 +000000000000000000000000FFFFFFFF00000000000000000000000000000000FFF0000003FFFFFFFFFFFF0000003FFF +003FDE64D0000003000003FFFFFF00007B0000001FDFE7B0FFFFF0000001FC5F03FFFFFF0000003F00003FFFFFF00000 +F0000003FFFFFF00FFFF0000003FFFFFFFFFFF00000003FF07FFFFFC00000001001FFFFFF000000000007FFFFFC00000 +000001FFFFFF0000000000000000040000000003FFFFFFFF000000000000000000000000000000000000000000000000 +FFFF000000000000FFFF03FFFFFF03FF00000000000003FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000", +); +//11904 bytes +enum simpleCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000001240", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001600150000000000000000000000000000000000000000001800170000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000019000000000000001B001A0000001F001E001D001C002300220021002000000000000000000000002600250024 +000000000000000000000000000000000028002700000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000002C002B002A0029000000000000002D +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002F002E0000003300320031003000000000000000000000000000000000 +000000000000000000000035003400000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000380037 +0000000000000000000000000000000000000000000000000000000000000000003C003B003A00390000003E003D0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0040003F0000000000000042004100000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000004500000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000004700460000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +090D00820947FFFF093500BF032506110B61006D09FE0BD00B0400E2084606E105E705AA04750858019501820A6307A3 +FFFF030304EB0534FFFFFFFFFFFFFFFF090E00830948FFFF093600C0032606120B62006E09FF0BD10B0500E3084706E2 +05E805AB04760859019601830A6407A4FFFF030404EC0535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF098FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0876011A05C4079903E7026109E70B0A0B83012A039B056F0321004903A30641 +02A9008809050609FFFF00CD05A1072B0511021D09AC0B1609190A7508A0071B0877011B05C5079A03E8026209E80B0B +0B84012B039C05700322004A03A4064202AA00890906060AFFFF00CE05A2072C0512021E09AD0B1703760A7608A1071C +04DE04DD0A0D0A0C0B8E0B8D01D501D4074E074D020A020908D708D600D000CF062A0629005E005D0636063500540053 +067B067A02BC02BB081F081E015C015B080508040BBF0BBE0A940A9304D004CF05A905A801BA01B90997099602260225 +08990898FFFFFFFF0328032709630962071700970096FFFF083C00910090071807E80B670B66083D0A530123012207E9 +04EE04EDFFFF0A540B9C0B9B07E307E20164016306D706D602B402B3069B069A000D000C0620061F0072007106590658 +00D400D3085B085A01E901E80744074301A601A50BB70BB60A840A8304D804D7057C057B07ED07EC0A2B0A2A09A109A0 +0023063C063B037705E90614061300240B4E0B4D06A006A9027F053C0274027301B308180B6F02800AF40787FFFF01B4 +053608DD08DC0A7709BA0B3F02330285044704DB00990098033700D5091500AC06440643001B001A03DB056901070106 +FFFFFFFF09D203DC0777080C016B016A0542079D01AB07780AF2030C030B0543FFFFFFFF0260025F01B1FFFF094A0949 +FFFFFFFFFFFFFFFF05F60955095409530B190B1805F805F707B6051405130B1A07890A900A8F07B70AB20450044F078A +0567030803070AB30B8A0B8907880568016D016C066D066C02CA02C90610060F00F400F3065F065E0586058506C106C0 +0AEE0AED0AECFFFF01B202340766076501F501F40BA40BA3099B099A0426042505B505B40861086008E608E5096A0969 +08BC08BB03BA03B9042804270B480B470AC10AC0041704160547054602BE02BD080F080E016F016E086B086A05CD05CC +06E806E7FFFF00D60BB90BB800660065075C075B00C400C308AA08A9007B007A070F070E0590058FFFFFFFFFFFFFFFFF +07B40A3EFFFFFFFF098707DC04DC07B506AA014E014D02950A030A0202DD04290330032F0950094F0A270A26097E097D +06A102270B55040E08190B70FFFF053D0A78FFFF0AF5FFFFFFFFFFFFFFFF096B0286FFFF0B640537FFFF00B70BAC069E +065400FB0B4009BB00ADFFFFFFFF09B4FFFF091605B6FFFFFFFFFFFF0338FFFFFFFFFFFFFFFFFFFFFFFFFFFF0033FFFF +09D3052CFFFF056A035CFFFFFFFFFFFF079E01AC042A080DFFFFFFFFFFFF02DEFFFF0AF3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF07290094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF099CFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D701D604B504B4020001FFFFFFFFFF +0A67FFFFFFFFFFFF038EFFFF088E0124FFFFFFFFFFFFFFFFFFFF02A3FFFFFFFFFFFF00ED084806F109F80BD6FFFF0810 +017E04BE04C50392016801DA0AEF0A470B3D0B68099D05B0010803A7083E099006A2FFFF06450BA900AE0351061D0339 +009C086C0714092700EE084906F202A4017F04BF04C609FC016901DB0AF00A480B3E0B69099E05B1010903A8083F0991 +06A406A306460BAA00AF0352061E033A009D086D0715092809A209F90BD70811FFFFFFFF05B204C009A30BAB0353FFFF +04B904B8018E018D087F087E0ABB0ABA09B309B20598059703C803C70A0F0A0E08EA08E9030002FF036F036E04580457 +038F01DE06470B6A0AB6FFFF0AF105B305F105F001DF0AB7088F01250A68FFFF0998029B0530050505C2009209B80B2B +092100A209230719039D009E0329060503CD05560B7B07390AE8028703DF070104C90128088A0ABE01BF0A4407C80828 +02E90AA50527080A015D024F0B0009D00B910964067C0591005503CF06370A2003CE05570B7C073A0AE9028803E00702 +04CA0129088B0ABF01C00A4507C9082902EA0AA60528080B015E02500B0109D10B920965067D0592005603D006380A21 +0999029C0531050605C3009309B90B2C092200A30924071A039E009F032A060605E305E20AD50AD40B800B7F024E024D +03F203F1020402030879087809E209E10908090705B905B803A603A508EE08ED0961096008A808A70424042303EA03E9 +FFFFFFFF0B580B57FFFFFFFFFFFFFFFF05BD05BCFFFFFFFF00E800E7084B084A0060005F06EA06E90005000406320631 +00CC00CB074C074B057E057D08D508D4010D010C06CF06CE01A401A305040503046604650A410A400BA60BA507D907D8 +04130412085108500918091709EB09EA090209010332033103C403C30A290A28022906DD06DC02E5024105EF05EE022A +04B00A520A51024202E607B107B004B1057205710246024506FE06FD026C026B063E063D005A0059069106900020001F +068F068E011501140580057F0252025107C707C6011D011C0796079504AB04AA047804770AC30AC20B360B350240023F +043804370398039708F208F109380937094E094D0344034303E403E30A310A300AC70AC60845084401D101D007B907B8 +02CE02CD0A4C0A4B01730172050004FF05D105D006BD06BC002E002D06650664003A00390651065000B600B50BA00B9F +0AFF0AFE075607550502050108AE08AD023101800BD8FFFF0ACC029D073304C7059F048D08720AF601350B9906EF03B3 +030D035E06940390013709560696092D0B5D097306F305CA0517053A087A0A3602390A6D072F029FFFFF07A505F20186 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF023201810BD9FFFF0ACD029E073404C805A0048E08730AF701360B9A06F003B4 +030E035F06950391013809570697092E0B5E097406F405CB0518053B087B0A37023A0A6E073002A0FFFF07A605F30187 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052303F7084209E301B50BC4071001FA +01BD04A80495024B047B089C0AD00ACE0B2D06B8081C0581043D0660039F00F908EB06A7093302E30941068A03470151 +03DD086E0A1A0B850ADAFFFF02EB010AFFFFFFFFFFFFFFFFFFFFFFFF0A87FFFF040806B10B1B0155095C0680043905DA +03D506070323002F09510B710A220027087C06CA0573008E043508A209D70B140A3A077F021F0515072D04E5025301E4 +083809C20AE002AB070603D7059D03EDFFFF03AB01200B6B06AD092F000EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +036C00C5043F05EC095E006F083606DA0A2C0B5F038008B30341008008E306190A8D02D702010A9F05750139097F06D2 +07E6058B0BB407F8077B0A1E04F1049B0666038402F1045D06BA09CA0143087008BF09430043046B064C031F00470BD2 +0B9D0A10023D09DD075705590084027B079B07310A3C0B1004CB08DE01EE053E03BB06F50A2E029308320B5905CE0205 +03660692035805F4095806C602B7013B039906390BBA004DFFFFFFFF04450063039A063A0BBB004EFFFFFFFF04460064 +05290A460703055805E409660AA80AA7FFFF0825082406B5FFFFFFFFFFFFFFFF040906B20B1C0156095D0681043A05DB +03D606080324003009520B720A230028087D06CB0574008F043608A309D80B150A3B078002200516072E04E6025401E5 +083909C30AE102AC070703D8059E03EEFFFF03AC01210B6C06AE0930000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF051DFFFFFFFFFFFF0319FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BC8FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04DA04D9070D070C0BBD0BBC079407930482048108210820026A026909AF09AE09320931058E058D0340033F091E091D +093E093D02D602D503E203E1046A046907E507E40B3A0B390A4E0A4D04F004EF05E105E001B001AF07480747024A0249 +085F085E00DD00DC062C062B00620061062406230013001206AC06AB02AE02AD06D106D00160015F07BD07BC05C705C6 +04A304A20A960A950B900B8F0212021103EC03EB02180217089B089A0970096F092A0929036103600389038808FA08F9 +098C098B08A508A4020E020D03E603E501BC01BB0B740B730A720A710490048F05D905D807FB07FA0150014F082F082E +02B602B506750674004C004B06490648008B008A063406330555055408C708C60210020F0754075301D901D804D404D3 +044E044D0A8C0A8BFFFFFFFF07EF07EE08A6FFFFFFFFFFFFFFFF091AFFFFFFFF0910090F0312031103B003AF09F709F6 +0B0F0B0E025E025D08030802043C043B07CF07CE0A560A55073C073B04D604D5055C055B02240223071E071D009B009A +060E060D00A500A4066B066A0050004F0B300B2F012701260549054802FE02FD0790078F0119011807D307D204A704A6 +040304020AA20AA10BB30BB202580257044A044903CA03C90920091F08FC08FB094C094B036B036A0562056109BF09BE +0AAA0AA908C908C8019C019B0460045F01DD01DC0A7A0A7900F000EF06FA06F90A32003703B5061B056B00F509790B77 +0A33003803B6061C056C00F6097A0B780235019F0A65078BFFFFFFFF071204DF023601A00A66078CFFFFFFFF071304E0 +0018030F061503A9017408900698091300190310061603AA017508910699091401840AFA0A6902EF01EA07AC04BA01A7 +01850AFB0A6A02F001EB07AD04BB01A8036205F9035A0076FFFFFFFF08E7000A036305FA035B0077FFFFFFFF08E8000B +0A91FFFF01F0FFFF078DFFFF04E7FFFF0A92FFFF01F1FFFF078EFFFF04E8FFFF066E044B02CF09BC05FB0BC2002B03BF +066F044C02D009BD05FC0BC3002C03C00A0602DF02F70455042B05E502130AA30A890AE20008090BFFFFFFFF062F032D +03B1028F09920B51091B012C02CB067E03B2029009930B52091C012D02CC067F0A24029903C506FB05C8020708120B49 +0A25029A03C606FC05C9020808130B4A00DE09DF0BB00A14007E028B075D05A600DF09E00BB10A15007F028C075E05A7 +09A6FFFF0682037CFFFFFFFFFFFFFFFF02F804560683037DFFFF099FFFFF09A700F7FFFFFFFFFFFFFFFFFFFFFFFFFFFF +02140AA40A0702E0FFFFFFFFFFFF00F80393FFFF036800BDFFFFFFFFFFFFFFFF042C05E6036900BEFFFFFFFFFFFFFFFF +09FDFFFF01C90178FFFFFFFF02A5FFFF0A8A0AE301CA0179FFFFFFFFFFFF02A603CBFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0630032E0009090CFFFFFFFFFFFF03CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0716FFFFFFFF +09E90B63FFFFFFFFFFFFFFFFFFFFFFFFFFFF097BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF097CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF046704A40AAB07D00A730A0A017A0785072302FB01F6054A084E045B00E00B1F +046804A50AAC07D10A740A0B017B0786072402FC01F7054B084F045C00E10B200894FFFFFFFFFFFFFFFFFFFFFFFF0895 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05AC0386FFFFFFFF0763083A00A80B5B08BD09FA0540040A +07D404970AC402190AD20737018F022B052E088002A70104096D067609A40B5300A90B5C05AD03870541040B0764083B +0AC5021A08BE09FB0190022C07D5049802A801050AD3073809A50B54052F0881FFFFFFFF096E0677FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF010E0B21067003D30521045106CC084C +0AE401CE088C0A81022F0215077104AC0281054E0B95072509B000AA0418083005BA00310967071F08F7003D09850652 +0896015303AD068803F305EA0B41069C0AD60116041007F0055001C102ED04CD010F0B22067103D40522045206CD084D +0AE501CF088D0A8202300216077204AD0282054F0B96072609B100AB0419083105BB00320968072008F8003E09860653 +0897015403AE068903F405EB0B42069D0AD70117041107F1055101C202EE04CE031A0655003C003B0A0807DD0A3F0034 +026F038B038A0A09040F05B70B5602700A4A0A49FFFF0228FFFF076C076BFFFFFFFFFFFFFFFFFFFF02960988FFFFFFFF +0346034502B002AF093C093B08F408F302C302C2037F037E047E047D09C109C00B8C0B8B081B081A04C204C107980797 +01F301F20A980A9700D800D70584058300680067074607450022002108D108D0005C005B0640063F026E026D0B500B4F +0192019106D906D805D305D207DF07DE0A6C0A6B076E076D028A028904F404F303B803B70B380B37098209810480047F +0334033308FE08FD09ED09EC095B095A0853085205940593042E042D0ADF0ADE0A430A42022202210728072701AA01A9 +0841084001110110FFFFFFFFFFFFFFFF0364FFFFFFFFFFFFFFFF03360335036506EC06EBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052403F8084309E401B60BC5071101FB01BE04A90496024C047C089D0AD10ACF +0B2E06B9081D0582043E066103A000FA08EC06A8093402E40942068B0348015203DE086F0A1B0B860ADBFFFF02EC010B +FFFFFFFFFFFFFFFFFFFFFFFF0A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0A500A4F01E101E007BB07BA0ACB0ACA06B706B601420141050A050902C502C4065B065A0040003F0663066205D505D4 +075A0759007900780BA20BA10042004107A207A104FE04FD08B208B10B070B060AF90AF802D202D1FFFFFFFF017D017C +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02A202A1052B052A0A350A3409760975 +0AB50AB407CD07CC018C018B0A700A6F00B100B0076807670545054408AC08AB0036003506020601FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00070006FFFFFFFF00C800C708D308D2 +00EA00E9070B070A006A006906260625015A0159FFFFFFFF0B820B810855085409EF09EE051A051902BA02B90A5C0A5B +098A0989089F089E03A203A109AB09AA087508740B940B93033C033B031E031D05BF05BE021C021B09B709B6041D041C +08890888053305320A580A5702480247068506840101010006BF06BE0B460B45067906780158015706B406B302F402F3 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E907C107C0FFFF0BA80BA7051E04EA09E609E5059C059B086508640B030B02 +0051FFFFFFFFFFFFFFFFFFFF0BAD0052025602550B440B4303BE03BDFFFF07AE04AF04AE07F707F60A130A1204070406 +0284028305260525011F011E082D082C096C00B807220721FFFF00FC09B50B650B970095035D072A00A100A0060005FF +0140013F070006FF0298029705660565044204410823082207790BC9052D07AF069F01770176077AFFFFFFFF09C509C4 +FFFFFFFF03020301031C031BFFFFFFFF088708860B260B25FFFFFFFFFFFF0448FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A1D0A1CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B98FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +036D00C6044005ED095F0070083706DB0A2D0B60038108B40342008108E4061A0A8E02D802020AA00576013A098006D3 +07E7058C0BB507F9077C0A1F04F2049C0667038502F2045E06BB09CB0144087108C009440044046C064D032000480BD3 +0B9E0A11023E09DE0758055A0085027C079C07320A3D0B1104CC08DF01EF053F03BC06F60A2F029408330B5A05CF0206 +03670693035905F5095906C702B8013CFFFFFFFFFFFFFFFFFFFF082B082AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02710B2709F0FFFF0977065C05C001450BAE0791076904E1040C050B07E0013D +02F903F905630263019907C20AB80AE6FFFF0461061708EFFFFFFFFFFFFFFFFF02720B2809F1FFFF0978065D05C10146 +0BAF0792076A04E2040D050C07E1013E02FA03FA05640264019A07C30AB90AE7FFFF0462061808F0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05D6077D076F0A9909DB0ADC0808013102E709C80B310983014707F204F5050F +08F5064E048900EB0378073D02D900450267055F041402DB038C068C0BC00149048B07AA0AFC0AAD0B87079F023B0493 +05D7077E07700A9A09DC0ADD0809013202E809C90B320984014807F304F6051008F6064F048A00EC0379073E02DA0046 +02680560041502DC038D068D0BC1014A048C07AB0AFD0AAE0B8807A0023C0494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075F07F40B080A7D0B3B09CE022D0587 +07B20B7509F402370781049104B2025906C2034F05DC033D06E3028D01C50B6D066803D1029109D9062108FF002902F5 +08D80A5F0A5D0773FFFFFFFFFFFFFFFF076007F50B090A7E0B3C09CF022E058807B30B7609F502380782049204B3025A +06C3035005DD033E06E4028E01C60B6E066903D2029209DA06220900002A02F608D90A600A5E0774FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +027500A6047108AF025B01120B1D06C4FFFF00B909710B79092B00BB092505FD01330B7D07EA0826030903EF05770856 +FFFF02B1042F059904F9048707830A59FFFF03C106560A6108B0FFFF06ED02D306C5027600A704720B7A025C01130B1E +05FEFFFF00BA09720827092C00BC0926085701340B7E07EB059A030A03F005780A5AFFFF02B204300A6204FA04880784 +02D4FFFF03C20657FFFFFFFFFFFF06EE014B0193049904E3058901EC08000BCA045305DE03F506AF03130A7F0ABC0806 +00C909390BC6093F008C08B50749034D010209940892046F007C0372073508C1034B04D10538020B047307BE0B0C0A9B +05520479085C098D01C30BCC07040243FFFF06860A160305FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +014C0194049A04E4058A01ED08010BCB045405DF03F606B003140A800ABD080700CA093A0BC70940008D08B6074A034E +0103099508930470007D0373073608C2034C04D20539020C047407BF0B0D0A9C0553047A085D098E01C40BCD07050244 +FFFF06870A170306FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075104BC01C7019708CA09F20B1201F8050D08CC09C60B230A7B074101D204F7 +0627090300100483FFFFFFFF01B708B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF075204BD01C8019808CB09F30B1301F9 +050E08CD09C70B240A7C074201D304F80628090400110484FFFFFFFF01B808BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BCE07C401E6059504FB04A001E201AD0862074F037A00D1046D086809A800F1 +06A508B701610B4B064A090902E1035608660AEA0A9D037006D403D9056D04630BCF07C501E7059604FC04A101E301AE +08630750037B00D2046E086909A900F206A608B801620B4C064B090A02E2035708670AEB0A9E037106D503DA056E0464 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF032B073F0A000086041A060B041E0265057906F70945006B0A38062D03540016 +01A107CA04C3048503170AD8070803150B2906E508CE0507051B07D60A180A85032C07400A010087041B060C041F0266 +057A06F80946006C0A39062E0355001701A207CB04C4048603180AD9070903160B2A06E608CF0508051C07D70A190A86 +08DA0057040406720443002509110603000000C1038205AE051F054C083407610775019D000207DA0AC80349045904B6 +055D0170027D0B330A040BD409CC06C804050673001403740912060408DB0058038305AF0444002608350762000100C2 +000307DB0520054D045A04B70776019E027E0B340AC9034A09CD06C9055E0171001503750A050BD5FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//11904 bytes +enum fullCaseTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000001240", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001600150000000000000000000000000000000000000000001800170000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000019000000000000001B001A0000001F001E001D001C002300220021002000000000000000000000002600250024 +000000000000000000000000000000000028002700000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000002C002B002A0029000000000000002D +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002F002E0000003300320031003000000000000000000000000000000000 +000000000000000000000035003400000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000380037 +0000000000000000000000000000000000000000000000000000000000000000003C003B003A00390000003E003D0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0040003F0000000000000042004100000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +004400430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000004500000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000004700460000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +09AC008C09E8FFFF09D600C90350066E0C2A00760AAA0CA00BC300F108D10750063F05FC04B408E301AE019B0B16081C +FFFF032A0533057FFFFFFFFFFFFFFFFF09AD008D09E9FFFF09D700CA0351066F0C2B00770AAB0CA10BC400F208D20751 +064005FD04B508E401AF019C0B17081DFFFF032B05340580FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A35FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09030130061B0810041E02810A900BCC0C4E014003CD05BC034C005003D506A0 +02CC009209A40666FFFF00D705F0079B0559023A0A540BDB0BD60B290931078B09040131061C0811041F02820A910BCD +0C4F014103CE05BD034D005103D606A102CD009309A50667FFFF00D805F1079C055A023B0A550BDC03A70B2A0932078C +052405230AB90AB80C590C5801EE01ED07C207C102270226096C096B00DA00D9068906880067006606950694005D005C +06DC06DB02E202E108A708A601750174088608850C8B0C8A0B4A0B490516051505FB05FA01D301D20A3E0A3D02430242 +092A0929FFFF0402035303520A070A06078700A100A0FFFF08C7009B009A078808620C300C2F08C80B06013901380863 +0536053503240B070C670C66085D085C017D017C0744074302DA02D907030702000F000E067F067E007B007A06B806B7 +00DE00DD08E608E50205020407B807B701BF01BE0C830C820B3A0B39051E051D05C905C8086908680ADB0ADA0A480A47 +0027069B069A03A806410671067000280C160C1507080711029F05870294029301CC089F0C3802A00BB307FEFFFF01CD +0581097709760B2B0A620C06025102A50482052100A300A2036200DF09B400B606A306A2001F001E041205B6011A0119 +FFFFFFFF0A7A041307EE089201840183058D081601C407EF0BB103330332058EFFFFFFFF0280027F01CAFFFF09EB09EA +FFFFFFFFFFFFFFFF065109F909F809F70BDE0BDD065306520830055C055B0BDF08000B460B4508310B6B048B048A0801 +05B4032F032E0B6C0C550C5407FF05B50186018506CE06CD02F002EF066D066C0103010206BE06BD05D305D2072C072B +0BAD0BAC0BAB094801CB025207DD07DC021102100C6F0C6E0A420A41046104600607060608EE08ED098309820A0E0A0D +0951095003ED03EC046304620C0F0C0E0B7A0B79045204510592059102E402E3089508940188018708F808F706250624 +07570756FFFF00E00C850C84006F006E07D207D100CE00CD093B093A00840083077F077E05DF05DEFFFFFFFFFFFFFFFF +082E0AEEFFFFFFFF0A2D08560522082F07120167016602B70AAF0AAE03040464035B035A09F109F00AD70AD60A240A23 +070902440C1E044708A00C39FFFF05880B2CFFFF0BB4FFFFFFFFFFFFFFFF0A0F02A6FFFF0C2D0582FFFF00C10C770706 +06B3010B0C070A6300B7FFFFFFFF0A5CFFFF09B5060DFFFFFFFFFFFF0363FFFFFFFFFFFFFFFFFFFFFFFFFFFF0037FFFF +0A7B0575FFFF05B7038CFFFFFFFFFFFF081701C504650893FFFFFFFFFFFF0305FFFF0BB2FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0799009EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A43FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01F001EF04F404F3021C021BFFFFFFFF +0B1AFFFFFFFFFFFF03BFFFFF091F013AFFFFFFFFFFFFFFFFFFFF02C6FFFFFFFFFFFF00FC08D307600AA30CA6FFFF0896 +01970501050B08A1018101F30BAE0AFA0C040C310A440602011B03D908C90A36070AFFFF06A40C7400B8037E067C0364 +00A608F9078409C800FD08D4076102C701980502050C0AA7018201F40BAF0AFB0C050C320A450603011C03DA08CA0A37 +070C070B06A50C7500B9037F067D036500A708FA078509C90A490AA40CA70897FFFFFFFF060405030A4A0C760380FFFF +04FC04FB01A701A60910090F0B740B730A5B0A5A05E705E603FC03FB0ABB0ABA098709860327032603A0039F04930492 +03C001F706A60C330B6FFFFF0BB006050647064601F80B700920013B0B1BFFFF0A3F02BE057B054D0619009C0A600BF0 +09C200AC09C4078903CF00A803540660040405A30C4407AA0BA402A704160771050F013E091B0B7701D80AF4084208B2 +03100B5E057008900176026F0BBF0A780C5C0A0806DD05E0005E040806960ACD040505A40C4507AB0BA502A804170772 +0510013F091C0B7801D90AF5084308B303110B5F05710891017702700BC00A790C5D0A0906DE05E1005F040906970ACE +0A4002BF057C054E061A009D0A610BF109C300AD09C5078A03D000A903550661063B063A0B8E0B8D0C490C48026E026D +042904280220021F090609050A8B0A8A09A709A6060C060B03D803D7098B098A0A050A0409390938045F045E04210420 +FFFFFFFF0C210C20FFFFFFFFFFFFFFFF06140613FFFFFFFF00F700F608D608D500690068075907580005000406910690 +00D600D507C007BF05CB05CA096A09690120011F073C073B01BD01BC054C054B04A304A20AF10AF00C710C7008530852 +044E044D08DC08DB09B709B60A940A93099F099E035D035C03F703F60AD90AD80246074C074B030C025F064906480247 +04EF0B050B040260030D082B082A04F005BF05BE02640263076E076D028C028B069D069C0063006206F806F700240023 +06F306F2012B012A05CD05CC027202710841084001330132080D080C04EA04E904B704B60B7C0B7B0BFB0BFA025E025D +0473047203CA03C9098F098E09D909D809EF09EE03710370041B041A0AE10AE00B800B7F08D008CF01EA01E908330832 +02F502F40AFF0AFE018C018B0548054706290628072807270032003106C406C3003E003D06B006AF00C000BF0C6B0C6A +0BBE0BBD07CA07C9054A054909430942024F01990CA8FFFF0B8502C007A3050D05EE04CC08FF0BB5014C0C64075E03E6 +0334038E06FC03C1014E09FA06FE09CE0C260A1707620622055F058509070AE602570B20079F02C2FFFF081E064D019F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0250019A0CA9FFFF0B8602C107A4050E05EF04CD09000BB6014D0C65075F03E7 +0335038F06FD03C2014F09FB06FF09CF0C270A18076306230560058609080AE702580B2107A002C30678081F064E01A0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056C042E08CD0A8C01CE0C9407800216 +01D604E704D4026B04BA092D0B890B870BF2072308A405CE047806BF03D101090988070F09D4030A09E206EC0374016A +041408FB0AC70C500B93FFFF0312011DFFFFFFFFFFFFFFFFFFFFFFFF0B3DFFFF0441071A0BE0016E0A0006E204740632 +040A0662034E003309F50C3A0AD1002B090B073705C00098047009330A7F0BD90AEA07F6023C055D079D052B027301FD +08C30A6A0B9A02CE0776040C05EC0424FFFF03DD01360C34071509D00010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +039D00CF047A06440A02007808C107490ADC0C2803B1095F036E008E098006760B4302FE021D0B5605C201500A25073F +086005DA0C80087907F20ACB053904DA06C503B50318049807250A72015A08FD095409E4004C04A806AB034A004E0CA2 +0C680ABC025B0A8507CD05A60096029B081407A10AEC0BD20511097B020A058903EE07640ADE02B508BD0C3E06260221 +03A5072F0386064F09FC073302DD015203CB06980C860056FFFFFFFF0480006C03CC06990C870057FFFFFFFF0481006D +05720AF6077305A5063C0A0A0B610B60FFFF08AF08AE0720FFFFFFFFFFFFFFFF0442071B0BE1016F0A0106E304750633 +040B0663034F003409F60C3B0AD2002C090C073805C10099047109340A800BDA0AEB07F7023D055E079E052C027401FE +08C40A6B0B9B02CF0777040D05ED0425FFFF03DE01370C35071609D10011FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0577FFFFFFFFFFFF0344FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C98FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0520051F077D077C0C890C88080B080A04C104C008A908A8028A02890A570A5609D309D205DD05DC036D036C09BF09BE +09DF09DE02FD02FC0419041804A704A6085F085E0BFF0BFE0B010B00053805370639063801C901C807BC07BB026A0269 +08EA08E900E700E6068B068A006B006A06830682001500140714071302D102D0073E073D0179017808370836061E061D +04E204E10B4C0B4B0C5B0C5A022F022E0423042202350234092C092B0A140A1309CB09CA0391039003BA03B909970996 +0A320A3109360935022B022A041D041C01D501D40C3D0C3C0B260B2504CF04CE06310630087C087B0169016808BA08B9 +02DC02DB06D606D50053005206A806A7009500940693069205A205A1095C095B022D022C07C807C701F201F1051A0519 +048904880B420B4100E10C92086B086A093704AC05D00406FFFF0BD7FFFFFFFF09AF09AE033B033A03E203E10AA20AA1 +0BD10BD0027E027D0884088304770476084908480B090B0807AD07AC051C051B05A905A802410240078E078D00A500A4 +066B066A00AF00AE06CC06CB005900580BF50BF4013D013C059405930331033008070806012F012E084D084C04E604E5 +043C043B0B590B580C7F0C7E027802770485048403FE03FD09C109C00999099809ED09EC039C039B05AF05AE0A670A66 +0B630B62095E095D01B501B4049B049A01F601F50B300B2F00FF00FE076907680AE2003B03E8067A05B801040A1D0C40 +0AE3003C03E9067B05B901050A1E0C41025301B80B180802FFFFFFFF07820525025401B90B190803FFFFFFFF07830526 +001A0336067203DB018D0921070009B2001B0337067303DC018E0922070109B3019D0BB90B1C03160206082504FD01C0 +019E0BBA0B1D03170207082604FE01C103920654038A007FFFFFFFFF0984000C03930655038B0080FFFFFFFF0985000D +0B47090D020C008708040745052D0C220B48FFFF020DFFFF0805FFFF052EFFFF06CF048602F60A6406560C90002F03F2 +06D0048702F70A6506570C91003003F30AB20306031E04900466063D02300B5C0B3F0B9C000A09AAFFFFFFFF068E0358 +08740BA80AF70C1909BB0142060807AE08750BA90AF80C1A09BC0143060907AF0AD3064A03F8076A061F022309F20C10 +0AD4064B03F9076B0620022409F30C110B510BC70C7B0AC00201056507D3096F0B520BC80C7C0AC10202056607D40970 +0A4D049C06E403AD00410C79FFFF0340031F049106E503AEFFFF0A46FFFF0A4E0B22086CFFFFFFFF05310597FFFF0ACF +02310B5D0AB30307FFFFFFFFFFFF0B2308A2093E039900C709940664FFFFFFFF0467063E039A00C8FFFFFFFFFFFFFFFF +0AA8090901E2019104F5081202C80C4C0B400B9D01E30192FFFFFFFFFFFF02C907170A97FFFFFFFF06F0093CFFFF05E8 +068F0359000B09ABFFFFFFFFFFFF0718FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0786FFFFFFFF +0A920C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A22FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04A404E30B64084A0B270AB6019307FC079303220212059508D9049600ED0BE4 +04A504E40B65084B0B280AB7019407FD079403230213059608DA049700EE0BE50925FFFFFFFFFFFFFFFFFFFFFFFF0926 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05FE03B7FFFFFFFF07DA08C500B20C2409520AA5058B0443 +084E04D60B7D02360B8B07A801A8024B0579091102CA01170A1106D70A4B0C1C00B30C2505FF03B8058C044407DB08C6 +0B7E023709530AA601A9024C084F04D702CB01180B8C07A90A4C0C1D057A0912FFFFFFFF0A1206D8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01210BE606D1040E056A048C073908D7 +0B9E01E7091D0B37024D023207E804EB02A105990C6007950A5800B4045308BB060F00350A0B078F099C00470A2B06B1 +0927016C03DF06EA042A06420C0807040B8F012C0449086E059B01DA0314051301220BE706D2040F056B048D073A08D8 +0B9F01E8091E0B38024E023307E904EC02A2059A0C6107960A5900B5045408BC061000360A0C0790099D00480A2C06B2 +0928016D03E006EB042B06430C0907050B90012D044A086F059C01DB03150514034506B40040003F0AB408570AEF0038 +028F03BC03BB0AB50448060E0C1F02900AFD0AFCFFFF0245FFFF07E307E2FFFFFFFFFFFFFFFFFFFF02B80A2EFFFFFFFF +0373037202D302D209DD09DC0991099002E902E803B003AF04BD04BC0A690A680C570C5608AB08AA05050504080F080E +020F020E0B4E0B4D00F000EF05D505D40071007007BA07B9002600250966096500650064069F069E028E028D0C180C17 +01AB01AA07480747062B062A085908580B1F0B1E07E507E402AA02A9053C053B03EB03EA0BFD0BFC0A280A2704BF04BE +035F035E099B099A0A960A9509FF09FE08DE08DD05E305E2046904680B990B980AF30AF2023F023E0798079701C301C2 +08CC08CB01240123FFFFFFFFFFFFFFFF0397FFFFFFFFFFFFFFFF036103600398075B075AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056D042F08CE0A8D01CF0C950781021701D704E804D5026C04BB092E0B8A0B88 +0BF3072408A505CF047906C003D2010A0989071009D5030B09E306ED0375016B041508FC0AC80C510B94FFFF0313011E +FFFFFFFFFFFFFFFFFFFFFFFF0B3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0B030B0201FA01F9083508340B840B8307220721015901580552055102EB02EA06BA06B90044004306C206C1062D062C +07D007CF008200810C6D0C6C00460045081B081A05460545094709460BC60BC50BB80BB702F902F8FFFFFFFF01960195 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C502C4057405730AE50AE40A1A0A19 +0B6E0B6D0847084601A501A40B2E0B2D00BB00BA07DF07DE0590058F09410940003A0039065D065CFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00090008FFFFFFFF00D200D109680967 +00F900F8077B077A007300720685068401730172FFFFFFFF0C4B0C4A08E008DF0A9C0A9B0562056102E002DF0B0F0B0E +0A300A2F0930092F03D403D30A530A52090209010C5F0C5E036903680349034806160615023902380A5F0A5E04580457 +091A0919057E057D0B0B0B0A0266026506E706E601160115072A07290C0D0C0C06DA06D901710170071D071C031B031A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF052F083B083AFFFF0C730C72057805300A8F0A8E05EB05EA08F208F10BC20BC1 +005AFFFFFFFFFFFFFFFFFFFF0C78005B027602750C0B0C0A03F103F0FFFF084404EE04ED087808770ABF0ABE0440043F +02A402A3056F056E0135013408B808B70A1000C207920791FFFF010C0A5D0C2E0C62009F038D079A00AB00AA065B065A +015701560770076F02BA02B905B305B2047D047C08AD08AC07F00C990576084507070190018F07F1FFFFFFFF0A6D0A6C +FFFFFFFF0329032803470346FFFFFFFF091809170BEB0BEAFFFFFFFFFFFF0483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0ACA0AC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C63FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +039E00D0047B06450A03007908C2074A0ADD0C2903B20960036F008F098106770B4402FF021E0B5705C301510A260740 +086105DB0C81087A07F30ACC053A04DB06C603B60319049907260A73015B08FE095509E5004D04A906AC034B004F0CA3 +0C690ABD025C0A8607CE05A70097029C081507A20AED0BD30512097C020B058A03EF07650ADF02B608BE0C3F06270222 +03A607300387065009FD073402DE01530611014A08E10C00FFFF0B960B950864FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0A1FFFFFFFFFFFFF0366001604C206B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02910BEC0A99FFFF0A1B06BB0617015C0C9C080807E0052704450553085A0154 +0320043205B0028301B2083C0B710BA0FFFF049E0674098CFFFFFFFFFFFFFFFF02920BED0A9AFFFF0A1C06BC0618015D +0C9D080907E1052804460554085B01550321043305B1028401B3083D0B720BA1FFFF049F0675098DFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF062E07F407E60B4F0A830BA2088B0148030E0A700BF60A29015E0872053D0557 +099206AD04C800FA03A907B103000054028705AC044F030203BD06EE0C8C016004CA08230BBB0B660C520818025904D2 +062F07F507E70B500A840BA3088C0149030F0A710BF70A2A015F0873053E0558099306AE04C900FB03AA07B203010055 +028805AD0450030303BE06EF0C8D016104CB08240BBC0B670C530819025A04D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07D608870BCA0B330C020A76026105D6 +082C0C460A9D025507F804D004F10279072D037C0634036A075202AE01DE0C3606C9042C02B30A81068009A0002D031C +09720B120B1007EAFFFFFFFFFFFFFFFF07D708880BCB0B340C030A77026205D7082D0C470A9E025607F904D104F2027A +072E037D0635036B075302AF01DF0C3706CA042D02B40A82068109A1002E031D09730B130B1107EBFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +029500B004AE0944027B01250BE20731FFFF00C30A150C4209CC00C509C6065801620C8E086608B00338042605C408E7 +FFFF02D7046A05F2054104C607FA0B0CFFFF03F406C70B140945FFFF075C02FA0732029600B104AF0C43027C01260BE3 +0659FFFF00C40A1608B109CD00C609C708E801630C8F086705F30339042705C50B0DFFFF02D8046B0B15054204C707FB +02FBFFFF03F506C8FFFFFFFFFFFF075D016401AC04D8052905D8020808810C9A048E06360430071E033C0B350B750889 +00D309DA0C9609E000DB094A07BD037A01130A3B092304B2008503A307C30956037805170583022804B008380BCE0B5A +059F04B808EB0A3301DC000207740267FFFF06E80AC3032CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +016501AD04D9052A05D9020908820C9B048F06370431071F033D0B360B76088A00D409DB0C9709E100DC094B07BE037B +01140A3C092404B3008603A407C40957037905180584022904B108390BCF0B5B05A004B908EC0A3401DD000307750268 +FFFF06E90AC4032DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C504FF01E001B009630A9F0BD40214055509610A6E0BE80B3107B501EB053F +068609A2001204C4FFFFFFFF01D0094EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07C6050001E101B109640AA00BD50215 +055609620A6F0BE90B3207B601EC0540068709A3001304C5FFFFFFFF01D1094FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C9E083E01FF05E4054304DF01FB01C608EF07CB03AB00EB04AA08F50A500100 +070D094C017A0C1306A909A80308038408F30BA60B5403A10741041005BA04A00C9F083F020005E5054404E001FC01C7 +08F007CC03AC00EC04AB08F60A510101070E094D017B0C1406AA09A90309038508F40BA70B5503A20742041105BB04A1 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035607B30AAC0090045506680459028505C6076609E600740AE8068C03880018 +01BA0854050604F703420B910778033E0BEE0754096D054F056308500AC50B3B035707B40AAD009104560669045A0286 +05C7076709E700750AE9068D0389001901BB0855050704F803430B920779033F0BEF0755096E0550056408510AC60B3C +09740060043D06D3047E002909B0065E000000CB03B306000568059D08BF07D807EC01B6000608700B810376049404F9 +05AA0189029D0BF80AB00CA40A740735043E06D4001C044B09B1065F0975006103B40601047F002A08C007D9000100CC +000708710569059E049504FA07ED01B7029E0BF90B8203770A75073605AB018A001D044C0AB10CA5FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//5760 bytes +enum alphaTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000000000000000000002000000000000000D0", +x" +000000000000010000000000000002C00000000000008000", +x" +06050403030201000E0D0C0B0A09080711100F0303030303141414141414131214141414141414141414141414141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414 +141414141414141414141414141414141414141414141414141414141414141414141414141414140000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000030002000100000007000600050004000B000A00090008000F000E000D000C +001200110001001000150014000100130019001800170016001C0001001B001A001F001F001E001D001F001F001F0020 +001F001F001F001F001F002300220021001F001F00250024000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010026000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010029002800010027 +002D002C002B002A00010001000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001000100010001000100010001000100010001000100010001002E000100010001 +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F0030002F0001001F00330032003100010037003600350034003A000100390038 +003E003D003C003B004200410040003F0046004500440043004A004900480047004E004D004C004B005200510050004F +0053000100010001001F001F00550054001F001F001F001F0056001F001F001F00010001000100010001000100010057 +000100010001000100010001000100010058000100010001001F005900010001001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F005A001F001F001F001F001F +005C005B00010001005F005E005D001F0001000100010001000100010001000100010001000100010001000100010001 +000100010001000100600001000100010001000100010001001F001F00620061001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F0063001F001F001F +001F006500640001001F001F001F001F001F001F001F001F001F001F001F0066001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F006A006900680067001F001F001F001F006B001F001F001F +001F006E006D006C0071001F0070006F001F001F00730072001F0074001F001F001F001F0075001F001F001F001F001F +001F001F001F001F001F001F001F001F0001000100010001000100760001000100010001000100010001000100010001 +000100010001000100770001000100010001000100010078000100010001000100010001000100010001000100010001 +000100010001000100010079000100010001000100010001000100010001000100010001000100010001000100010001 +00010001000100010001000100010001007A000100010001001F007B00010001001F001F001F001F001F001F001F001F +001F007C00010001001F001F001F001F0001000100010001000100010001000100010001000100010001000100010001 +007D000100010001000100010001000100010001000100010001000100010001007E000100010001001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F +001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F000000000000000007FFFFFE07FFFFFE +0420040000000000FF7FFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000501F0003FFC30000000000000000BCDFFFF800000020 +FFFFFFFBFFFFD740FFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC03FFFFFFFFFFFFFFFF +FFFEFFFFFFFFFFFFFFFFFFFF027FFFFFBFFF0000000001FF000787FFFFFF00B6FFFFFFFF07FF0000FFFFC000FEFFFFFF +FFFFFFFFFFFFFFFF9C00E1FE1FEFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFE0000003FFFFFFFFFFFF043007FFFFFFFC00 +00001FFFFCFFFFFFFFFF07FF01FFFFFFFFFFFFFF00807EFFFFFF03F8FFF003FFEFFFFFFFFFFFFFFFFFFE000FFFE1DFFF +E3C5FDFFFFF99FEF1003000FB080599FC36DFDFFFFF987EE003F00005E021987E3EDFDFFFFFBBFEE1E00000F00011BBF +E3EDFDFFFFF99FEE0002000FB0C0199FC3FFC718D63DC7EC0000000000811DC7E3FFFDFFFFFDDFFF0000000F27601DDF +E3EFFDFFFFFDDFEF000E000F60601DDFE7FFFFFFFFFDDFFFFC00000F80F05DDF2FFBFFFFFC7FFFEE000C0000FF5F807F +07FFFFFFFFFFFFFE000000000000207F3BFFFFAFFFFFF7D600000000F000205F0000000000000001FFFE1FFFFFFFFEFF +1FFFFFFFFEFFFF0F0000000000000000F97FFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF3C00FFFFF7FFFFFFFFFF20BF +FFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF7F3DFFFFFFFF3DFFFFFFFFFFFF7FFF3DFFFFFFFFFF3DFFFF0000000007FFFFFF +FFFFFFFF0000FFFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF9FFFFFFFFFFFFFFFFFFF07FFFFFE01FFC7FFFFFFFFFF000FFFFF800FFFFF000DDFFF000FFFFF +FFCFFFFFFFFFFFFF00000000108001FFFFFFFFFF0000000001FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFFFFFFFFFF +01FF0FFF7FFFFFFF001F3FFFFFFF0000FFFF0FFFFFFFFFFF00000000000003FFFFFFFFFF0FFFFFFF001FFFFE7FFFFFFF +80000080000000000000000000007001FFEFFFFFFFFFFFFF0000000000001FEFFC00F3FFFFFFFFFF0003FFBFFFFFFFFF +007FFFFFFFFFFFFF3FFFFFFFFC00E000E7FFFFFFFFFF07FF046FDE0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF001FFFFFFFF80000FFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3F5FDFFFFFFFFFFFFF1FDC1FFF0FCF1FDC +00000000000000008002000000000000000000001FFF00000000000000000000F3FFBD503E2FFC84FFFFFFFF000043E0 +00000000000001FF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFC0000000000000000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000C781FFFFFFFFFFFFF20BFFFFFFFFF000080FFFFFFFFFF7F7F7F7F007FFFFFFFFFFFFF7F7F7F7F +00008000000000000000000000000000000000000000000000000000000000001F3E03FE000000E0FFFFFFFFFFFFFFFE +FFFFFFFEE07FFFFFF7FFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFF00007FFFFFFF000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000000001FFF3FFFFFFFFFFF000000000C00FFFF1FFF8FF07FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +FFFFFFFCFF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFC00001FEB3FFF000000FFFFFFFFBF000FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFE8FC00000000002FFFFF07FFFFFFFC001FFFFFFF0007FFFFFFF7FFFFFFFFFFFF7C00FFFF00008000 +007FFFFFFFFFFFFFFC7FFFFF00003FFF7FFFFFFFFFFFFFFF003CFFFF38000005FFFF7F7F007E7E7EFFFF03FFF7FFFFFF +FFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F +FFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFDFFE0F8007FFFFFFFFFFFFFFFDB +0003FFFFFFFFFFFFFFFFFFFFFFF800003FFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFCFFFF0FFF0000000000FF +0000000000000000FFDF000000000000FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFF07FFFFFE00000000FFFFFFC007FFFFFE +7FFFFFFFFFFFFFFF000000001CFCFCFCB7FFFF7FFFFFEFFF000000003FFF3FFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF +0000000000000000001FFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF1FFFFFFF000000000001FFFFFFFFE000FFFFFFFF07FFFFFFFFFF07FFFFFFFFFF3FFFFFFF00000000003EFF0F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF000FFFFFFFFF +1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF0000000000000000 +91BFFFFFFFFFFD3F007FFFFF003FFFFF000000007FFFFFFF0037FFFF0000000003FFFFFF003FFFFF0000000000000000 +C0FFFFFFFFFFFFFF0000000000000000003FFFFFFEEFF06F1FFFFFFF00000000000000001FFFFFFF0000001FFFFFFEFF +003FFFFFFFFFFFFF0007FFFF003FFFFF000000000003FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF +0007FFFFFFFFFFFF0007FFFFFFFFFFFF000000FFFFFFFFFFFFFF823FFFFFFC00000000000000003F0000000000000000 +0000000000000000000000000000000000031BFFFFFFFFFF100000000000001CFFFF00801FFFFFFFFFFF00000000003F +FFFF000000000003007FFFFF0000001FFFFFFFFFFFFFFFFF003E00000000003F01FFFFFFFFFFFFFF000001FFFFFF0004 +0007FFFFFFFFFFFF0047FFFFFFFF00F0FFFFFFFFFFFFFFFF000000001400C01EC09FFFFFFFFBFFFF0000000000000003 +FFFF01FFBFFFBD7F000001FFFFFFFFFFE3EDFDFFFFF99FEF0000000FE081199FFFBFFFFFFFFF4BFF00000000000A37A5 +FFFFFFFFFFFFFFFF00000003800007BBFFFFFFFFFFFFFFFF00000000000000B300000000000000000000000000000000 +7F3FFFFFFFFFFFFF000000003F0000007FFFFFFFFFFFFFFF0000000000000011013FFFFFFFFFFFFF0000000000000000 +000007FFE7FFFFFF000000000000007F0000000000000000000000000000000001FFFFFFFFFFFFFF0000000000000000 +FFFFFFFF0000000080000000FFFFFFFF99BFFFFFFF6FF27F0000000000000007FFFFFCFF000000000000001AFCFFFFFF +7FE7FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000020FFFFFF01FFFFFFFFFFFFFF00000000000000000000000000000000 +000000000000000000000001FFFFFFFF7F7FFFFFFFFFFDFFFFFC000000000001007FFEFFFFFCFFFF0000000000000000 +B47FFFFFFFFFFB7FFFFFFDBF000000CB00000000017B7FFF000000000000000000000000000000000000000000000000 +0000000000000000007FFFFF00000000C7FFFFFFFFFDFFFF000000000000000100010000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF00007FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000F00000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFF00000001FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000007E +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000000000000007F0000000000000000000000000000000000007FFFFFFFFFFF0000000000000000 +0000000000000000000000000000000001FFFFFFFFFFFFFFFFFF00007FFFFFFF7FFFFFFFFFFFFFFF00003FFFFFFF0000 +0000FFFFFFFFFFFFE0FFFFF80000000F000000000000FFFF0000000000000000000000000000000000001FFFFFFFFFFF +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF00000000FFFF80FF0003000B00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000003FFFFF +00000000000001FF00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000006FEF00000000000000040007FFFFFFFFFFFF00F000270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF +0000000043FF01FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF +7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF3FFFFFFFFFF7FFFFFFF7FFFFFDFFDFFFFFFFDFFFFFFFFF7FFFFFFF7FFFFFFFFDFFFFFFFDFF0000000000000FF7 +000007E07FFFFFFF000000000000000000000000000000000000000000000000FFFF07DBF9FFFF7F00003FFFFFFFFFFF +000000000000800000000000000000003F801FFFFFFFFFFF000000000000400000000000000000000000000000000000 +0000000000000000000000000000000000003FFFFFFF000000000FFFFFFFFFFF00000000000000000000000000000000 +000000000000000000000FFFFFFF000000000000000000000000000000000000000000000000000000013FFFFFFF0000 +0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000000000000001FFFFFFFFFFFFFFFFF000000000000088F00000000000000000000000000000000 +0AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0000000000000000FFFF000000000000FFFF03FFFFFF03FF +00000000000003FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF +03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFFFFFFFFFF000000003FFFFFFF +00000000000000000000000000000000000000003FFFFFFF000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000", +); +//3456 bytes +enum markTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000088", +x" +000000000000010000000000000001A00000000000004A00", +x" +04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202020202020202020B020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000100000000000000050004000300020009000800070006000D000C000B000A +000F00000000000E00100000000000000014001300120011000000000016001500000000000000170000000000000000 +00000000000000000000000000190018000000000000001A000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000001B00000000001F001E001D001C0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000200000000000000000002100000000 +0024002300220000000000000000000000000025000000000028002700260000002C002B002A00290030002F002E002D +000000330032003100370036003500340000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000380000000000000000000000000000000000000000003900000000000000000000 +003B003A00000000003C0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000003D000000000000000000000000000000000000000000000000003E000000000000 +00000040003F000000000000000000000000004100000000000000000000000000000043003B00420000000000450044 +000000000047004600000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000000000000000000000000000 +0000000000000000000000000000000000000000000003F8000000000000000000000000000000000000000000000000 +BFFFFFFFFFFE000000000000000000B60000000007FF000000010000FFFFF800000000000000000000003D9F9FC00000 +FFFF00000002000000000000000007FF0001FFC000000000200FF8000000000000003EEFFBC00000000000000E000000 +00000000FF800000FFFFFFFBFFFFFC00DC0000000000000F0000000C00FEFFFFD00000000000000E4000000C0080399F +D00000000000000E0023000000023987D00000000000000EFC00000C00003BBFD00000000000000E0000000C00E0399F +C0000000000000040000000000803DC7D00000000000001F0000000C00603DDFD00000000000000E0008000C00603DDF +D80000000000000F0000000C00803DDF000000000000000E000C0000FF5F840007F20000000000000000000000007F80 +1FF20000000000000000000000007F00C2A0000003000000FFFE0000000000001FFFFFFFFEFFE0DF0000000000000040 +7FFFF80000000000001E3F9DC3C00000000000003C00BFFC0000000000000000000000000000000000000000E0000000 +00000000000000000000000000000000001C0000003C0000000C0000000C0000FFF000000000000000000000200FFFFF +000000000000B8000000000000000000000002000000006000000000000000000FFF0FFF000000000000000000000000 +00000000000000000000000000000000000000000F8000009FFFFFFF7FE00000FFFF0000000000000000000000007FFF +FFF000000000001F000FF8000000001F00003FFE00000007000FFFC00000000000FFFFF0000000000000000000000000 +0000000000000000039021FFFFF70000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF +0000000000000000000000000000000000000000000000000001FFFFFFFF000000000000000000000000000000000000 +00000000000000000003800000000000000000000000000080000000000000000000000000000000FFFFFFFF00000000 +0000FC000000000000000000000000000000000006000000000000000000000000000000000000003FF7800000000000 +00000000C00000000003000000000000000010F8000008440000000000000000FFF00000000000038003FFFF0000003F +00003FC00000000000000000000FFF80FFF800000000000F0000002000000001007FFE00000000003800000000003008 +C19D0000000000000060F80000000002000000000000000000000000000000000000000000000000000037F800000000 +00000000400000000000000000000000000000000000000000000000000000000000FFFF0000FFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000 +0000000000000000000000000000000000000000000000000000000100000000000000000000000007C0000000000000 +00000000000000000000000000000000870000000000F06E000000000000000000000000000000000000006000000000 +000000F00000000000003E00000000000000000000000000000000000000000000000000000000000000000000000000 +0000180000000000F0000000000000000000000000000000000000000001FFC0000000000000003C0000000000000000 +FF00000000000007801900000000007F07FF0000000000070000000000000004001FFF80000000070008000000000060 +FFF8000000000007000000000000DE0140FFF0000000000000000000000000020000000000000000000007FF80000000 +D80000000000000F001F1FCC0080399FFF00000000000000000000060005F7A5FFE0000000000000000000004000007F +FFFF000000000000000000000000000F00000000000000000000000000000000FF3F8000000000000000000030000001 +FFFF000000000000000000000000000100FFF80000000000000000000000000000000FFFE00000000000000000000000 +0000000000000000000000000000000007FFF00000000000000000000000000000000000000000000000000000000000 +79BF000000000000000000000000000D000000000000000000000011FCFE00007BF80000000007FE000000000FFE0080 +0000000003FFFC000000000000000000FF7F8000000000000000000000000000007FFEFFFFFC00000000000000000000 +B47E00000000000000000000000000BF0000000000FB7C00000000000000000000000000000000000000000000000000 +00000000000000000078000000000000C7F000000000000B000000000400000700000000000000000000000000000000 +000000000000000000000000003FFF81000000000000000000000000000000000000FFFFC00000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000001F000000000000 +007F0000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFE8000 +00000000000780FF00030010000000000000000000000000000000000000000000000000600000000000000000000000 +FFFF3FFFFFFFFFFF000000000000007F000000000000000000000000000000000000000000000000F807E3E000000000 +00003C0000000FE700000000000000000000000000000000000000000000001C00000000000000000000000000000000 +F87FFFFFFFFFFFFF00201FFFFFFFFFFF0000FFFEF80000100000000000000000000007DBF9FFFF7F0000000000000000 +000000000000800000000000000000000000000000000000000000000000000000004000000000000000F00000000000 +0000000000000000000000000000000000000000000000000000F0000000000000000000000000000000000000000000 +00000000000000000000C0000000000000000000000000000000000000000000000000000000000000000000007F0000 +000000000000000000000000000007F000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000", +); +//2896 bytes +enum numberTrieEntries = TrieEntry!(bool, 8, 6, 7)(x" +0000000000000000000000000000002000000000000000D0", +x" +000000000000010000000000000002C00000000000002680", +x" +040203020202010009080202070206050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000002000200010000000200020002000200020002000200020005000200040003 +000700060002000200090008000600060006000B0006000A0002000D000C000C00020002000E00050002000F00020002 +00020002000200020011000200100002001300120002000E0000000C0014000200020002000200150002000200020002 +0019001800170016000200020002000200020002001B001A001D001C0002000200020002000200020002000200020002 +00020002001E00020002000200020002002000020002001F000200020022002100020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200060023 +00250017000C0024000400020002000C0002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +0002000200020002000200020002000200020002000200020002000E000200020027002600020002002A002900280002 +00020002002300020002000200020002002E002D002C002B003200310030002F00020034003300020037003600020035 +003A003900040038000200020004000200020002000C000C0002003C003B000C0002000C003D00020004000200020002 +0023000C0002003E003F000C000200020002000200020002000200020002000200020002000200400002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200000002000200020002000200020002000200020002000200020002000200020002000200020002004100050003 +000200040002000200020002004200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000400020002000200020002 +000200020002000200020044004300020002000200020002004500020002000200020002000200020002000200020002 +000200020002000200020002000200020002000500020002000200020004000200460002000400020002000200020002 +0002000C0047000200020002000200020002004A0049004800020002000200020002004B000200020002000200020002 +000200020002000200020002000200020002000200020002000400020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000203FF0000000000000000000000000000 +720C0000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000 +000000000000000003FF000000000000000000000000000000000000000003FF00000000000000000000FFC000000000 +000000000000000003F0FFC000000000000000000000000000FCFFC00000000000000000000000000007FFC000000000 +00000000000000007F00FFC000000000000000000000000001FFFFC07F00000000000000000000000000000003FF0000 +000FFFFF0000000000000000000000000000000003FF0000000000000000000000000000000000001FFFFE0000000000 +00000000000000000001C00000000000000000000000000003FF03FF000000000000000000000000000000000000FFC0 +00000000000000000000000007FF00000000000003FF03FF000000000000000000000000000000000000000003FF03FF +000000000000000003F100000000000000000000000003FF00000000000000000000000000000000FFFFFFFFFFFF0000 +00000000000003E700000000000000000000000000000000FFFFFFFF00000000000000000FFFFFFFFFFFFC0000000000 +0000000000000000FFC000000000000000000000000FFFFF000000000000000000000000000000002000000000000000 +070003FE00000080000000000000000000000000003C00000000000000000000000003FF0000000000000000FFFEFF00 +FFFE0000000003FF0000000000000000000003FF000000000000000000000000003F0000000000000000000000000000 +000000000000000003FF000003FF0000000FFFFFFFFFFF8001FFFFFFFFFFFFFF0000000000000C000000000000000000 +00000000000000000FFFFFFE000000000000000F000000000000000000000402000000000000000000000000003E0000 +0000000000000000FE000000FF0000000000FF8000000000F800000000000000000000000FC000000000000000000000 +3000000000000000FFFFFFFFFFFCFFFF000000000000000060000000000001FF00000000E00000000000F80000000000 +0000000000000000FF000000FF0000000000FE000000000000000000000000000000000000000000FC00000000000000 +03FF00000000000000000000000003FF00000000000000007FFFFFFF000000000000007FE000000000000000001E0000 +00000000000000000000000000000FE000000000000000000000FFFFFFFC0000FFC00000000000000000000000000000 +0000000000000000001FFFFE03FF000000000000000000000000000FFFFF03FF0FFF0000000000000000000000000000 +00000000000000000007FFFF00000000000000000000000000001FFFFFFF0000000000000000000000000000001FFFFF +FFFFFFFFFFFFFFFF00007FFFFFFFFFFF000000000000000000000003FBFF000000000000007FFFFF0000000000000000 +0000000000000000000FFFFF000FFFFF000000000000000001FFFFFF000000000000000000000000FFFFFFFFFFFFC000 +000000000000000007FE0000000000000000000000000000000000000000FF800000000000000000FFFE000000000000 +001EEFFFFFFFFFFF00000000000000003FFFBFFFFFFFFFFE00000000000000000000000000001FFF0000000000000000 +000000000000000003FF000000000000", +); +//3488 bytes +enum punctuationTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +000000000000000000000000000000200000000000000080", +x" +000000000000010000000000000001800000000000004D00", +x" +04020302020201000A090802070206050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000200010001000000050004000300010001000800070006000C000B000A0009 +000E00010001000D001100100001000F0015001400130012000100010001001600180001000100170019000100010001 +00010001001A00010001001D001C001B000100010001001E000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100200001001F00240023002200210001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010027002600250001 +002900010028000100010001002A0001002E002D002C002B00310030002F000100350034003300320039003800370036 +003D003C003B003A0040003F0001003E0001000100010001000100010001004100010001000100010042000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +004400430001000100470046004500010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100480001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100010049000100010001000100010001000100010001000100010001004A0001 +00010001004B000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100018C00F7EE0000000028000000B800000188C00882000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000 +00000000000000800000000000000000000000000000000000000000FC00000040000000000006000018000000000049 +00000000E800360000003C0000000000000000000000000000000000001000000000000000003FFF0000000000000000 +000000000000000003800000000000007FFF000000000000000000004000000000000000000000000000000000000000 +000000000000000000010030000000000000000000000000200000000000000000000000000000000040000000000000 +000000000000000000010000000000000000000000000000008000000000000000000000000000100000000000000000 +00000000000000000000000000000000000000000000000000100000000000000000000000000000000000000C008000 +000000000000000000000000000000003C0000000017FFF00000000000000000000000000000002000000000061F0000 +0000000000000000000000000000FC00000000000000000008000000000000000000000000000000000001FF00000000 +000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000 +000000000000000000004000000000000000000018000000000038000000000000600000000000000000000000000000 +0000000000000000000000000770000000000000000007FF000000000000000000000000000000000000000000000000 +000000000000000000000000000000300000000000000000000000000000000000000000C00000000000000000000000 +00003F7F0000000000000000000000000000000000000000E0000001FC00C0000000000000000000F000000000000000 +F800000000000000C000000000000000000000000000000000000000000800FFFFFF00FFFFFF0000600000007FFBFFEF +000000000000600000000000000000000000060000000F00000000000000000000000000000000000000000000000000 +0000000000000000003FFF000000000000000000000000000000FFC00000006000000000000000000000000000000000 +0000000001FFFFF8300000000F000000000000000000000000000000000000000000000000000000DE00000000000000 +0000000000000000000100000000000000000000000000000000000000000000FFFF7FFFFFFFFFFF000000003FFCFFFF +0000000000000000000000000000000020010000FFF3FF0E000000000000000000000001000000000800000000000000 +000000000000000000000000000000000000000000000000C000000000000000000000000000E0004008000000000000 +000000000000000000FC000000000000000000000000000000F00000000000000000000000000000170000000000C000 +0000C000000000000000000080000000000000000000000000000000C0003FFE000000000000000000000000F0000000 +000000000000000000030000C00000000000000000000000000000000000000000000000000000000000080000000000 +C000000000000000000000000000000000000000000000000000000000000000FFFF000003FF000000000D0BFFF7FFFF +00000000000000000000000000000000B80000018C00F7EE0000003FA800000000000000000000000000000000000000 +000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000008000000000000000000100000000000000000000000080000000000000000000000000000000000000000000 +000000000000000000000000008000000000000000000000000000000000000080000000800000000000000000000000 +0000000000000000000000000000000000000000000000008000000001FF00000000000000000000007F000000000000 +FE000000000000000000000000000000000000001E000000000000000000000000000000000000000000400000000000 +000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000 +00000000000000000000000003E0000000000000000003C0000000000000000000000000000000000000000000003F80 +D80000000000000000000000000000030000000000000000003000000000000F000000000000000000000000E80021E0 +3F0000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000 +00000000000000000000000001B000000000000000000000000000002C00F80000000000000000000000000000000040 +0000000000000000000000000000000000000000000000000000000000FFFFFE000000000000000000001FFF0000000E +020000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000 +080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070 +000000000000000000000004000000008000000000000000000000000000007F00000007DC0000000000000000000000 +00000000000003FF0000000000000000000000000000000000000002000000000000000000000000000300000000003E +000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000 +0000000000000000000000000000FFF8000000000000000080000000000000000000000000000000001F000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000 +00000000000000000000C00000000000000000000000000000200000000000000F800000000000000000000000000010 +0000000000000000000000000000000000000000000000000000E0000000000000000000000000000000000000000000 +000000000000000000000000000000000000000007800000000000000000000000000000000000000000000000000000 +000000000000000000000004000000000000000000000000000000000000000000000000800000000000000000000000 +000000000000000000000000000000000000000000000F80000000000000000000000000000000000000000000000000 +00000000000000008000000000000000000000000000000000000000C000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000", +); +//3472 bytes +enum symbolTrieEntries = TrieEntry!(bool, 8, 6, 7)(x" +0000000000000000000000000000002000000000000000E0", +x" +000000000000010000000000000003000000000000003480", +x" +05030403030201000A090803070303060303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303 +030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000200020001000000050004000300020007000200060002000A000200090008 +000C0002000B0002000F000E000D00020002001100020010001400130002001200020002001500020016000200020002 +00020002000200020018000200020017001A0019000200020002001B000200020002000200020002001C000200020002 +0020001F001E001D00210022002100210021002100240023002600250021002100270021002100210029002800210021 +00020002002A0002002D0021002C002B00300002002F002E002100210032003100020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200330002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200340002003600350002000200020002000200370002003900020038 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +00020002000200020002000200020002000200020002000200020002000200020002000200020002003B003A00020002 +003D003C000200020040003F0002003E0042004100020002000200020002000200020002000200020002000200020002 +000200020002004300020002004400020045000200020002000200020002000200020002000200020002000200020002 +000200020002000200020012000200020002000200020002000200020002000200020002000200020046000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002004700020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020048000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020021002100490021004C004B004A0021004F004E004D00210002005100020050 +000200020002000200540053005200020021002100210021000200020056005500020002000200020002000200020002 +000200570002000200020002001000020002000200020002000200020002000200020002000200020002000200020002 +000200590058000200020002005A0002005E005D005C005B002100210002005F00210021002100210062006100600021 +002100210064006300670021006600650002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002 +00020002000200020002000200020002700008100000000050000001400000000113D37C000000000080000000800000 +000000000000000000000000000000000000000000000000FFFFAFE0FFFC003C00000000000000000020000000000000 +0000000000000030004000000000000000000000000000040000000000000000000000000000E0000000000000000000 +000000000000C9C00000000000000000000000000000000060000200400000000000000000000000C040000000000000 +0000000000000100000000000000000000000000000000000C0C00000000000000000000000000000002000000000000 +00000000000000000001000000000000000000000000000007F800000000000000000000000000008000000000000000 +000000000000000002000000000080008000000000000000000000000000000001500000FCE8000E0000000000000000 +C0000000000000000000000001E0DFBF00000000C000000000000000000000000000000003FF00000000000000000000 +000000000000000000002000000000000000000000000000000000000800000000000000000000000000000000000001 +0000000000000000FFFFFFFFC000000000000000000000001FF007FE00000000A0000000000000006000E000E000E003 +00000000000000001C00000000040010FFFFFFFF00001C0000000000000000010C0042AFC1D0037B000000000000BC1F +FFFFFFFFFFFF0C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFFFF0FFFFFFFFFFFFFFFFFF +000003FFFFFFFFFF00000000000007FFFFFFFFFFF0000000000003FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF +FFFFFFFFFFF00000FFFF003FFFFFFF9FFFFFFFFFFE000007CFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFF +FFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF0000000000000000000007E00000000000000000000000000000000000030000 +FFFFFFFFFBFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000003FFFFFC0C00001000C00100000000000000000 +0000000018000000000000000000000000000000FFC300000000803FFFFFFFFFFFFFFC007FFFFFFFFFFFFFFF000100FF +0001FFFFFFFFFC00FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000007F +00000003007FFFFF00000000000000000000000000000600000000000000000003C00F00000000000000000000000000 +00000000000000000380000000000000000000000000000000000C000800000000000200000000000000000000000000 +FFFC00000000000000000000000000070000000000000000000000000000FFFF0000000000000000F000000000008000 +0000000000000000000002740000000040000000700008100000000050000001000000000000000030007F7F00000000 +FF80000000000000FE00000000000000000000011FFF73FF1FFFFFFFFFFF000000000000000000000180000000000000 +00000000000000000000000000000100000000000000C000000000000000000000000000000000000003FFFFFFE00000 +F000000000000000000000000000002000000000100000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +000FFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000000000000F +FFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFF00001C1FFFFFFFFFFFFFC3FFFFFFF018000007FFFFFFFFFF +FFFFFFFFFFFFFFFF0000000000000023FFFFFFFFFFFFFFFF00000000007FFFFF00000000000000000800000008000002 +00200000002000000000800000008000000002000000020000000000000000080780000000000000FFDFE00000000000 +000000000000006F00000000000000000000000000000000000000000000800000011000000000000000000000000000 +0000400000000000000000000000000000000000000000000003000000000000FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFE000FFFFFFFFFFFFFFFF00003FFFFFFFFFFFFFFFFFC000000000 +0FFFFFFFFFFF00070000003F000301FFFFFFFFFFFFFFFFFF1FFF1FFFF0FFFFFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00010FFF03FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000000000003 +FFFFFFFFFFFFFFFF1FFF3FFF000FFFFFFFFFFFFFFFFF83FF01FF03FF9FFFC07FFFFFFFFFFFF7FFFF0000FFFFFFFFFFFF +00000000000000000000000000000000", +); +//6272 bytes +enum graphicalTrieEntries = TrieEntry!(bool, 8, 5, 8)(x" +0000000000000000000000000000002000000000000000D0", +x" +000000000000010000000000000002C00000000000009000", +x" +05040302020201000D0C0B0A09080706100F0E0202020202131313131313121113131313131313131313131313131313 +131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313 +131313131313131313131313131313131313131313131314131313131313131313131313131313130000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000200010001000000050004000300010009000800070006000D000C000B000A +0010000F0001000E00120011000100010016001500140013001800010001001700010001001A0019000100010001001B +001C0001000100010020001F001E001D0001002300220021000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +0001000100010001000100010001000100010001000100010026002500010024002A0029002800270001000100010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +000100010001000100010001000100010001000100010001002B000100010001002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002E002D0001002C00310030002F000100350034003300320038000100370036003C003B003A00390040003F003E003D +00440043004200410048004700460045004C004B004A00490050004F004E004D0051000100010001002C002C00530052 +002C002C002C002C0054002C002C002C0001000100010001000100010001005500010001000100010001000100010001 +0056000100010001002C005700010001002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C0058002C002C002C002C002C005A005900010001005D005C005B002C +00010001000100010001000100010001000100010001000100010001000100010001000100010001005E000100010001 +0001000100010001002C002C0060005F002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C0061002C002C002C002C006300620001002C002C002C002C +002C002C002C002C002C002C002C0064002C002C002C002C002C002C002C002C002C002C002C002C0067006600010065 +006B006A00690068006F006E006D006C002C0070000100010071002C002C002C002C0074007300720077002C00760075 +002C002C00790078002C007C007B007A0001007F007E007D00810080000100010084008300010082002C002C002C002C +000100010001000100010085000100010001000100010001000100010001000100010001000100010086000100010001 +000100010001008700010001000100010001000100010001000100010001000100010001000100010001008800010001 +000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 +0089000100010001002C008A00010001002C002C002C002C002C002C002C002C002C008B00010001002C002C002C002C +0001000100010001000100010001000100010001000100010001000100010001008C0001000100010001000100010001 +00010001000100010001000100010001008D000100010001002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C008E002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C +002C002C002C002C002C002C002C002C002C002C002C002C002C002C002C002CFFFFFFFF000000007FFFFFFFFFFFFFFF +FFFFDFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFBFFFFD7F0FFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFE7FFFFF +FFFFFFFFFFFEE7FF001F87FFFFFF00FFFFFFFFFFEFFFFFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFF +FFFFFFFFFFFF3FFFFFFFFFFFFFFFE7FF0003FFFFFFFFFFFFE7FFFFFFFFFFFFFF7FFF3FFFFFFFFFFFFFFF07FF4FFFFFFF +FFFFFFFFFF807FFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C5FDFFFFF99FEF7FFFFFCFB080799F +D36DFDFFFFF987EE007FFFC05E023987F3EDFDFFFFFBBFEEFE03FFCF00013BBFF3EDFDFFFFF99FEE00FFFFCFB0E0399F +C3FFC718D63DC7EC07FFFFC000813DC7F3FFFDFFFFFDDFFFFF80FFCF27603DDFF3EFFDFFFFFDDFFF000EFFCF60603DDF +FFFFFFFFFFFDDFFFFFFFFFCFFFF0FDDF2FFBFFFFFC7FFFEE001CFFC0FF5F847F87FFFFFFFFFFFFFE000000000FFFFFFF +3FFFFFAFFFFFF7D600000000F3FF7F5FFFFFFFFFFFFFFFFFFFFE1FFFFFFFFEFFDFFFFFFFFEFFFFFF0000000007FFDFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20BFFFFFFFFFFFFFFFFFFFFFFFFF3D7F3DFF +7F3DFFFFFFFF3DFFFFFFFFFFFF7FFF3DFFFFFFFFFF3DFFFF1FFFFFFFE7FFFFFFFFFFFFFF03FFFFFF3F3FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFFF01FFFFFFFFFFFFFF007FFFFF803FFFFF000DDFFF000FFFFF +FFFFFFFFFFFFFFFF03FF03FF3FFFFFFFFFFFFFFF03FFBFFF01FFFFFFFFFFFFFFFFFF07FFFFFFFFFF003FFFFFFFFFFFFF +0FFF0FFF7FFFFFFF001F3FFFFFFFFFF1FFFF0FFFFFFFFFFFFFFFFFFFC7FF03FFFFFFFFFFCFFFFFFF9FFFFFFF7FFFFFFF +FFFF3FFF03FF03FF0000000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFF +F8FFFFFFFFFFFFFFFFFFFFFFFFFFE3FFE7FFFFFFFFFF07FF07FFFFFFFFFF00FFFFFFFFFF3F3FFFFF3FFFFFFFAAFF3F3F +FFDFFFFFFFFFFFFF7FDCFFFFEFCFFFDFFFFF80FFFFFF07FFFFF30000FFFFFFFFFFFFFFFF1FFF7FFF0001FFFFFFFF0001 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF000003FFFFFFFFFFFFFFFFFF000007FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFF20BFFFFFFFFF800180FFFFFFFFFF +7F7F7F7F007FFFFFFFFFFFFF7F7F7F7FFFFFFFFFFFFFFFFF000000003FFFFFFFFFFFFFFFFBFFFFFF000FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +FFFFFFFFFE7FFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF803FFFFFFFFF +FFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF1FFFFFFFFFFFFFFF007F00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00001FEB3FFF03FF1FFFFFFFFFFF00FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF03FFC03FFFFFFFFFFFFFFFFF1FFFFFFF800FFFFFFFFFFFFFFFFFFFFF7FFFFFFFC3FFBFFF +007FFFFFFFFFFFFFFFFFFFFFF3FF3FFFFFFFFFFFFFFFFFFF007FFFFFF8000007FFFF7F7F007E7E7EFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFF03FF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF0FFFFFFFFFFFF87F +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000003FFFFFF5F7FFFFFE0F8007FFFFFFFFFFFFFFFDBFFFFFFFFFFFFFFFFFFFFFFFFFFF80007 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFF0000000080FFFFFFFFFF03FFFFFFFFDF0F7FFFF7FFFF +FFFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF30007F7F1CFCFCFC +B7FFFF7FFFFFEFFF000000003FFF3FFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFF8FFFFFFFFFFF87FFFFFFFFFFFFFFFF +000000011FFF7FFF3FFFFFFFFFFF000000000000000000000000000000000000FFFFFFFF1FFFFFFF0FFFFFFF0001FFFF +FFFFE00FFFFFFFFF07FFFFFFFFFF07FFFFFFFFFFBFFFFFFF00000000003FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF03FF3FFFFFFF0FFFFFFFFF0FFFFFFFFF00FFFFFFFFFFF7FF800FFFFFFFFF1BFBFFFBFFB7F7FF000FFFFFFFFFFFFF +007FFFFFFFFFFFFF000000FF003FFFFF07FDFFFFFFFFFFBF000000000000000091BFFFFFFFFFFD3FFFFFFFFFFFBFFFFF +0000FF807FFFFFFFF837FFFF0000000083FFFFFF8FFFFFFF0000000000000000F0FFFFFFFFFFFFFFFFFFFFFFFFFCFFFF +873FFFFFFEEFF06FFFFFFFFF01FF01FF00000000FFFFFFFF007FF87FFFFFFFFFFE3FFFFFFFFFFFFFFF07FFFFFF3FFFFF +0000FE001E03FFFF0000000000000000FFFFFFFFFFFFFFFF00000000000001FF0007FFFFFFFFFFFFFC07FFFFFFFFFFFF +03FF00FFFFFFFFFFFFFFFE3FFFFFFFFF000000000000C03F000000000000000000000000000000007FFFFFFF00000000 +00033BFFFFFFFFFFF00000000000001CFFFF00FFFFFFFFFFFFFF000003FFFFFFFFFF0000000003FF007FFFFF00000FFF +FFFFFFFFFFFFFFFF803FFFFFFFFC3FFFDFFFFFFFFFFFFFFF03FF01FFFFFF0007FFDFFFFFFFFFFFFF007FFFFFFFFF00FF +FFFFFFFFFFFFFFFF001FFFFEFFFFFFFFFFFFFFFFFFFBFFFF0000000000000003FFFF03FFBFFFBD7F03FF07FFFFFFFFFF +FBEDFDFFFFF99FEF001F1FCFE081399FFFBFFFFFFFFF4BFF0000000601BFF7A5FFFFFFFFFFFFFFFF00000003EFFFFFFF +FFFFFFFFFFFFFFFF0000000003FF00FF00000000000000000000000000000000FF3FFFFFFFFFFFFF000000003FFFFFFF +FFFFFFFFFFFFFFFF00001FFF03FF001F03FFFFFFFFFFFFFF0000000FFFFF03FFFFFF0FFFE7FFFFFF000000000000007F +000000000000000000000000000000000FFFFFFFFFFFFFFF0000000000000000FFFFFFFF000000008007FFFFFFFFFFFF +F9BFFFFFFF6FF27F0000000003FF007FFFFFFCFF000000000000001FFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF +FFFF0007FFFFFFFF01FFFFFFFFFFFFFF00000000000003FF0000000000000000000000000000000003FF0003FFFFFFFF +FF7FFFFFFFFFFDFFFFFF1FFFFFFF003F007FFEFFFFFCFFFF0000000000000000B47FFFFFFFFFFB7FFFFFFDBF03FF00FF +000003FF01FB7FFF000000000000000000000000000000000000000000000000000000000000000001FFFFFF00000000 +C7FFFFFFFFFDFFFF0000000007FFFFFF00010000000000008003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000003FFFFFF0000000000000000FFFFFFFFFFFFFFFF001F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000000000000000F0000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFF00000007FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000007F +0000000000000000000000000000000003FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +01FFFFFFFFFFFFFFFFFFC3FF7FFFFFFF7FFFFFFFFFFFFFFF003F3FFFFFFF03FFFFFFFFFFFFFFFFFFE0FFFFFBFBFF003F +000000000000FFFF0000000000000000000000000000000003FFFFFFFFFFFFFF00000000000000000000000000000000 +0000000000000000FFFFFFFFFFFFFFFF0000000007FFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF87FF +00000000FFFF80FF0003001F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000003FFFFF00000000000001FF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000006FEF000000000000 +00040007FFFFFFFFFFFF00F000270000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF07FFFFFFFFFF00000000F3FF01FF0000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000FFFFFFFFFFFFF0000000000000000FFFF3FFFFFFFFFFFFFFFFFFFFFFF007FFFFFFFFFFFFFFFFF000000000000000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFFFE7FFFFFFFFFF807FFFFFFFFFFFF +FFFFFFFFFFFFFFFF000007FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000003F0000000000000000000FFFFF000FFFFF +FFFFFFFFFFFFFFFF01FFFFFF007FFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF +EBFFDE64DFFFFFFFFFFFFFFFFFFFFFEF7BFFFFFFDFDFE7BFFFFFFFFFFFFDFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFEF8000FFF0000000000000000 +000007E07FFFFFFF000000000000000000000000000000000000000000000000FFFF07DBF9FFFF7F00003FFFFFFFFFFF +000000000000800000000000000000003FFF1FFFFFFFFFFF000000000000C3FF00000000000000000000000000000000 +0000000000000000000000000000000000007FFFFFFF000083FFFFFFFFFFFFFF00000000000000000000000000000000 +000000000000000003FFFFFFFFFF000000000000000000000000000000000000000000000000000087FFFFFFFFFF0000 +0000000000000000000000000000000000000000000000007FFF6F7F00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00000000007FFF9FFFFFFFFFFFFFFFFF00000000C3FF0FFF00000000000000000000000000000000 +0000000000000000FFFE000000000000001FFFFFFFFFFFFF00000000000000003FFFFFFFFFFFFFFE0000000000000000 +000000000000000000000000000000000AF7FE96FFFFFFEF5EF7F796AA96EA840FFFFBEE0FFFFBFF0003000000000000 +FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FFF000FFFFF003FFFFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00003FFFFFFFFFFFFFFFFFC0000000000FFFFFFFFFFF00070000003F000301FF00000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FFF1FFFF0FFFFFFFFFFFFFFFFFFFFFFF87FFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00010FFF03FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF03FF00FF0FFF3FFFFFFF00FF0000000000000003 +FFFFFFFFFFFFFFFF1FFF3FFF000FFFFFFFFFFFFFFFFF83FF01FF03FF9FFFC07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF7FFFF03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF +03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0001FFFFFFFFFFFFFFFFFFFFFFFF000000003FFFFFFF +00000000000000000000000000000000000000003FFFFFFF000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +0000000000000000000000000000000000000000000000000000000000000000", +); +//4944 bytes +enum nonCharacterTrieEntries = TrieEntry!(bool, 7, 4, 4, 6)(x" +00000000000000000000000000000010000000000000004C0000000000000154", +x" +000000000000008000000000000000F000000000000004200000000000004580", +x" +07060504030201000B0B0B0A090801010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0D0101010B0B0B0C000000000D010101000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000030002000100000007000600050004 +000B000A00090008000D000D000D000C000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D000D +000D000D000D000D000D000D000D000D000D000F000E000D000D000D000D000D000D000D000D000D000D000D0010000D +000D000D000D000D00120011000D000D0016001500140013001A001900180017001E001D001C001B000D000D001F000D +001D001D00210020001D001D001D001D00240023001D0022000D000D000D000D0026000D0025000D001D001D001D001D +0027001D001D001D0029001D001D0028002A001D001D001D002E002D002C002B003200310030002F001D003500340033 +000D000D000D000D000D000D000D000D000D000D0036000D000D00380037000D0039000D000D000D000D000D000D000D +003B003A000D000D001D003C001D001D000D000D000D000D000D000D000D003D001D001D001D003E001D001D001D001D +001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D001D003F001D001D001D001D +001D001D001D001D001D001D001D001D000D000D000D000D000D000D000D000D000D000D000D000D0040000D000D000D +000D000D000D000D000D000D000D000D000D000D000D000D0040000D000D000D00000000000000000000000000000000 +00000000000000000000000200010000000000000000000000060005000400030000000000000000000A000900080007 +0000000D000C000B000F000E0000000000130012001100100017001600150014001B001A00190018001F001E001D001C +0023002200210020002600250024000000270000000000000000000000000000002A002900280000002E002D002C002B +000000000000000000000000000000000030002F000000000033000000320031003500340030002D0039003800370036 +003D003C003B003A003F0000003E00000043004200410040000000000000000000000000000000000047004600450044 +004A0049004800000000004B000000000000000000000000000000000000000000000000004D004C0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F004E0000 +00500000000000000054005300520051005700560055000000580000000000000000000400590000005C005B0000005A +000000000000005D00000000000000000000000000000000000000000000000000000000000000000000000000000000 +005F005E0000000000000000000000000061000000000060006200000000000000640000006100630066000000650000 +0069000000680067006B00000038006A000000000000000000000000000000000000000000000000006D006C00000000 +00000000000000000000000000000000006F0000006E0000007200000071007000000000000000000074007300000000 +007600000075002D0078007700000059007B0000007A0079007E007D0000007C0080002F007F007F0084008300820081 +008600850000000000570089008800870000000000000000007F008B008A0067008E008D004F008C00730090007F008F +0094009300920091007F009700960095009A009900980000007F009D009C009B00A0009F009E007F00A300A200A10087 +00A5000000A4000000A7000000A6004600AB00AA00A900A800AF00AE00AD00AC00B1000000B00000005500B2007F007F +00B500B400B30000007F007F00B700B600BA00B9007F00B800BE00BD00BC00BB003000C000BF000000C2007F007F00C1 +007F00C500C400C3007F00C800C700C600C9007F007F007F00CD00CC00CB00CA00000000000000000000000000000000 +0000000000000000007F006F000000000000000000CE0000007F007F00CF0000007F007F007F007F007F007F007F007F +007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F +007F007F007F007F009900D0007F007F0000000000D10000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000007B00000000000000000000000000000000000000000000 +007F007F00B70000007F007F007F007F007F007F007F007F007F007F007F00B4007F007F007F007F007F007F007F007F +0000000000000000000000000000000000D3007700D20030007F00D500D40000007F007F007F007F007F007F00B4007F +007F00CB0000007F00D800D700D600000000000000000000000000000000000000000000000000000061000000000000 +00D9000000000000007F007F007F0098007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F +007F007F007F007F00DA007F007F007F00000000000000000000000000DC00DB00B8000000000000007F007F007F007F +007F00DE00DD0000007F007F007F007F007F007F007F007F007F007F007F007F00B40000000000000000000000000000 +007F00570000000000CF0000005F006E003500000000000000E00000000000DF00E2007F00E10000007F007F00E30000 +00E600E500E400000000000000E800E7000000E90000000000EA00000000000000000000000000000000000000000000 +007F00EB00000000007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F00EC +007F00EF00EE00ED007F007F00F100F000F300F2007F007F007F007F007F007F00F4007F007F007F00F5007F007F007F +007F007F007F007F00F6007F007F007F00F7000000000000007F007F00F80000007F007F007F007F007F007F007F007F +007F00FA00F9007F007F007F007F00FB00FF00FE00FD00FC007F007F007F007F0101010000000038010200EE00000000 +007F007F0104010300000000000000000000000000000000000000000000000001050000000000000107000001060000 +00A901090108004B0000000000000000010C010B010A000000B4010D0000000000000000000000000000000000000000 +0093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4 +000000000000010E00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000010F0000000000000000000000000000000000000000000000000000000000000000000000000110000000000000 +00000000000000000000000000000000007F007F00550000007F007F007F007F00000000000000000000000000000000 +007F007F007F0055007F007F007F007F0000000000000000000000000000000000000000000000000000000001110000 +000000000000000000000000000000000000000000000000007F011200000000007F007F000001130112000000000000 +007F007F007F007F007F007F007F007F0000000000000000000000000000000000000000000000000114000000000000 +000000000000000000000000000000000000000000000000011400000000000000000000000000000300000000000000 +000000040000280F000100000000000000000000018000000000000000011800FFE078000000FF000000000000004000 +0000000000001800FFFC00000000000018000000000000008000C000000000000000F800B000000000000000007C8000 +0C3A020000066010800000304F7F86602C92020000067811FF80003FA1FDC6780C1202000004401101FC0030FFFEC440 +0C12020000066011FF0000304F1FC6603C0038E729C23813F800003FFF7EC2380C00020000022000007F0030D89FC220 +0C10020000022000FFF100309F9FC220000000000002200000000030000F0220D004000003800011FFE3003F00A07B80 +7800000000000001FFFFFFFFF0000000C000005000000829FFFFFFFF0C0080A00001E000000001002000000001000000 +FFFFFFFFF8002000000000000000DF4000000000C280C20080C200000000C20000000000008000C20000000000C20000 +E00000001800000000000000FC000000C0C000000000000000000000E0000000FE00000000000000FF8000007FC00000 +FFF22000FFF00000FC00FC00C00000000000F80000000000FFC0000000000000F000F00080000000FFE0C0000000000E +0000F00000000000000000003800FC00000000003000000060000000800000000000C000FC00FC00FFFFFFFFFFFF8000 +00000000000020000FF000000000000007000000000000000000000000001C00180000000000F800F80000000000FF00 +00000000C0C00000C00000005500C0C000200000000000008023000010300020000C00200000000000000000E0008000 +FFFE00000000FFFE000000000000F000FFFFFC000000000000000000FFFFF80000300000000000000000000000400000 +01F00000000000000000DF40000000007FFE7F000000000080808080FF8000000000000080808080FFFFFFFFC0000000 +0000000004000000FFF00000000000000000FFFFFFC000000000000000000001000100000000001F0000000000008000 +00007FC0000000000000000080000000000000000000E000000000000000FF80FFFFF00000000000FF00000000000000 +0003FFFFE014C000FC00E0000000000000000000FC003FC0E00000007FF00000800000003C004000FF80000000000000 +000000000C00C000FF80000007FFFFF800008080FF818181FC00C000000000000000FFF000000000F000000000000780 +0000C00000000000FFFFFFFFFC000000A08000001F07FF800000000000000024000000000007FFF80000000000030000 +0000FFFFFFFF7F000020F0800008000060000000000000008000000000000000C1FF8080E30303034800008000001000 +FFFFFFFFC000C000F8000000000000000070000000000078FFFFFFFEE0008000C00000000000FFFFFFFFFFFFFFFFFFFF +F0000000FFFE000000001FF000000000F80000000000F8000000000040000000FFFFFFFFFFC000F00000FC00C0000000 +F000000000F000000000FF000000000008007FF000000000E404000400480800FFFFFF00FFC00000F802000000000040 +6E400000000002C0FFFF007F8000000007C80000FFFFFFFF7C000000700000000F0000000000000078C0000001100F90 +00000000FE00FE00FFFFFFFF00000000FF8007800000000001C000000000000000F8000000C00000FFFF01FFE1FC0000 +FFFFFFFFFFFFFE00FFF800000000000003F8000000000000FC00FF0000000000000001C000000000FFFFFFFFFFFF3FC0 +80000000FFFFFFFFFFFCC400000000000FFFFFFFFFFFFFE30000FFFFFC0000000000FFFFFFFFFC00FF800000FFFFF000 +7FC000000003C000FC00FE000000DFF8FF8000000000FF00FFE00001000000000000000000040000FFFFFFFFFFFFFFFC +0000FC0040004280FC00F800000000000412020000066010FFE0E0301F7EC660004000000000B400FFFFFFF9FE40085A +FFFFFFFC10000000FFFFFFFFFC00FF0000C0000000000000FFFFE000FC00FFE0FC00000000000000FFFFFFF00000FC00 +0000F00018000000FFFFFFFFFFFFFF80F00000000000000000000000FFFFFFFF7FF80000000000000640000000900D80 +FFFFFFFFFC00FF8000000300FFFFFFFFFFFFFFE003000000000000000000FF000000FFF800000000FFFFFFFFFFFFFC00 +FC00FFFC0000000000800000000002000000E0000000FFC0FF800100000300004B8000000000048000000240FC00FF00 +FFFFFC00FE048000FE000000FFFFFFFF3800000000020000FFFFFFFFF8000000FFFEFFFFFFFFFFFF7FFC000000000000 +FFE0800000000000FFFFFFFFFFFFFFF0000000000000FFFF00000000FFC0000000003C0080000000FFC0C0000000FC00 +1F0000040400FFC0FFFFFFFFFFFF00000000000000007800FFFFFFFF00007F00FFFCFFE0FFFFFFFF7FFFFFFFFFC00000 +9010FFFFFFFFFFFFFFFBFFF8000000000000FF0FFFD8FFFFE000F80000000000FFFFFFF00C00FE000000018000000000 +FFFFF80000000000FFFFFFFFFFFFFFC0FFF00000FFF00000FE000000FF80000000000000002000001400219B20000000 +0000000000000010840000002020184000000000000203A0000000C0000000000000000000003000FFFF000107FFF000 +FFFFF81F800000000000F82406000080FFFFC00000000000FFFFFFFFFFFF7FFFC000E00000000000FFFFFFFFFFFF3C00 +FFFF80000000FFFF7C00000000000000FC0000000000FFFF780000000000FFFF80009080FFFFFFFFFFFFFFFFFF800060 +FFFFFFFF3C00F0000001FFFFFFFFFFFFFFE0000000000000C000000000000001F508016900000010A10808695569157B +F0000411F0000400FFFCFFFFFFFFFFFF00018000FFF00000FFC00000000100010000003FFFFFFFFFF00000000000FFF8 +FFFFFFC0FFFCFE00E000E0000F0000000780000000000000FFFEF000FC00000000000000FC00FF00F000C0000000FF00 +E000C000FFF000000000000000007C00FE00FC0060003F80000000000008000000000000C00000000000FFFC00000000 +0000FFFE00000000000000000000F800FFFF00000000000000000000FFFFFFFDC000000000000000C000000000000000", +); +enum MAX_SIMPLE_LOWER = 1460; +enum MAX_SIMPLE_UPPER = 1477; +enum MAX_SIMPLE_TITLE = 1481; +//10752 bytes +enum toUpperIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000001000", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001500000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000017000000000000001900180000001D001C001B001A00210020001F001E00000000000000000000002300220000 +000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000280027002600250000000000000029 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002B002A0000002F002E002D002C00000000000000000000000000000000 +000000000000000000000031003000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000330000 +000000000000000000000000000000000000000000000000000000000000000000360000003500340000003700000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00380000000000000000003A003900000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003C00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000003E003D0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000200010000FFFF0006000500040003000A000900080007000E000D000C000B +001200110010000F0016001500140013FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C5FFFFFFFFFFFF001E001D001C001B002200210020001F +0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036 +003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF +0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF +0053FFFF005205C70055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B +005EFFFF05E4005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF +006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF +FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D +FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF +FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF +FFFFFFFFFFFFFFFFFFFF0090008FFFFF0093FFFF00920091FFFF0095FFFF0094FFFF0097FFFF0096FFFF0099FFFF0098 +FFFF009BFFFF009A009EFFFF009D009C00A0FFFF009FFFFF00A2FFFF00A1FFFF00A4FFFF00A3FFFF00A6FFFF00A5FFFF +00A800A7FFFF05ECFFFFFFFF00A9FFFF00ABFFFF00AAFFFF00ADFFFF00ACFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF +00B3FFFF00B2FFFF00B5FFFF00B4FFFF00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF +00BEFFFFFFFFFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00C8FFFFFFFF00C7FFFF00CAFFFF00C900CBFFFFFFFFFFFF00CDFFFF00CCFFFF00CFFFFF00CEFFFF +00D300D200D100D000D600D5FFFF00D400D8FFFF00D7FFFFFFFFFFFFFFFF00D900DCFFFF00DB00DAFFFF00DF00DE00DD +00E300E200E100E000E5FFFFFFFF00E4FFFF00E700E6FFFFFFFFFFFF00E8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E9FFFF +00EC00EBFFFF00EA00EDFFFFFFFFFFFF00F100F000EF00EEFFFFFFFFFFFF00F2FFFF00F3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00F500F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F8FFFF00F7FFFF00F9FFFFFFFFFFFF +00FAFFFFFFFFFFFFFFFFFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF05E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF010000FF00FE00FD01030102010105E90107010601050104010B010A01090108010F010E010D010C +01130112011101100117011601150114011B011A01190118FFFF011E011D011CFFFFFFFF0120011F012301220121FFFF +0125FFFF0124FFFF0127FFFF0126FFFF0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF +0133013201310130FFFFFFFF0134FFFF0136FFFFFFFF0135FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013A013901380137013E013D013C013B +014201410140013F0146014501440143014A014901480147014E014D014C014B015201510150014F0156015501540153 +015A015901580157015E015D015C015B016201610160015F01660165016401630168FFFF0167FFFF016AFFFF0169FFFF +016CFFFF016BFFFF016EFFFF016DFFFF0170FFFF016FFFFF0172FFFF0171FFFF0174FFFF0173FFFF0176FFFF0175FFFF +FFFFFFFF0177FFFFFFFFFFFFFFFFFFFF0178FFFFFFFFFFFF017AFFFF0179FFFF017CFFFF017BFFFF017EFFFF017DFFFF +0180FFFF017FFFFF0182FFFF0181FFFF0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189FFFF +018CFFFF018BFFFF018EFFFF018DFFFF0190FFFF018FFFFF0192FFFF0191FFFFFFFF0193FFFFFFFFFFFF0195FFFF0194 +FFFF0197FFFF0196019A0199FFFF0198019CFFFF019BFFFF019EFFFF019DFFFF01A0FFFF019FFFFF01A2FFFF01A1FFFF +01A4FFFF01A3FFFF01A6FFFF01A5FFFF01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01ADFFFF +01B0FFFF01AFFFFF01B2FFFF01B1FFFF01B4FFFF01B3FFFF01B6FFFF01B5FFFF01B8FFFF01B7FFFF01BAFFFF01B9FFFF +01BCFFFF01BBFFFF01BEFFFF01BDFFFF01C0FFFF01BFFFFF01C2FFFF01C1FFFF01C4FFFF01C3FFFF01C6FFFF01C5FFFF +01C8FFFF01C7FFFF01CAFFFF01C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CD01CC01CBFFFF01D101D001CF01CE01D501D401D301D201D901D801D701D6 +01DD01DC01DB01DA01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA05D801F001EF01EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F401F301F201F101F801F701F601F501FC01FB01FA01F9020001FF01FE01FD02040203020202010208020702060205 +020C020B020A02090210020F020E020D02140213021202110218021702160215FFFF021B021A0219021E021D021CFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022202210220021FFFFFFFFF022402230228022702260225022C022B022A0229 +FFFF022EFFFF022DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022FFFFFFFFFFFFF0230FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFF0232FFFF0235FFFF0234FFFF +0237FFFF0236FFFF0239FFFF0238FFFF023BFFFF023AFFFF023DFFFF023CFFFF023FFFFF023EFFFF0241FFFF0240FFFF +0243FFFF0242FFFF0245FFFF0244FFFF0247FFFF0246FFFF0249FFFF0248FFFF024BFFFF024AFFFF024DFFFF024CFFFF +024FFFFF024EFFFF0251FFFF0250FFFF0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF +025BFFFF025AFFFF025DFFFF025CFFFF025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF +0267FFFF0266FFFF0269FFFF0268FFFF026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF +0273FFFF0272FFFF0275FFFF0274FFFF0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF05F005EE027CFFFF +027D05F605F405F2FFFFFFFFFFFFFFFF027FFFFF027EFFFF0281FFFF0280FFFF0283FFFF0282FFFF0285FFFF0284FFFF +0287FFFF0286FFFF0289FFFF0288FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF +0293FFFF0292FFFF0295FFFF0294FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF +029FFFFF029EFFFF02A1FFFF02A0FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF +02ABFFFF02AAFFFF02ADFFFF02ACFFFF02B102B002AF02AE02B502B402B302B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02B902B802B702B6FFFFFFFF02BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BF02BE02BD02BC02C302C202C102C0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C702C602C502C402CB02CA02C902C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02CF02CE02CD02CCFFFFFFFF02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D305FA02D205F802D5060002D405FD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D902D802D702D602DD02DC02DB02DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E102E002DF02DE02E502E402E302E202E902E802E702E6FFFFFFFF02EB02EA0627062506230621062F062D062B0629 +0637063506330631063F063D063B06390647064506430641064F064D064B06490657065506530651065F065D065B0659 +0667066506630661066F066D066B06690677067506730671067F067D067B06790681068D0305030406990603FFFF068F +FFFFFFFFFFFFFFFFFFFF0307FFFF068306850691FFFFFFFF069C0605FFFF0693FFFFFFFFFFFFFFFFFFFFFFFFFFFF0687 +060A0607030A0309060F060DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06150612030C030B061C061A030D0618 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06890695FFFFFFFF069F061FFFFF0697FFFFFFFFFFFFFFFFFFFFFFFFFFFF068B +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03130312031103100317031603150314031B031A03190318031F031E031D031CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0320 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03240323032203210328032703260325032C032B032A03290330032F032E032D03340333033203310338033703360335 +FFFFFFFF033A0339FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +033E033D033C033B034203410340033F0346034503440343034A034903480347034E034D034C034B035203510350034F +0356035503540353035A035903580357035E035D035C035B036203610360035F0366036503640363036A036903680367 +FFFFFFFF036BFFFFFFFF036D036CFFFFFFFF036FFFFF036EFFFFFFFFFFFF03700371FFFFFFFFFFFFFFFF0372FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0374FFFF0373FFFF0376FFFF0375FFFF0378FFFF0377FFFF037AFFFF0379FFFF +037CFFFF037BFFFF037EFFFF037DFFFF0380FFFF037FFFFF0382FFFF0381FFFF0384FFFF0383FFFF0386FFFF0385FFFF +0388FFFF0387FFFF038AFFFF0389FFFF038CFFFF038BFFFF038EFFFF038DFFFF0390FFFF038FFFFF0392FFFF0391FFFF +0394FFFF0393FFFF0396FFFF0395FFFF0398FFFF0397FFFF039AFFFF0399FFFF039CFFFF039BFFFF039EFFFF039DFFFF +03A0FFFF039FFFFF03A2FFFF03A1FFFF03A4FFFF03A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A6FFFF03A5 +03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AB03AA03A903A803AF03AE03AD03AC +03B303B203B103B003B703B603B503B403BB03BA03B903B803BF03BE03BD03BC03C303C203C103C003C703C603C503C4 +03CB03CA03C903C803CEFFFF03CD03CCFFFFFFFFFFFFFFFFFFFFFFFF03CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D1FFFF03D0FFFF03D3FFFF03D2FFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF +03D9FFFF03D8FFFF03DBFFFF03DAFFFF03DDFFFF03DCFFFF03DFFFFF03DEFFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF +03E5FFFF03E4FFFFFFFFFFFF03E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03E8FFFF03E7FFFF03EAFFFF03E9FFFF03ECFFFF03EBFFFF03EEFFFF03EDFFFF03F0FFFF03EFFFFF03F2FFFF03F1FFFF +03F4FFFF03F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03F5FFFFFFFFFFFF03F7FFFF03F6FFFF03F9FFFF03F8FFFF03FBFFFF03FAFFFF03FCFFFFFFFFFFFF03FEFFFF03FDFFFF +0400FFFF03FFFFFF0402FFFF0401FFFF0404FFFF0403FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF +040CFFFF040BFFFF040EFFFF040DFFFF0410FFFF040FFFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFF +0418FFFF0417FFFF041AFFFF0419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041BFFFFFFFF041DFFFFFFFF041C +041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425 +0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF +FFFF0439FFFF0438FFFFFFFF043AFFFFFFFFFFFF043BFFFF043CFFFFFFFFFFFF043EFFFF043DFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04440443044204410448044704460445044C044B044A04490450044F044E044D +04540453045204510458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465 +046C046B046A04690470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D +04840483048204810488048704860485048C048B048A04890490048F048E048D05CE05CC05CA05C8FFFF05D605D405D1 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DAFFFFFFFFFFFF05E205E005DE05DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049304920491FFFF0497049604950494049B049A04990498049F049E049D049C +04A304A204A104A004A704A604A504A4FFFF04AA04A904A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04AE04AD04AC04AB04B204B104B004AF +04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C304CA04C904C804C7 +04CE04CD04CC04CB04D204D104D004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D604D504D404D304DA04D904D804D704DE04DD04DC04DB04E204E104E004DF +04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F3FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04F7FFFFFFFFFFFF +04FB04FA04F904F804FF04FE04FD04FC0502FFFF050105000506050505040503050A050905080507050E050D050C050B +0511FFFF0510050F05150514051305120518FFFF05170516FFFFFFFFFFFF0519051D051C051B051A05210520051F051E +05250524052305220529052805270526052D052C052B052A05310530052F052E05350534053305320539053805370536 +053D053C053B053A05410540053F053E05450544054305420549054805470546FFFF054C054B054AFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0550054F054E054D05540553055205510558055705560555055C055B055A0559 +0560055F055E055DFFFFFFFF05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0566056505640563056A056905680567 +056E056D056C056B057205710570056F0576057505740573057A057905780577057E057D057C057B058205810580057F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0586058505840583058A058905880587 +058E058D058C058B059205910590058F0596059505940593059A059905980597059E059D059C059B05A205A105A0059F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A3FFFFFFFF05A805A705A605A505AC05AB05AA05A905B005AF05AE05AD +05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C1FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10240 bytes +enum toLowerIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000000F00", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000200000001000000060005000400030000000000080007000B000A00090000 +000F000E000D000C00000012001100100000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001400130000000000000000000000000000000000000000001600150000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000017000000000000000000000000001B001A00190018001F001E001D001C00000000000000000000002200210020 +000000000000000000000000000000000024002300000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000280027002600250000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002A00290000002E002D002C002B00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000002F0000000000000000000000000000000000000000000000000000000000000030 +000000000000000000000000000000000000000000000000000000000000000000330032000000310000003500340000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000360000000000000000003700000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003900000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000003A0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000200010000FFFF0006000500040003000A000900080007000E000D000C000B001200110010000F0016001500140013 +FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001D001C001B001A00210020001F001E +00250024002300220029002800270026002D002C002B002AFFFF0030002F002E003400330032003105B4003700360035 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFF0038FFFF003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003E +FFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004A +FFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF05B5FFFF0053FFFF00520055FFFF0054FFFF0057FFFF0056FFFF +0059FFFF0058FFFF005BFFFF005AFFFFFFFF005C05C4FFFFFFFF005EFFFF005DFFFF0060FFFF005FFFFF0062FFFF0061 +FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006D +FFFF0070FFFF006FFFFF0072FFFF00710075FFFF00740073FFFFFFFF0076FFFFFFFF00780077FFFF007B007AFFFF0079 +007E007D007CFFFF0080007FFFFFFFFF0083FFFF0082008100860085FFFF0084FFFFFFFFFFFF0087008AFFFF00890088 +FFFF008CFFFF008B008F008EFFFF008DFFFFFFFF0090FFFF00930092FFFF0091009600950094FFFF0098FFFF0097FFFF +FFFFFFFFFFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFF009DFFFF009C009B00A0009FFFFF009E00A2FFFF00A1FFFF +00A4FFFF00A3FFFF00A6FFFF00A5FFFF00A8FFFF00A7FFFFFFFF00A9FFFFFFFFFFFF00ABFFFF00AAFFFF00ADFFFF00AC +FFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B300B205C700B600B5FFFF00B4FFFF00B8FFFF00B7FFFF00BAFFFF00B9 +FFFF00BCFFFF00BBFFFF00BEFFFF00BDFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5 +FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFF00CCFFFF00CBFFFF00CEFFFF00CDFFFF00D0FFFF00CFFFFF00D2FFFF00D1 +FFFF00D4FFFF00D3FFFFFFFFFFFFFFFF00D600D5FFFFFFFFFFFF00D800D7FFFF00DAFFFF00D9FFFFFFFF00DD00DC00DB +FFFF00DFFFFF00DEFFFF00E1FFFF00E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E3FFFF00E2FFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00E6FFFFFFFFFFFF00E900E800E700EC00EBFFFF00EA00EF00EE00ED05C500F300F200F100F0 +00F700F600F500F400FB00FA00F900F800FEFFFF00FD00FC01020101010000FF0106010501040103FFFFFFFFFFFFFFFF +FFFFFFFFFFFF05C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0109FFFF0108FFFF010BFFFF010A +FFFF010DFFFF010CFFFF010FFFFF010EFFFF0111FFFF0110FFFF0113FFFF0112FFFFFFFFFFFFFFFF0115FFFFFFFF0114 +FFFF01170116FFFF011A01190118FFFF011E011D011C011B012201210120011F0126012501240123012A012901280127 +012E012D012C012B013201310130012F0136013501340133013A013901380137013E013D013C013B014201410140013F +0146014501440143014A014901480147FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF014CFFFF014BFFFF014EFFFF014DFFFF0150FFFF014FFFFF0152FFFF0151 +FFFF0154FFFF0153FFFF0156FFFF0155FFFF0158FFFF0157FFFF015AFFFF0159FFFFFFFFFFFF015BFFFFFFFFFFFFFFFF +FFFF015CFFFFFFFFFFFF015EFFFF015DFFFF0160FFFF015FFFFF0162FFFF0161FFFF0164FFFF0163FFFF0166FFFF0165 +FFFF0168FFFF0167FFFF016AFFFF0169FFFF016CFFFF016BFFFF016EFFFF016DFFFF0170FFFF016FFFFF0172FFFF0171 +FFFF0174FFFF0173FFFF0176FFFF01750179FFFF01780177017BFFFF017AFFFF017DFFFF017CFFFFFFFFFFFF017EFFFF +FFFF0180FFFF017FFFFF0182FFFF0181FFFF0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189 +FFFF018CFFFF018BFFFF018EFFFF018DFFFF0190FFFF018FFFFF0192FFFF0191FFFF0194FFFF0193FFFF0196FFFF0195 +FFFF0198FFFF0197FFFF019AFFFF0199FFFF019CFFFF019BFFFF019EFFFF019DFFFF01A0FFFF019FFFFF01A2FFFF01A1 +FFFF01A4FFFF01A3FFFF01A6FFFF01A5FFFF01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01AD +01B101B001AFFFFF01B501B401B301B201B901B801B701B601BD01BC01BB01BA01C101C001BF01BE01C501C401C301C2 +01C901C801C701C601CD01CC01CB01CA01D101D001CF01CEFFFF01D401D301D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D801D701D601D501DC01DB01DA01D901E001DF01DE01DD01E401E301E201E1 +01E801E701E601E501EC01EB01EA01E901F001EF01EE01ED01F401F301F201F101F801F701F601F501FBFFFF01FA01F9 +FFFFFFFFFFFFFFFFFFFFFFFF01FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020001FF01FE01FD0204020302020201 +0208020702060205020C020B020A02090210020F020E020D02140213021202110218021702160215021C021B021A0219 +0220021F021E021D02240223022202210228022702260225022C022B022A02290230022F022E022D0234023302320231 +0238023702360235023C023B023A02390240023F023E023D02440243024202410248024702460245024C024B024A0249 +0250024F024E024DFFFFFFFF02520251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0253FFFFFFFFFFFFFFFFFFFF0257025602550254025B025A02590258025F025E025D025C0263026202610260 +0267026602650264026B026A02690268026F026E026D026C02730272027102700277027602750274027B027A02790278 +FFFF027E027D027C02810280027FFFFFFFFF0283FFFF0282FFFF0285FFFF0284FFFF0287FFFF0286FFFF0289FFFF0288 +FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF0293FFFF0292FFFF0295FFFF0294 +FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF029FFFFF029EFFFF02A1FFFF02A0 +FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02AC +FFFF02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B3FFFF02B2FFFF02B5FFFF02B4FFFF02B7FFFF02B6FFFF02B9FFFF02B8 +FFFF02BBFFFF02BAFFFF02BDFFFF02BCFFFF02BFFFFF02BEFFFF02C1FFFF02C0FFFF02C3FFFF02C2FFFF02C5FFFF02C4 +FFFF02C7FFFF02C6FFFF02C9FFFF02C8FFFF02CBFFFF02CA05C905C8FFFF02CCFFFF05CC05CB05CAFFFF02CDFFFFFFFF +FFFF02CFFFFF02CEFFFF02D1FFFF02D0FFFF02D3FFFF02D2FFFF02D5FFFF02D4FFFF02D7FFFF02D6FFFF02D9FFFF02D8 +FFFF02DBFFFF02DAFFFF02DDFFFF02DCFFFF02DFFFFF02DEFFFF02E1FFFF02E0FFFF02E3FFFF02E2FFFF02E5FFFF02E4 +FFFF02E7FFFF02E6FFFF02E9FFFF02E8FFFF02EBFFFF02EAFFFF02EDFFFF02ECFFFF02EFFFFF02EEFFFF02F1FFFF02F0 +FFFF02F3FFFF02F2FFFF02F5FFFF02F4FFFF02F7FFFF02F6FFFF02F9FFFF02F8FFFF02FBFFFF02FAFFFF02FDFFFF02FC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0301030002FF02FE0305030403030302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0309030803070306FFFFFFFF030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030F030E030D030C0313031203110310 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0317031603150314031B031A03190318FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +031F031E031D031CFFFFFFFF03210320FFFF05CEFFFF05CDFFFF05D0FFFF05CF0323FFFF0322FFFF0325FFFF0324FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0329032803270326032D032C032B032AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05E005DF05DE05DD05E405E305E205E105E805E705E605E505EC05EB05EA05E9 +05F005EF05EE05ED05F405F305F205F105F805F705F605F505FC05FB05FA05F9060005FF05FE05FD0604060306020601 +0608060706060605060C060B060A0609060D0613FFFFFFFF061905D1FFFF06140349034803470346FFFFFFFFFFFF060E +060F0615FFFFFFFF061A05D2FFFF0616034E034D034C034BFFFFFFFFFFFF061005D405D3FFFFFFFF05D605D5FFFFFFFF +0353035203510350FFFFFFFFFFFFFFFF05D805D7FFFFFFFF05DB05DAFFFF05D90357035603550354FFFFFFFFFFFF0358 +06110617FFFFFFFF061B05DCFFFF0618035C035B035A0359FFFFFFFFFFFF0612FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0361FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03650364036303620369036803670366 +036D036C036B036A03710370036F036EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0372FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03740373FFFFFFFF +0378037703760375037C037B037A03790380037F037E037D03840383038203810388038703860385038C038B038A0389 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0390038F038E038D03940393039203910398039703960395039C039B039A039903A0039F039E039D03A403A303A203A1 +03A803A703A603A503AC03AB03AA03A903B003AF03AE03AD03B403B303B203B103B803B703B603B503BC03BB03BA03B9 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03BF03BEFFFF03BD03C1FFFFFFFF03C003C3FFFF03C2FFFF03C603C503C4FFFFFFFF03C8FFFF03C7FFFFFFFF03C9FFFF +FFFFFFFFFFFFFFFF03CB03CAFFFFFFFFFFFF03CDFFFF03CCFFFF03CFFFFF03CEFFFF03D1FFFF03D0FFFF03D3FFFF03D2 +FFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF03D9FFFF03D8FFFF03DBFFFF03DAFFFF03DDFFFF03DCFFFF03DFFFFF03DE +FFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF03E5FFFF03E4FFFF03E7FFFF03E6FFFF03E9FFFF03E8FFFF03EBFFFF03EA +FFFF03EDFFFF03ECFFFF03EFFFFF03EEFFFF03F1FFFF03F0FFFF03F3FFFF03F2FFFF03F5FFFF03F4FFFF03F7FFFF03F6 +FFFF03F9FFFF03F8FFFF03FBFFFF03FAFFFF03FDFFFF03FCFFFFFFFFFFFFFFFF03FEFFFFFFFFFFFFFFFFFFFF03FFFFFF +FFFF0400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0402FFFF0401FFFF0404FFFF0403 +FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF040CFFFF040BFFFF040EFFFF040DFFFF0410FFFF040F +FFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFFFFFFFFFF0417FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0419FFFF0418FFFF041BFFFF041AFFFF041DFFFF041CFFFF041FFFFF041E +FFFF0421FFFF0420FFFF0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFFFFFF0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042B +FFFF042DFFFFFFFFFFFF042FFFFF042EFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436 +FFFF0439FFFF0438FFFF043BFFFF043AFFFF043DFFFF043CFFFF043FFFFF043EFFFF0441FFFF0440FFFF0443FFFF0442 +FFFF0445FFFF0444FFFF0447FFFF0446FFFF0449FFFF0448FFFF044BFFFF044AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF04520454FFFFFFFFFFFFFFFFFFFF0455FFFF +FFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045BFFFF045EFFFF045DFFFF0460FFFF045F +04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046BFFFF046EFFFF046DFFFF0470FFFF046F +FFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFFFFFFFFFF0479FFFFFFFFFFFF047AFFFF047BFFFFFFFF +FFFF047DFFFF047CFFFFFFFFFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BA05B905B805B7FFFF05BD05BC05BB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05BFFFFFFFFFFFFF05C305C205C105C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048204810480FFFF0486048504840483 +048A048904880487048E048D048C048B049204910490048F0496049504940493FFFF049904980497FFFFFFFFFFFFFFFF +049D049C049B049A04A104A0049F049E04A504A404A304A204A904A804A704A604AD04AC04AB04AA04B104B004AF04AE +04B504B404B304B204B904B804B704B604BD04BC04BB04BA04C104C004BF04BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C504C404C304C204C904C804C704C6 +04CD04CC04CB04CA04D104D004CF04CE04D504D404D304D204D904D804D704D604DD04DC04DB04DA04E104E004DF04DE +04E504E404E304E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04E904E804E704E604ED04EC04EB04EAFFFF04F004EF04EE04F404F304F204F104F804F704F604F504FC04FB04FA04F9 +FFFF04FF04FE04FD0503050205010500FFFF050605050504FFFFFFFF05080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF050C050B050A05090510050F050E050D05140513051205110518051705160515 +051C051B051A05190520051F051E051D05240523052205210528052705260525052C052B052A05290530052F052E052D +05340533053205310538053705360535FFFF053B053A0539FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053F053E053D053C0543054205410540 +0547054605450544054B054A05490548054F054E054D054CFFFFFFFF05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05550554055305520559055805570556055D055C055B055A05610560055F055E05650564056305620569056805670566 +056D056C056B056A05710570056F056E05750574057305720579057805770576057D057C057B057A05810580057F057E +05850584058305820589058805870586058D058C058B058A05910590058F058EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +05950594059305920599059805970596059D059C059B059A05A105A0059F059E05A505A405A305A205A905A805A705A6 +05AD05AC05AB05AA05B105B005AF05AEFFFFFFFF05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10752 bytes +enum toTitleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000001000", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001500000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000017000000000000001900180000001D001C001B001A00210020001F001E00000000000000000000002300220000 +000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000280027002600250000000000000029 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002B002A0000002F002E002D002C00000000000000000000000000000000 +000000000000000000000031003000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000330000 +000000000000000000000000000000000000000000000000000000000000000000360000003500340000003700000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00380000000000000000003A003900000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003C00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000003E003D0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000200010000FFFF0006000500040003000A000900080007000E000D000C000B +001200110010000F0016001500140013FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05C9FFFFFFFFFFFF001E001D001C001B002200210020001F +0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036 +003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF +0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF +0053FFFF005205CB0055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B +005EFFFF05E8005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF +006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF +FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D +FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF +FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF +FFFFFFFFFFFFFFFF009200910090008F0096009500940093FFFF0098FFFF0097FFFF009AFFFF0099FFFF009CFFFF009B +FFFF009EFFFF009D00A1FFFF00A0009F00A3FFFF00A2FFFF00A5FFFF00A4FFFF00A7FFFF00A6FFFF00A9FFFF00A8FFFF +00AC00AB00AA05F0FFFFFFFF00ADFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B3FFFF00B2FFFF00B5FFFF00B4FFFF +00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF00BFFFFF00BEFFFF00C1FFFF00C0FFFF +00C2FFFFFFFFFFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00CCFFFFFFFF00CBFFFF00CEFFFF00CD00CFFFFFFFFFFFFF00D1FFFF00D0FFFF00D3FFFF00D2FFFF +00D700D600D500D400DA00D9FFFF00D800DCFFFF00DBFFFFFFFFFFFFFFFF00DD00E0FFFF00DF00DEFFFF00E300E200E1 +00E700E600E500E400E9FFFFFFFF00E8FFFF00EB00EAFFFFFFFFFFFF00ECFFFFFFFFFFFFFFFFFFFFFFFFFFFF00EDFFFF +00F000EFFFFF00EE00F1FFFFFFFFFFFF00F500F400F300F2FFFFFFFFFFFF00F6FFFF00F7FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00F900F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FAFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FCFFFF00FBFFFF00FDFFFFFFFFFFFF +00FEFFFFFFFFFFFFFFFFFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF05EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF010401030102010101070106010505ED010B010A01090108010F010E010D010C0113011201110110 +0117011601150114011B011A01190118011F011E011D011CFFFF012201210120FFFFFFFF01240123012701260125FFFF +0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF0131FFFF0130FFFF0133FFFF0132FFFF +0137013601350134FFFFFFFF0138FFFF013AFFFFFFFF0139FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013E013D013C013B014201410140013F +0146014501440143014A014901480147014E014D014C014B015201510150014F0156015501540153015A015901580157 +015E015D015C015B016201610160015F0166016501640163016A016901680167016CFFFF016BFFFF016EFFFF016DFFFF +0170FFFF016FFFFF0172FFFF0171FFFF0174FFFF0173FFFF0176FFFF0175FFFF0178FFFF0177FFFF017AFFFF0179FFFF +FFFFFFFF017BFFFFFFFFFFFFFFFFFFFF017CFFFFFFFFFFFF017EFFFF017DFFFF0180FFFF017FFFFF0182FFFF0181FFFF +0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189FFFF018CFFFF018BFFFF018EFFFF018DFFFF +0190FFFF018FFFFF0192FFFF0191FFFF0194FFFF0193FFFF0196FFFF0195FFFFFFFF0197FFFFFFFFFFFF0199FFFF0198 +FFFF019BFFFF019A019E019DFFFF019C01A0FFFF019FFFFF01A2FFFF01A1FFFF01A4FFFF01A3FFFF01A6FFFF01A5FFFF +01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01ADFFFF01B0FFFF01AFFFFF01B2FFFF01B1FFFF +01B4FFFF01B3FFFF01B6FFFF01B5FFFF01B8FFFF01B7FFFF01BAFFFF01B9FFFF01BCFFFF01BBFFFF01BEFFFF01BDFFFF +01C0FFFF01BFFFFF01C2FFFF01C1FFFF01C4FFFF01C3FFFF01C6FFFF01C5FFFF01C8FFFF01C7FFFF01CAFFFF01C9FFFF +01CCFFFF01CBFFFF01CEFFFF01CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D101D001CFFFFF01D501D401D301D201D901D801D701D601DD01DC01DB01DA +01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA01F101F001EF01EE05DC01F401F301F2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F801F701F601F501FC01FB01FA01F9020001FF01FE01FD02040203020202010208020702060205020C020B020A0209 +0210020F020E020D02140213021202110218021702160215021C021B021A0219FFFF021F021E021D022202210220FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0226022502240223FFFFFFFF02280227022C022B022A02290230022F022E022D +FFFF0232FFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFFFFFFFFFF0234FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0235FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0237FFFF0236FFFF0239FFFF0238FFFF +023BFFFF023AFFFF023DFFFF023CFFFF023FFFFF023EFFFF0241FFFF0240FFFF0243FFFF0242FFFF0245FFFF0244FFFF +0247FFFF0246FFFF0249FFFF0248FFFF024BFFFF024AFFFF024DFFFF024CFFFF024FFFFF024EFFFF0251FFFF0250FFFF +0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF025BFFFF025AFFFF025DFFFF025CFFFF +025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF0267FFFF0266FFFF0269FFFF0268FFFF +026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF0273FFFF0272FFFF0275FFFF0274FFFF +0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF027DFFFF027CFFFF027FFFFF027EFFFF05F405F20280FFFF +028105FA05F805F6FFFFFFFFFFFFFFFF0283FFFF0282FFFF0285FFFF0284FFFF0287FFFF0286FFFF0289FFFF0288FFFF +028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF0293FFFF0292FFFF0295FFFF0294FFFF +0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF029FFFFF029EFFFF02A1FFFF02A0FFFF +02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02ACFFFF +02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B502B402B302B202B902B802B702B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02BD02BC02BB02BAFFFFFFFF02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C302C202C102C002C702C602C502C4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02CB02CA02C902C802CF02CE02CD02CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02D302D202D102D0FFFFFFFF02D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D705FE02D605FC02D9060402D80601 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DD02DC02DB02DA02E102E002DF02DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E502E402E302E202E902E802E702E602ED02EC02EB02EAFFFFFFFF02EF02EE0628062706260625062C062B062A0629 +0630062F062E062D06340633063206310638063706360635063C063B063A06390640063F063E063D0644064306420641 +0648064706460645064C064B064A06490650064F064E064D06540653065206510655065B0309030806670607FFFF065D +FFFFFFFFFFFFFFFFFFFF030BFFFF06560657065FFFFFFFFF066A0609FFFF0661FFFFFFFFFFFFFFFFFFFFFFFFFFFF0658 +060E060B030E030D06130611FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF061906160310030F0620061E0311061C +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06590663FFFFFFFF066D0623FFFF0665FFFFFFFFFFFFFFFFFFFFFFFFFFFF065A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0317031603150314031B031A03190318031F031E031D031C0323032203210320FFFFFFFFFFFFFFFFFFFFFFFFFFFF0324 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0328032703260325032C032B032A03290330032F032E032D03340333033203310338033703360335033C033B033A0339 +FFFFFFFF033E033DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +034203410340033F0346034503440343034A034903480347034E034D034C034B035203510350034F0356035503540353 +035A035903580357035E035D035C035B036203610360035F0366036503640363036A036903680367036E036D036C036B +FFFFFFFF036FFFFFFFFF03710370FFFFFFFF0373FFFF0372FFFFFFFFFFFF03740375FFFFFFFFFFFFFFFF0376FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0378FFFF0377FFFF037AFFFF0379FFFF037CFFFF037BFFFF037EFFFF037DFFFF +0380FFFF037FFFFF0382FFFF0381FFFF0384FFFF0383FFFF0386FFFF0385FFFF0388FFFF0387FFFF038AFFFF0389FFFF +038CFFFF038BFFFF038EFFFF038DFFFF0390FFFF038FFFFF0392FFFF0391FFFF0394FFFF0393FFFF0396FFFF0395FFFF +0398FFFF0397FFFF039AFFFF0399FFFF039CFFFF039BFFFF039EFFFF039DFFFF03A0FFFF039FFFFF03A2FFFF03A1FFFF +03A4FFFF03A3FFFF03A6FFFF03A5FFFF03A8FFFF03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AAFFFF03A9 +03ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AF03AE03AD03AC03B303B203B103B0 +03B703B603B503B403BB03BA03B903B803BF03BE03BD03BC03C303C203C103C003C703C603C503C403CB03CA03C903C8 +03CF03CE03CD03CC03D2FFFF03D103D0FFFFFFFFFFFFFFFFFFFFFFFF03D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF03D9FFFF03D8FFFF03DBFFFF03DAFFFF +03DDFFFF03DCFFFF03DFFFFF03DEFFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF03E5FFFF03E4FFFF03E7FFFF03E6FFFF +03E9FFFF03E8FFFFFFFFFFFF03EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03ECFFFF03EBFFFF03EEFFFF03EDFFFF03F0FFFF03EFFFFF03F2FFFF03F1FFFF03F4FFFF03F3FFFF03F6FFFF03F5FFFF +03F8FFFF03F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03F9FFFFFFFFFFFF03FBFFFF03FAFFFF03FDFFFF03FCFFFF03FFFFFF03FEFFFF0400FFFFFFFFFFFF0402FFFF0401FFFF +0404FFFF0403FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF040CFFFF040BFFFF040EFFFF040DFFFF +0410FFFF040FFFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFF0418FFFF0417FFFF041AFFFF0419FFFF +041CFFFF041BFFFF041EFFFF041DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041FFFFFFFFF0421FFFFFFFF0420 +0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429 +042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF +FFFF043DFFFF043CFFFFFFFF043EFFFFFFFFFFFF043FFFFF0440FFFFFFFFFFFF0442FFFF0441FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0448044704460445044C044B044A04490450044F044E044D0454045304520451 +0458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465046C046B046A0469 +0470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D0484048304820481 +0488048704860485048C048B048A04890490048F048E048D049404930492049105D205D005CE05CCFFFF05DA05D805D5 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05DEFFFFFFFFFFFF05E605E405E205E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF049704960495FFFF049B049A04990498049F049E049D049C04A304A204A104A0 +04A704A604A504A404AB04AA04A904A8FFFF04AE04AD04ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04B204B104B004AF04B604B504B404B3 +04BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C304CA04C904C804C704CE04CD04CC04CB +04D204D104D004CF04D604D504D404D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DA04D904D804D704DE04DD04DC04DB04E204E104E004DF04E604E504E404E3 +04EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F304FA04F904F804F7FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04FBFFFFFFFFFFFF +04FF04FE04FD04FC05030502050105000506FFFF05050504050A050905080507050E050D050C050B051205110510050F +0515FFFF051405130519051805170516051CFFFF051B051AFFFFFFFFFFFF051D05210520051F051E0525052405230522 +0529052805270526052D052C052B052A05310530052F052E05350534053305320539053805370536053D053C053B053A +05410540053F053E05450544054305420549054805470546054D054C054B054AFFFF0550054F054EFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05540553055205510558055705560555055C055B055A05590560055F055E055D +0564056305620561FFFFFFFF05660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF056A056905680567056E056D056C056B +057205710570056F0576057505740573057A057905780577057E057D057C057B058205810580057F0586058505840583 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF058A058905880587058E058D058C058B +059205910590058F0596059505940593059A059905980597059E059D059C059B05A205A105A0059F05A605A505A405A3 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A7FFFFFFFF05AC05AB05AA05A905B005AF05AE05AD05B405B305B205B1 +05B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C105C805C705C605C5FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10624 bytes +enum toUpperSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000000FC0", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001500000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000017000000000000001900180000001D001C001B001A00210020001F001E00000000000000000000002300220000 +000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000280027002600250000000000000029 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002B002A0000002F002E002D002C00000000000000000000000000000000 +000000000000000000000031003000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000 +000000000000000000000000000000000000000000000000000000000000000000350000003400330000003600000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003700000000000000000039003800000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003B00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000200010000FFFF0006000500040003000A000900080007000E000D000C000B +001200110010000F0016001500140013FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001E001D001C001B002200210020001F +0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036 +003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF +0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF +0053FFFF0052FFFF0055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B +005EFFFFFFFF005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF +006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF +FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D +FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF +FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF +FFFFFFFFFFFFFFFFFFFF0090008FFFFF0093FFFF00920091FFFF0095FFFF0094FFFF0097FFFF0096FFFF0099FFFF0098 +FFFF009BFFFF009A009EFFFF009D009C00A0FFFF009FFFFF00A2FFFF00A1FFFF00A4FFFF00A3FFFF00A6FFFF00A5FFFF +00A800A7FFFFFFFFFFFFFFFF00A9FFFF00ABFFFF00AAFFFF00ADFFFF00ACFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF +00B3FFFF00B2FFFF00B5FFFF00B4FFFF00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF +00BEFFFFFFFFFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00C8FFFFFFFF00C7FFFF00CAFFFF00C900CBFFFFFFFFFFFF00CDFFFF00CCFFFF00CFFFFF00CEFFFF +00D300D200D100D000D600D5FFFF00D400D8FFFF00D7FFFFFFFFFFFFFFFF00D900DCFFFF00DB00DAFFFF00DF00DE00DD +00E300E200E100E000E5FFFFFFFF00E4FFFF00E700E6FFFFFFFFFFFF00E8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00E9FFFF +00EC00EBFFFF00EA00EDFFFFFFFFFFFF00F100F000EF00EEFFFFFFFFFFFF00F2FFFF00F3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00F500F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00F8FFFF00F7FFFF00F9FFFFFFFFFFFF +00FAFFFFFFFFFFFFFFFFFFFF00FC00FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF010000FF00FE00FD010301020101FFFF0107010601050104010B010A01090108010F010E010D010C +01130112011101100117011601150114011B011A01190118FFFF011E011D011CFFFFFFFF0120011F012301220121FFFF +0125FFFF0124FFFF0127FFFF0126FFFF0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF +0133013201310130FFFFFFFF0134FFFF0136FFFFFFFF0135FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013A013901380137013E013D013C013B +014201410140013F0146014501440143014A014901480147014E014D014C014B015201510150014F0156015501540153 +015A015901580157015E015D015C015B016201610160015F01660165016401630168FFFF0167FFFF016AFFFF0169FFFF +016CFFFF016BFFFF016EFFFF016DFFFF0170FFFF016FFFFF0172FFFF0171FFFF0174FFFF0173FFFF0176FFFF0175FFFF +FFFFFFFF0177FFFFFFFFFFFFFFFFFFFF0178FFFFFFFFFFFF017AFFFF0179FFFF017CFFFF017BFFFF017EFFFF017DFFFF +0180FFFF017FFFFF0182FFFF0181FFFF0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189FFFF +018CFFFF018BFFFF018EFFFF018DFFFF0190FFFF018FFFFF0192FFFF0191FFFFFFFF0193FFFFFFFFFFFF0195FFFF0194 +FFFF0197FFFF0196019A0199FFFF0198019CFFFF019BFFFF019EFFFF019DFFFF01A0FFFF019FFFFF01A2FFFF01A1FFFF +01A4FFFF01A3FFFF01A6FFFF01A5FFFF01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01ADFFFF +01B0FFFF01AFFFFF01B2FFFF01B1FFFF01B4FFFF01B3FFFF01B6FFFF01B5FFFF01B8FFFF01B7FFFF01BAFFFF01B9FFFF +01BCFFFF01BBFFFF01BEFFFF01BDFFFF01C0FFFF01BFFFFF01C2FFFF01C1FFFF01C4FFFF01C3FFFF01C6FFFF01C5FFFF +01C8FFFF01C7FFFF01CAFFFF01C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01CD01CC01CBFFFF01D101D001CF01CE01D501D401D301D201D901D801D701D6 +01DD01DC01DB01DA01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EAFFFF01F001EF01EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F401F301F201F101F801F701F601F501FC01FB01FA01F9020001FF01FE01FD02040203020202010208020702060205 +020C020B020A02090210020F020E020D02140213021202110218021702160215FFFF021B021A0219021E021D021CFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022202210220021FFFFFFFFF022402230228022702260225022C022B022A0229 +FFFF022EFFFF022DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF022FFFFFFFFFFFFF0230FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFF0232FFFF0235FFFF0234FFFF +0237FFFF0236FFFF0239FFFF0238FFFF023BFFFF023AFFFF023DFFFF023CFFFF023FFFFF023EFFFF0241FFFF0240FFFF +0243FFFF0242FFFF0245FFFF0244FFFF0247FFFF0246FFFF0249FFFF0248FFFF024BFFFF024AFFFF024DFFFF024CFFFF +024FFFFF024EFFFF0251FFFF0250FFFF0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF +025BFFFF025AFFFF025DFFFF025CFFFF025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF +0267FFFF0266FFFF0269FFFF0268FFFF026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF +0273FFFF0272FFFF0275FFFF0274FFFF0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFFFFFFFFFF027CFFFF +027DFFFFFFFFFFFFFFFFFFFFFFFFFFFF027FFFFF027EFFFF0281FFFF0280FFFF0283FFFF0282FFFF0285FFFF0284FFFF +0287FFFF0286FFFF0289FFFF0288FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF +0293FFFF0292FFFF0295FFFF0294FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF +029FFFFF029EFFFF02A1FFFF02A0FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF +02ABFFFF02AAFFFF02ADFFFF02ACFFFF02B102B002AF02AE02B502B402B302B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02B902B802B702B6FFFFFFFF02BB02BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02BF02BE02BD02BC02C302C202C102C0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C702C602C502C402CB02CA02C902C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02CF02CE02CD02CCFFFFFFFF02D102D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D3FFFF02D2FFFF02D5FFFF02D4FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D902D802D702D602DD02DC02DB02DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E102E002DF02DE02E502E402E302E202E902E802E702E6FFFFFFFF02EB02EA02EF02EE02ED02EC02F302F202F102F0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02F702F602F502F402FB02FA02F902F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02FF02FE02FD02FC0303030203010300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0306FFFF03050304FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0307FFFFFFFF0308FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF030A0309FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030C030BFFFFFFFF030DFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03130312031103100317031603150314031B031A03190318031F031E031D031CFFFFFFFFFFFFFFFFFFFFFFFFFFFF0320 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03240323032203210328032703260325032C032B032A03290330032F032E032D03340333033203310338033703360335 +FFFFFFFF033A0339FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +033E033D033C033B034203410340033F0346034503440343034A034903480347034E034D034C034B035203510350034F +0356035503540353035A035903580357035E035D035C035B036203610360035F0366036503640363036A036903680367 +FFFFFFFF036BFFFFFFFF036D036CFFFFFFFF036FFFFF036EFFFFFFFFFFFF03700371FFFFFFFFFFFFFFFF0372FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0374FFFF0373FFFF0376FFFF0375FFFF0378FFFF0377FFFF037AFFFF0379FFFF +037CFFFF037BFFFF037EFFFF037DFFFF0380FFFF037FFFFF0382FFFF0381FFFF0384FFFF0383FFFF0386FFFF0385FFFF +0388FFFF0387FFFF038AFFFF0389FFFF038CFFFF038BFFFF038EFFFF038DFFFF0390FFFF038FFFFF0392FFFF0391FFFF +0394FFFF0393FFFF0396FFFF0395FFFF0398FFFF0397FFFF039AFFFF0399FFFF039CFFFF039BFFFF039EFFFF039DFFFF +03A0FFFF039FFFFF03A2FFFF03A1FFFF03A4FFFF03A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03A6FFFF03A5 +03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AB03AA03A903A803AF03AE03AD03AC +03B303B203B103B003B703B603B503B403BB03BA03B903B803BF03BE03BD03BC03C303C203C103C003C703C603C503C4 +03CB03CA03C903C803CEFFFF03CD03CCFFFFFFFFFFFFFFFFFFFFFFFF03CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D1FFFF03D0FFFF03D3FFFF03D2FFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF +03D9FFFF03D8FFFF03DBFFFF03DAFFFF03DDFFFF03DCFFFF03DFFFFF03DEFFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF +03E5FFFF03E4FFFFFFFFFFFF03E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03E8FFFF03E7FFFF03EAFFFF03E9FFFF03ECFFFF03EBFFFF03EEFFFF03EDFFFF03F0FFFF03EFFFFF03F2FFFF03F1FFFF +03F4FFFF03F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03F5FFFFFFFFFFFF03F7FFFF03F6FFFF03F9FFFF03F8FFFF03FBFFFF03FAFFFF03FCFFFFFFFFFFFF03FEFFFF03FDFFFF +0400FFFF03FFFFFF0402FFFF0401FFFF0404FFFF0403FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF +040CFFFF040BFFFF040EFFFF040DFFFF0410FFFF040FFFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFF +0418FFFF0417FFFF041AFFFF0419FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041BFFFFFFFF041DFFFFFFFF041C +041FFFFF041EFFFF0421FFFF0420FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04220424FFFF0423FFFF0426FFFFFFFF0425 +0428FFFF0427FFFF042AFFFF0429FFFF042CFFFF042BFFFF042EFFFF042DFFFFFFFFFFFF042FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0431FFFF0430FFFF0433FFFF0432FFFF0435FFFF0434FFFF0437FFFF0436FFFFFFFFFFFFFFFFFFFF +FFFF0439FFFF0438FFFFFFFF043AFFFFFFFFFFFF043BFFFF043CFFFFFFFFFFFF043EFFFF043DFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF043FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04440443044204410448044704460445044C044B044A04490450044F044E044D +04540453045204510458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465 +046C046B046A04690470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D +04840483048204810488048704860485048C048B048A04890490048F048E048D049304920491FFFF0497049604950494 +049B049A04990498049F049E049D049C04A304A204A104A004A704A604A504A4FFFF04AA04A904A8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04AE04AD04AC04AB04B204B104B004AF04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF +04C604C504C404C304CA04C904C804C704CE04CD04CC04CB04D204D104D004CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04D604D504D404D304DA04D904D804D7 +04DE04DD04DC04DB04E204E104E004DF04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF +04F604F504F404F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF04F7FFFFFFFFFFFF04FB04FA04F904F804FF04FE04FD04FC0502FFFF050105000506050505040503 +050A050905080507050E050D050C050B0511FFFF0510050F05150514051305120518FFFF05170516FFFFFFFFFFFF0519 +051D051C051B051A05210520051F051E05250524052305220529052805270526052D052C052B052A05310530052F052E +05350534053305320539053805370536053D053C053B053A05410540053F053E05450544054305420549054805470546 +FFFF054C054B054AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0550054F054E054D0554055305520551 +0558055705560555055C055B055A05590560055F055E055DFFFFFFFF05620561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0566056505640563056A056905680567056E056D056C056B057205710570056F0576057505740573057A057905780577 +057E057D057C057B058205810580057FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0586058505840583058A058905880587058E058D058C058B059205910590058F0596059505940593059A059905980597 +059E059D059C059B05A205A105A0059FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A405A3FFFFFFFF05A805A705A605A5 +05AC05AB05AA05A905B005AF05AE05AD05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD +05C405C305C205C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//9984 bytes +enum toLowerSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000000E80", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000200000001000000060005000400030000000000080007000B000A00090000 +000F000E000D000C00000000001100100000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001300120000000000000000000000000000000000000000001500140000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000016000000000000000000000000001A001900180017001E001D001C001B0000000000000000000000210020001F +000000000000000000000000000000000023002200000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000270026002500240000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002900280000002D002C002B002A00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E +0000000000000000000000000000000000000000000000000000000000000000003100300000002F0000003300320000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000340000000000000000003500000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003700000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000200010000FFFF0006000500040003000A000900080007000E000D000C000B001200110010000F0016001500140013 +FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001D001C001B001A00210020001F001E +00250024002300220029002800270026002D002C002B002AFFFF0030002F002E0034003300320031FFFF003700360035 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0039FFFF0038FFFF003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003E +FFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004A +FFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF0053FFFF00520055FFFF0054FFFF0057FFFF0056FFFF +0059FFFF0058FFFF005BFFFF005AFFFFFFFF005CFFFFFFFFFFFF005EFFFF005DFFFF0060FFFF005FFFFF0062FFFF0061 +FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006D +FFFF0070FFFF006FFFFF0072FFFF00710075FFFF00740073FFFFFFFF0076FFFFFFFF00780077FFFF007B007AFFFF0079 +007E007D007CFFFF0080007FFFFFFFFF0083FFFF0082008100860085FFFF0084FFFFFFFFFFFF0087008AFFFF00890088 +FFFF008CFFFF008B008F008EFFFF008DFFFFFFFF0090FFFF00930092FFFF0091009600950094FFFF0098FFFF0097FFFF +FFFFFFFFFFFF0099FFFFFFFFFFFF009AFFFFFFFFFFFFFFFF009DFFFF009C009B00A0009FFFFF009E00A2FFFF00A1FFFF +00A4FFFF00A3FFFF00A6FFFF00A5FFFF00A8FFFF00A7FFFFFFFF00A9FFFFFFFFFFFF00ABFFFF00AAFFFF00ADFFFF00AC +FFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B300B2FFFF00B600B5FFFF00B4FFFF00B8FFFF00B7FFFF00BAFFFF00B9 +FFFF00BCFFFF00BBFFFF00BEFFFF00BDFFFF00C0FFFF00BFFFFF00C2FFFF00C1FFFF00C4FFFF00C3FFFF00C6FFFF00C5 +FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFF00CCFFFF00CBFFFF00CEFFFF00CDFFFF00D0FFFF00CFFFFF00D2FFFF00D1 +FFFF00D4FFFF00D3FFFFFFFFFFFFFFFF00D600D5FFFFFFFFFFFF00D800D7FFFF00DAFFFF00D9FFFFFFFF00DD00DC00DB +FFFF00DFFFFF00DEFFFF00E1FFFF00E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00E3FFFF00E2FFFF00E4FFFFFFFFFFFFFFFFFFFFFFFF00E5FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00E6FFFFFFFFFFFF00E900E800E700EC00EBFFFF00EA00EF00EE00EDFFFF00F300F200F100F0 +00F700F600F500F400FB00FA00F900F800FEFFFF00FD00FC01020101010000FF0106010501040103FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0107FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0109FFFF0108FFFF010BFFFF010A +FFFF010DFFFF010CFFFF010FFFFF010EFFFF0111FFFF0110FFFF0113FFFF0112FFFFFFFFFFFFFFFF0115FFFFFFFF0114 +FFFF01170116FFFF011A01190118FFFF011E011D011C011B012201210120011F0126012501240123012A012901280127 +012E012D012C012B013201310130012F0136013501340133013A013901380137013E013D013C013B014201410140013F +0146014501440143014A014901480147FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF014CFFFF014BFFFF014EFFFF014DFFFF0150FFFF014FFFFF0152FFFF0151 +FFFF0154FFFF0153FFFF0156FFFF0155FFFF0158FFFF0157FFFF015AFFFF0159FFFFFFFFFFFF015BFFFFFFFFFFFFFFFF +FFFF015CFFFFFFFFFFFF015EFFFF015DFFFF0160FFFF015FFFFF0162FFFF0161FFFF0164FFFF0163FFFF0166FFFF0165 +FFFF0168FFFF0167FFFF016AFFFF0169FFFF016CFFFF016BFFFF016EFFFF016DFFFF0170FFFF016FFFFF0172FFFF0171 +FFFF0174FFFF0173FFFF0176FFFF01750179FFFF01780177017BFFFF017AFFFF017DFFFF017CFFFFFFFFFFFF017EFFFF +FFFF0180FFFF017FFFFF0182FFFF0181FFFF0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189 +FFFF018CFFFF018BFFFF018EFFFF018DFFFF0190FFFF018FFFFF0192FFFF0191FFFF0194FFFF0193FFFF0196FFFF0195 +FFFF0198FFFF0197FFFF019AFFFF0199FFFF019CFFFF019BFFFF019EFFFF019DFFFF01A0FFFF019FFFFF01A2FFFF01A1 +FFFF01A4FFFF01A3FFFF01A6FFFF01A5FFFF01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01AD +01B101B001AFFFFF01B501B401B301B201B901B801B701B601BD01BC01BB01BA01C101C001BF01BE01C501C401C301C2 +01C901C801C701C601CD01CC01CB01CA01D101D001CF01CEFFFF01D401D301D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D801D701D601D501DC01DB01DA01D9 +01E001DF01DE01DD01E401E301E201E101E801E701E601E501EC01EB01EA01E901F001EF01EE01ED01F401F301F201F1 +01F801F701F601F501FBFFFF01FA01F9FFFFFFFFFFFFFFFFFFFFFFFF01FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +020001FF01FE01FD02040203020202010208020702060205020C020B020A02090210020F020E020D0214021302120211 +0218021702160215021C021B021A02190220021F021E021D02240223022202210228022702260225022C022B022A0229 +0230022F022E022D02340233023202310238023702360235023C023B023A02390240023F023E023D0244024302420241 +0248024702460245024C024B024A02490250024F024E024DFFFFFFFF02520251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0253FFFFFFFFFFFFFFFFFFFF0257025602550254025B025A02590258 +025F025E025D025C02630262026102600267026602650264026B026A02690268026F026E026D026C0273027202710270 +0277027602750274027B027A02790278FFFF027E027D027C02810280027FFFFFFFFF0283FFFF0282FFFF0285FFFF0284 +FFFF0287FFFF0286FFFF0289FFFF0288FFFF028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290 +FFFF0293FFFF0292FFFF0295FFFF0294FFFF0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029C +FFFF029FFFFF029EFFFF02A1FFFF02A0FFFF02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8 +FFFF02ABFFFF02AAFFFF02ADFFFF02ACFFFF02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B3FFFF02B2FFFF02B5FFFF02B4 +FFFF02B7FFFF02B6FFFF02B9FFFF02B8FFFF02BBFFFF02BAFFFF02BDFFFF02BCFFFF02BFFFFF02BEFFFF02C1FFFF02C0 +FFFF02C3FFFF02C2FFFF02C5FFFF02C4FFFF02C7FFFF02C6FFFF02C9FFFF02C8FFFF02CBFFFF02CAFFFFFFFFFFFF02CC +FFFFFFFFFFFFFFFFFFFF02CDFFFFFFFFFFFF02CFFFFF02CEFFFF02D1FFFF02D0FFFF02D3FFFF02D2FFFF02D5FFFF02D4 +FFFF02D7FFFF02D6FFFF02D9FFFF02D8FFFF02DBFFFF02DAFFFF02DDFFFF02DCFFFF02DFFFFF02DEFFFF02E1FFFF02E0 +FFFF02E3FFFF02E2FFFF02E5FFFF02E4FFFF02E7FFFF02E6FFFF02E9FFFF02E8FFFF02EBFFFF02EAFFFF02EDFFFF02EC +FFFF02EFFFFF02EEFFFF02F1FFFF02F0FFFF02F3FFFF02F2FFFF02F5FFFF02F4FFFF02F7FFFF02F6FFFF02F9FFFF02F8 +FFFF02FBFFFF02FAFFFF02FDFFFF02FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0301030002FF02FE0305030403030302 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0309030803070306FFFFFFFF030B030AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +030F030E030D030C0313031203110310FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0317031603150314031B031A03190318 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF031F031E031D031CFFFFFFFF03210320FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0323FFFF0322FFFF0325FFFF0324FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0329032803270326032D032C032B032A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03310330032F032E0335033403330332FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0339033803370336033D033C033B033A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03410340033F033E0345034403430342FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0349034803470346FFFFFFFFFFFF034AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF034E034D034C034BFFFFFFFFFFFF034F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0353035203510350FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0357035603550354FFFFFFFFFFFF0358FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035C035B035A0359FFFFFFFFFFFF035D +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF035EFFFFFFFF0360035FFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0361FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03650364036303620369036803670366036D036C036B036A03710370036F036EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0372FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF03740373FFFFFFFF0378037703760375037C037B037A03790380037F037E037D0384038303820381 +0388038703860385038C038B038A0389FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0390038F038E038D03940393039203910398039703960395039C039B039A0399 +03A0039F039E039D03A403A303A203A103A803A703A603A503AC03AB03AA03A903B003AF03AE03AD03B403B303B203B1 +03B803B703B603B503BC03BB03BA03B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03BF03BEFFFF03BD03C1FFFFFFFF03C003C3FFFF03C2FFFF03C603C503C4FFFF +FFFF03C8FFFF03C7FFFFFFFF03C9FFFFFFFFFFFFFFFFFFFF03CB03CAFFFFFFFFFFFF03CDFFFF03CCFFFF03CFFFFF03CE +FFFF03D1FFFF03D0FFFF03D3FFFF03D2FFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF03D9FFFF03D8FFFF03DBFFFF03DA +FFFF03DDFFFF03DCFFFF03DFFFFF03DEFFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF03E5FFFF03E4FFFF03E7FFFF03E6 +FFFF03E9FFFF03E8FFFF03EBFFFF03EAFFFF03EDFFFF03ECFFFF03EFFFFF03EEFFFF03F1FFFF03F0FFFF03F3FFFF03F2 +FFFF03F5FFFF03F4FFFF03F7FFFF03F6FFFF03F9FFFF03F8FFFF03FBFFFF03FAFFFF03FDFFFF03FCFFFFFFFFFFFFFFFF +03FEFFFFFFFFFFFFFFFFFFFF03FFFFFFFFFF0400FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0402FFFF0401FFFF0404FFFF0403FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF040CFFFF040B +FFFF040EFFFF040DFFFF0410FFFF040FFFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFFFFFFFFFF0417 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0419FFFF0418FFFF041BFFFF041A +FFFF041DFFFF041CFFFF041FFFFF041EFFFF0421FFFF0420FFFF0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0426FFFFFFFFFFFF0428FFFF0427 +FFFF042AFFFF0429FFFF042CFFFF042BFFFF042DFFFFFFFFFFFF042FFFFF042EFFFF0431FFFF0430FFFF0433FFFF0432 +FFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFF043DFFFF043CFFFF043FFFFF043E +FFFF0441FFFF0440FFFF0443FFFF0442FFFF0445FFFF0444FFFF0447FFFF0446FFFF0449FFFF0448FFFF044BFFFF044A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF044DFFFF044CFFFFFFFF044F044EFFFFFFFF0451FFFF0450FFFF0453FFFF0452 +0454FFFFFFFFFFFFFFFFFFFF0455FFFFFFFF0457FFFF0456FFFF0458FFFFFFFFFFFF045AFFFF0459FFFF045CFFFF045B +FFFF045EFFFF045DFFFF0460FFFF045F04630462FFFF0461FFFF046604650464046A046904680467FFFF046CFFFF046B +FFFF046EFFFF046DFFFF0470FFFF046FFFFF0472FFFF047104760475047404730478FFFF0477FFFFFFFFFFFFFFFF0479 +FFFFFFFFFFFF047AFFFF047BFFFFFFFFFFFF047DFFFF047CFFFFFFFFFFFF047EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF047FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF048204810480FFFF0486048504840483048A048904880487048E048D048C048B +049204910490048F0496049504940493FFFF049904980497FFFFFFFFFFFFFFFF049D049C049B049A04A104A0049F049E +04A504A404A304A204A904A804A704A604AD04AC04AB04AA04B104B004AF04AE04B504B404B304B204B904B804B704B6 +04BD04BC04BB04BA04C104C004BF04BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04C504C404C304C204C904C804C704C604CD04CC04CB04CA04D104D004CF04CE +04D504D404D304D204D904D804D704D604DD04DC04DB04DA04E104E004DF04DE04E504E404E304E2FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04E904E804E704E604ED04EC04EB04EA +FFFF04F004EF04EE04F404F304F204F104F804F704F604F504FC04FB04FA04F9FFFF04FF04FE04FD0503050205010500 +FFFF050605050504FFFFFFFF05080507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +050C050B050A05090510050F050E050D05140513051205110518051705160515051C051B051A05190520051F051E051D +05240523052205210528052705260525052C052B052A05290530052F052E052D05340533053205310538053705360535 +FFFF053B053A0539FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF053F053E053D053C05430542054105400547054605450544054B054A05490548 +054F054E054D054CFFFFFFFF05510550FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05550554055305520559055805570556 +055D055C055B055A05610560055F055E05650564056305620569056805670566056D056C056B056A05710570056F056E +05750574057305720579057805770576057D057C057B057A05810580057F057E05850584058305820589058805870586 +058D058C058B058A05910590058F058EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05950594059305920599059805970596 +059D059C059B059A05A105A0059F059E05A505A405A305A205A905A805A705A605AD05AC05AB05AA05B105B005AF05AE +FFFFFFFF05B305B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +//10624 bytes +enum toTitleSimpleIndexTrieEntries = TrieEntry!(ushort, 8, 7, 6)(x" +000000000000000000000000000000200000000000000140", +x" +000000000000010000000000000004800000000000000FC0", +x" +040203020202010007020202060202050202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202 +02020202020202020202020202020202000300020001000000070006000500040000000A00090008000D000C000B0000 +00110010000F000E00000014001300120000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001500000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000017000000000000001900180000001D001C001B001A00210020001F001E00000000000000000000002300220000 +000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000280027002600250000000000000029 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000002B002A0000002F002E002D002C00000000000000000000000000000000 +000000000000000000000031003000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000 +000000000000000000000000000000000000000000000000000000000000000000350000003400330000003600000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003700000000000000000039003800000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +003A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000003B00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000003D003C0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000200010000FFFF0006000500040003000A000900080007000E000D000C000B +001200110010000F0016001500140013FFFF001900180017FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001AFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF001E001D001C001B002200210020001F +0026002500240023002A002900280027002E002D002C002BFFFF00310030002F00350034003300320039003800370036 +003BFFFF003AFFFF003DFFFF003CFFFF003FFFFF003EFFFF0041FFFF0040FFFF0043FFFF0042FFFF0045FFFF0044FFFF +0047FFFF0046FFFF0049FFFF0048FFFF004BFFFF004AFFFF004DFFFF004CFFFF004FFFFF004EFFFF0051FFFF0050FFFF +0053FFFF0052FFFF0055FFFF0054FFFFFFFF0056FFFFFFFFFFFF0058FFFF0057FFFF005AFFFF0059FFFF005CFFFF005B +005EFFFFFFFF005D0060FFFF005FFFFF0062FFFF0061FFFF0064FFFF0063FFFF0066FFFF0065FFFF0068FFFF0067FFFF +006AFFFF0069FFFF006CFFFF006BFFFF006EFFFF006DFFFF0070FFFF006FFFFF0072FFFF0071FFFF0074FFFF0073FFFF +FFFF0075FFFFFFFF00780077FFFF0076007AFFFFFFFF0079FFFFFFFF007BFFFFFFFFFFFFFFFF007CFFFFFFFFFFFF007D +FFFF007EFFFFFFFFFFFFFFFF007FFFFF008200810080FFFFFFFF0083FFFFFFFF0085FFFF0084FFFFFFFFFFFF0086FFFF +FFFFFFFFFFFF0087FFFFFFFF0088FFFFFFFFFFFFFFFF0089FFFF008BFFFF008AFFFFFFFF008CFFFF008EFFFF008DFFFF +FFFFFFFFFFFFFFFF009200910090008F0096009500940093FFFF0098FFFF0097FFFF009AFFFF0099FFFF009CFFFF009B +FFFF009EFFFF009D00A1FFFF00A0009F00A3FFFF00A2FFFF00A5FFFF00A4FFFF00A7FFFF00A6FFFF00A9FFFF00A8FFFF +00AC00AB00AAFFFFFFFFFFFF00ADFFFF00AFFFFF00AEFFFF00B1FFFF00B0FFFF00B3FFFF00B2FFFF00B5FFFF00B4FFFF +00B7FFFF00B6FFFF00B9FFFF00B8FFFF00BBFFFF00BAFFFF00BDFFFF00BCFFFF00BFFFFF00BEFFFF00C1FFFF00C0FFFF +00C2FFFFFFFFFFFF00C4FFFF00C3FFFF00C6FFFF00C5FFFF00C8FFFF00C7FFFF00CAFFFF00C9FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF00CCFFFFFFFF00CBFFFF00CEFFFF00CD00CFFFFFFFFFFFFF00D1FFFF00D0FFFF00D3FFFF00D2FFFF +00D700D600D500D400DA00D9FFFF00D800DCFFFF00DBFFFFFFFFFFFFFFFF00DD00E0FFFF00DF00DEFFFF00E300E200E1 +00E700E600E500E400E9FFFFFFFF00E8FFFF00EB00EAFFFFFFFFFFFF00ECFFFFFFFFFFFFFFFFFFFFFFFFFFFF00EDFFFF +00F000EFFFFF00EE00F1FFFFFFFFFFFF00F500F400F300F2FFFFFFFFFFFF00F6FFFF00F7FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00F900F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FAFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FCFFFF00FBFFFF00FDFFFFFFFFFFFF +00FEFFFFFFFFFFFFFFFFFFFF010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0104010301020101010701060105FFFF010B010A01090108010F010E010D010C0113011201110110 +0117011601150114011B011A01190118011F011E011D011CFFFF012201210120FFFFFFFF01240123012701260125FFFF +0129FFFF0128FFFF012BFFFF012AFFFF012DFFFF012CFFFF012FFFFF012EFFFF0131FFFF0130FFFF0133FFFF0132FFFF +0137013601350134FFFFFFFF0138FFFF013AFFFFFFFF0139FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF013E013D013C013B014201410140013F +0146014501440143014A014901480147014E014D014C014B015201510150014F0156015501540153015A015901580157 +015E015D015C015B016201610160015F0166016501640163016A016901680167016CFFFF016BFFFF016EFFFF016DFFFF +0170FFFF016FFFFF0172FFFF0171FFFF0174FFFF0173FFFF0176FFFF0175FFFF0178FFFF0177FFFF017AFFFF0179FFFF +FFFFFFFF017BFFFFFFFFFFFFFFFFFFFF017CFFFFFFFFFFFF017EFFFF017DFFFF0180FFFF017FFFFF0182FFFF0181FFFF +0184FFFF0183FFFF0186FFFF0185FFFF0188FFFF0187FFFF018AFFFF0189FFFF018CFFFF018BFFFF018EFFFF018DFFFF +0190FFFF018FFFFF0192FFFF0191FFFF0194FFFF0193FFFF0196FFFF0195FFFFFFFF0197FFFFFFFFFFFF0199FFFF0198 +FFFF019BFFFF019A019E019DFFFF019C01A0FFFF019FFFFF01A2FFFF01A1FFFF01A4FFFF01A3FFFF01A6FFFF01A5FFFF +01A8FFFF01A7FFFF01AAFFFF01A9FFFF01ACFFFF01ABFFFF01AEFFFF01ADFFFF01B0FFFF01AFFFFF01B2FFFF01B1FFFF +01B4FFFF01B3FFFF01B6FFFF01B5FFFF01B8FFFF01B7FFFF01BAFFFF01B9FFFF01BCFFFF01BBFFFF01BEFFFF01BDFFFF +01C0FFFF01BFFFFF01C2FFFF01C1FFFF01C4FFFF01C3FFFF01C6FFFF01C5FFFF01C8FFFF01C7FFFF01CAFFFF01C9FFFF +01CCFFFF01CBFFFF01CEFFFF01CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01D101D001CFFFFF01D501D401D301D201D901D801D701D601DD01DC01DB01DA +01E101E001DF01DE01E501E401E301E201E901E801E701E601ED01EC01EB01EA01F101F001EF01EEFFFF01F401F301F2 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +01F801F701F601F501FC01FB01FA01F9020001FF01FE01FD02040203020202010208020702060205020C020B020A0209 +0210020F020E020D02140213021202110218021702160215021C021B021A0219FFFF021F021E021D022202210220FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0226022502240223FFFFFFFF02280227022C022B022A02290230022F022E022D +FFFF0232FFFF0231FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0233FFFFFFFFFFFF0234FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0235FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0237FFFF0236FFFF0239FFFF0238FFFF +023BFFFF023AFFFF023DFFFF023CFFFF023FFFFF023EFFFF0241FFFF0240FFFF0243FFFF0242FFFF0245FFFF0244FFFF +0247FFFF0246FFFF0249FFFF0248FFFF024BFFFF024AFFFF024DFFFF024CFFFF024FFFFF024EFFFF0251FFFF0250FFFF +0253FFFF0252FFFF0255FFFF0254FFFF0257FFFF0256FFFF0259FFFF0258FFFF025BFFFF025AFFFF025DFFFF025CFFFF +025FFFFF025EFFFF0261FFFF0260FFFF0263FFFF0262FFFF0265FFFF0264FFFF0267FFFF0266FFFF0269FFFF0268FFFF +026BFFFF026AFFFF026DFFFF026CFFFF026FFFFF026EFFFF0271FFFF0270FFFF0273FFFF0272FFFF0275FFFF0274FFFF +0277FFFF0276FFFF0279FFFF0278FFFF027BFFFF027AFFFF027DFFFF027CFFFF027FFFFF027EFFFFFFFFFFFF0280FFFF +0281FFFFFFFFFFFFFFFFFFFFFFFFFFFF0283FFFF0282FFFF0285FFFF0284FFFF0287FFFF0286FFFF0289FFFF0288FFFF +028BFFFF028AFFFF028DFFFF028CFFFF028FFFFF028EFFFF0291FFFF0290FFFF0293FFFF0292FFFF0295FFFF0294FFFF +0297FFFF0296FFFF0299FFFF0298FFFF029BFFFF029AFFFF029DFFFF029CFFFF029FFFFF029EFFFF02A1FFFF02A0FFFF +02A3FFFF02A2FFFF02A5FFFF02A4FFFF02A7FFFF02A6FFFF02A9FFFF02A8FFFF02ABFFFF02AAFFFF02ADFFFF02ACFFFF +02AFFFFF02AEFFFF02B1FFFF02B0FFFF02B502B402B302B202B902B802B702B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02BD02BC02BB02BAFFFFFFFF02BF02BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02C302C202C102C002C702C602C502C4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02CB02CA02C902C802CF02CE02CD02CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02D302D202D102D0FFFFFFFF02D502D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02D7FFFF02D6FFFF02D9FFFF02D8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02DD02DC02DB02DA02E102E002DF02DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +02E502E402E302E202E902E802E702E602ED02EC02EB02EAFFFFFFFF02EF02EE02F302F202F102F002F702F602F502F4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02FB02FA02F902F802FF02FE02FD02FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03030302030103000307030603050304FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030AFFFF03090308FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF030BFFFFFFFF030CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF030E030DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0310030FFFFFFFFF0311FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0312FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0317031603150314031B031A03190318031F031E031D031C0323032203210320FFFFFFFFFFFFFFFFFFFFFFFFFFFF0324 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0328032703260325032C032B032A03290330032F032E032D03340333033203310338033703360335033C033B033A0339 +FFFFFFFF033E033DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +034203410340033F0346034503440343034A034903480347034E034D034C034B035203510350034F0356035503540353 +035A035903580357035E035D035C035B036203610360035F0366036503640363036A036903680367036E036D036C036B +FFFFFFFF036FFFFFFFFF03710370FFFFFFFF0373FFFF0372FFFFFFFFFFFF03740375FFFFFFFFFFFFFFFF0376FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0378FFFF0377FFFF037AFFFF0379FFFF037CFFFF037BFFFF037EFFFF037DFFFF +0380FFFF037FFFFF0382FFFF0381FFFF0384FFFF0383FFFF0386FFFF0385FFFF0388FFFF0387FFFF038AFFFF0389FFFF +038CFFFF038BFFFF038EFFFF038DFFFF0390FFFF038FFFFF0392FFFF0391FFFF0394FFFF0393FFFF0396FFFF0395FFFF +0398FFFF0397FFFF039AFFFF0399FFFF039CFFFF039BFFFF039EFFFF039DFFFF03A0FFFF039FFFFF03A2FFFF03A1FFFF +03A4FFFF03A3FFFF03A6FFFF03A5FFFF03A8FFFF03A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AAFFFF03A9 +03ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03AF03AE03AD03AC03B303B203B103B0 +03B703B603B503B403BB03BA03B903B803BF03BE03BD03BC03C303C203C103C003C703C603C503C403CB03CA03C903C8 +03CF03CE03CD03CC03D2FFFF03D103D0FFFFFFFFFFFFFFFFFFFFFFFF03D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03D5FFFF03D4FFFF03D7FFFF03D6FFFF03D9FFFF03D8FFFF03DBFFFF03DAFFFF +03DDFFFF03DCFFFF03DFFFFF03DEFFFF03E1FFFF03E0FFFF03E3FFFF03E2FFFF03E5FFFF03E4FFFF03E7FFFF03E6FFFF +03E9FFFF03E8FFFFFFFFFFFF03EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03ECFFFF03EBFFFF03EEFFFF03EDFFFF03F0FFFF03EFFFFF03F2FFFF03F1FFFF03F4FFFF03F3FFFF03F6FFFF03F5FFFF +03F8FFFF03F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +03F9FFFFFFFFFFFF03FBFFFF03FAFFFF03FDFFFF03FCFFFF03FFFFFF03FEFFFF0400FFFFFFFFFFFF0402FFFF0401FFFF +0404FFFF0403FFFF0406FFFF0405FFFF0408FFFF0407FFFF040AFFFF0409FFFF040CFFFF040BFFFF040EFFFF040DFFFF +0410FFFF040FFFFF0412FFFF0411FFFF0414FFFF0413FFFF0416FFFF0415FFFF0418FFFF0417FFFF041AFFFF0419FFFF +041CFFFF041BFFFF041EFFFF041DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF041FFFFFFFFF0421FFFFFFFF0420 +0423FFFF0422FFFF0425FFFF0424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04260428FFFF0427FFFF042AFFFFFFFF0429 +042CFFFF042BFFFF042EFFFF042DFFFF0430FFFF042FFFFF0432FFFF0431FFFFFFFFFFFF0433FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0435FFFF0434FFFF0437FFFF0436FFFF0439FFFF0438FFFF043BFFFF043AFFFFFFFFFFFFFFFFFFFF +FFFF043DFFFF043CFFFFFFFF043EFFFFFFFFFFFF043FFFFF0440FFFFFFFFFFFF0442FFFF0441FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0443FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0448044704460445044C044B044A04490450044F044E044D0454045304520451 +0458045704560455045C045B045A04590460045F045E045D04640463046204610468046704660465046C046B046A0469 +0470046F046E046D04740473047204710478047704760475047C047B047A04790480047F047E047D0484048304820481 +0488048704860485048C048B048A04890490048F048E048D0494049304920491049704960495FFFF049B049A04990498 +049F049E049D049C04A304A204A104A004A704A604A504A404AB04AA04A904A8FFFF04AE04AD04ACFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +04B204B104B004AF04B604B504B404B304BA04B904B804B704BE04BD04BC04BB04C204C104C004BF04C604C504C404C3 +04CA04C904C804C704CE04CD04CC04CB04D204D104D004CF04D604D504D404D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04DA04D904D804D704DE04DD04DC04DB +04E204E104E004DF04E604E504E404E304EA04E904E804E704EE04ED04EC04EB04F204F104F004EF04F604F504F404F3 +04FA04F904F804F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF04FBFFFFFFFFFFFF04FF04FE04FD04FC05030502050105000506FFFF05050504050A050905080507 +050E050D050C050B051205110510050F0515FFFF051405130519051805170516051CFFFF051B051AFFFFFFFFFFFF051D +05210520051F051E05250524052305220529052805270526052D052C052B052A05310530052F052E0535053405330532 +0539053805370536053D053C053B053A05410540053F053E05450544054305420549054805470546054D054C054B054A +FFFF0550054F054EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05540553055205510558055705560555 +055C055B055A05590560055F055E055D0564056305620561FFFFFFFF05660565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +056A056905680567056E056D056C056B057205710570056F0576057505740573057A057905780577057E057D057C057B +058205810580057F0586058505840583FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +058A058905880587058E058D058C058B059205910590058F0596059505940593059A059905980597059E059D059C059B +05A205A105A0059F05A605A505A405A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05A805A7FFFFFFFF05AC05AB05AA05A9 +05B005AF05AE05AD05B405B305B205B105B805B705B605B505BC05BB05BA05B905C005BF05BE05BD05C405C305C205C1 +05C805C705C605C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +); +immutable(uint)[] toUpperTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C +0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058 +000000590000005A0000039C000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8 +000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4 +000000D5000000D6000000D8000000D9000000DA000000DB000000DC000000DD000000DE000001780000010000000102 +0000010400000106000001080000010A0000010C0000010E00000110000001120000011400000116000001180000011A +0000011C0000011E00000120000001220000012400000126000001280000012A0000012C0000012E0000004900000132 +0000013400000136000001390000013B0000013D0000013F000001410000014300000145000001470000014A0000014C +0000014E00000150000001520000015400000156000001580000015A0000015C0000015E000001600000016200000164 +00000166000001680000016A0000016C0000016E00000170000001720000017400000176000001790000017B0000017D +00000053000002430000018200000184000001870000018B00000191000001F6000001980000023D0000A7DC00000220 +000001A0000001A2000001A4000001A7000001AC000001AF000001B3000001B5000001B8000001BC000001F7000001C4 +000001C4000001C7000001C7000001CA000001CA000001CD000001CF000001D1000001D3000001D5000001D7000001D9 +000001DB0000018E000001DE000001E0000001E2000001E4000001E6000001E8000001EA000001EC000001EE000001F1 +000001F1000001F4000001F8000001FA000001FC000001FE00000200000002020000020400000206000002080000020A +0000020C0000020E00000210000002120000021400000216000002180000021A0000021C0000021E0000022200000224 +00000226000002280000022A0000022C0000022E00000230000002320000023B00002C7E00002C7F0000024100000246 +000002480000024A0000024C0000024E00002C6F00002C6D00002C700000018100000186000001890000018A0000018F +000001900000A7AB000001930000A7AC000001940000A7CB0000A78D0000A7AA00000197000001960000A7AE00002C62 +0000A7AD0000019C00002C6E0000019D0000019F00002C64000001A60000A7C5000001A90000A7B1000001AE00000244 +000001B1000001B200000245000001B70000A7B20000A7B000000399000003700000037200000376000003FD000003FE +000003FF0000038600000388000003890000038A00000391000003920000039300000394000003950000039600000397 +00000398000003990000039A0000039B0000039C0000039D0000039E0000039F000003A0000003A1000003A3000003A3 +000003A4000003A5000003A6000003A7000003A8000003A9000003AA000003AB0000038C0000038E0000038F00000392 +00000398000003A6000003A0000003CF000003D8000003DA000003DC000003DE000003E0000003E2000003E4000003E6 +000003E8000003EA000003EC000003EE0000039A000003A1000003F90000037F00000395000003F7000003FA00000410 +0000041100000412000004130000041400000415000004160000041700000418000004190000041A0000041B0000041C +0000041D0000041E0000041F000004200000042100000422000004230000042400000425000004260000042700000428 +000004290000042A0000042B0000042C0000042D0000042E0000042F0000040000000401000004020000040300000404 +00000405000004060000040700000408000004090000040A0000040B0000040C0000040D0000040E0000040F00000460 +000004620000046400000466000004680000046A0000046C0000046E0000047000000472000004740000047600000478 +0000047A0000047C0000047E000004800000048A0000048C0000048E0000049000000492000004940000049600000498 +0000049A0000049C0000049E000004A0000004A2000004A4000004A6000004A8000004AA000004AC000004AE000004B0 +000004B2000004B4000004B6000004B8000004BA000004BC000004BE000004C1000004C3000004C5000004C7000004C9 +000004CB000004CD000004C0000004D0000004D2000004D4000004D6000004D8000004DA000004DC000004DE000004E0 +000004E2000004E4000004E6000004E8000004EA000004EC000004EE000004F0000004F2000004F4000004F6000004F8 +000004FA000004FC000004FE00000500000005020000050400000506000005080000050A0000050C0000050E00000510 +000005120000051400000516000005180000051A0000051C0000051E0000052000000522000005240000052600000528 +0000052A0000052C0000052E000005310000053200000533000005340000053500000536000005370000053800000539 +0000053A0000053B0000053C0000053D0000053E0000053F000005400000054100000542000005430000054400000545 +000005460000054700000548000005490000054A0000054B0000054C0000054D0000054E0000054F0000055000000551 +000005520000055300000554000005550000055600001C9000001C9100001C9200001C9300001C9400001C9500001C96 +00001C9700001C9800001C9900001C9A00001C9B00001C9C00001C9D00001C9E00001C9F00001CA000001CA100001CA2 +00001CA300001CA400001CA500001CA600001CA700001CA800001CA900001CAA00001CAB00001CAC00001CAD00001CAE +00001CAF00001CB000001CB100001CB200001CB300001CB400001CB500001CB600001CB700001CB800001CB900001CBA +00001CBD00001CBE00001CBF000013F0000013F1000013F2000013F3000013F4000013F500000412000004140000041E +0000042100000422000004220000042A000004620000A64A00001C890000A77D00002C630000A7C600001E0000001E02 +00001E0400001E0600001E0800001E0A00001E0C00001E0E00001E1000001E1200001E1400001E1600001E1800001E1A +00001E1C00001E1E00001E2000001E2200001E2400001E2600001E2800001E2A00001E2C00001E2E00001E3000001E32 +00001E3400001E3600001E3800001E3A00001E3C00001E3E00001E4000001E4200001E4400001E4600001E4800001E4A +00001E4C00001E4E00001E5000001E5200001E5400001E5600001E5800001E5A00001E5C00001E5E00001E6000001E62 +00001E6400001E6600001E6800001E6A00001E6C00001E6E00001E7000001E7200001E7400001E7600001E7800001E7A +00001E7C00001E7E00001E8000001E8200001E8400001E8600001E8800001E8A00001E8C00001E8E00001E9000001E92 +00001E9400001E6000001EA000001EA200001EA400001EA600001EA800001EAA00001EAC00001EAE00001EB000001EB2 +00001EB400001EB600001EB800001EBA00001EBC00001EBE00001EC000001EC200001EC400001EC600001EC800001ECA +00001ECC00001ECE00001ED000001ED200001ED400001ED600001ED800001EDA00001EDC00001EDE00001EE000001EE2 +00001EE400001EE600001EE800001EEA00001EEC00001EEE00001EF000001EF200001EF400001EF600001EF800001EFA +00001EFC00001EFE00001F0800001F0900001F0A00001F0B00001F0C00001F0D00001F0E00001F0F00001F1800001F19 +00001F1A00001F1B00001F1C00001F1D00001F2800001F2900001F2A00001F2B00001F2C00001F2D00001F2E00001F2F +00001F3800001F3900001F3A00001F3B00001F3C00001F3D00001F3E00001F3F00001F4800001F4900001F4A00001F4B +00001F4C00001F4D00001F5900001F5B00001F5D00001F5F00001F6800001F6900001F6A00001F6B00001F6C00001F6D +00001F6E00001F6F00001FBA00001FBB00001FC800001FC900001FCA00001FCB00001FDA00001FDB00001FF800001FF9 +00001FEA00001FEB00001FFA00001FFB00001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F +00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA00001FAB +00001FAC00001FAD00001FAE00001FAF00001FB800001FB900001FBC0000039900001FCC00001FD800001FD900001FE8 +00001FE900001FEC00001FFC000021320000216000002161000021620000216300002164000021650000216600002167 +00002168000021690000216A0000216B0000216C0000216D0000216E0000216F00002183000024B6000024B7000024B8 +000024B9000024BA000024BB000024BC000024BD000024BE000024BF000024C0000024C1000024C2000024C3000024C4 +000024C5000024C6000024C7000024C8000024C9000024CA000024CB000024CC000024CD000024CE000024CF00002C00 +00002C0100002C0200002C0300002C0400002C0500002C0600002C0700002C0800002C0900002C0A00002C0B00002C0C +00002C0D00002C0E00002C0F00002C1000002C1100002C1200002C1300002C1400002C1500002C1600002C1700002C18 +00002C1900002C1A00002C1B00002C1C00002C1D00002C1E00002C1F00002C2000002C2100002C2200002C2300002C24 +00002C2500002C2600002C2700002C2800002C2900002C2A00002C2B00002C2C00002C2D00002C2E00002C2F00002C60 +0000023A0000023E00002C6700002C6900002C6B00002C7200002C7500002C8000002C8200002C8400002C8600002C88 +00002C8A00002C8C00002C8E00002C9000002C9200002C9400002C9600002C9800002C9A00002C9C00002C9E00002CA0 +00002CA200002CA400002CA600002CA800002CAA00002CAC00002CAE00002CB000002CB200002CB400002CB600002CB8 +00002CBA00002CBC00002CBE00002CC000002CC200002CC400002CC600002CC800002CCA00002CCC00002CCE00002CD0 +00002CD200002CD400002CD600002CD800002CDA00002CDC00002CDE00002CE000002CE200002CEB00002CED00002CF2 +000010A0000010A1000010A2000010A3000010A4000010A5000010A6000010A7000010A8000010A9000010AA000010AB +000010AC000010AD000010AE000010AF000010B0000010B1000010B2000010B3000010B4000010B5000010B6000010B7 +000010B8000010B9000010BA000010BB000010BC000010BD000010BE000010BF000010C0000010C1000010C2000010C3 +000010C4000010C5000010C7000010CD0000A6400000A6420000A6440000A6460000A6480000A64A0000A64C0000A64E +0000A6500000A6520000A6540000A6560000A6580000A65A0000A65C0000A65E0000A6600000A6620000A6640000A666 +0000A6680000A66A0000A66C0000A6800000A6820000A6840000A6860000A6880000A68A0000A68C0000A68E0000A690 +0000A6920000A6940000A6960000A6980000A69A0000A7220000A7240000A7260000A7280000A72A0000A72C0000A72E +0000A7320000A7340000A7360000A7380000A73A0000A73C0000A73E0000A7400000A7420000A7440000A7460000A748 +0000A74A0000A74C0000A74E0000A7500000A7520000A7540000A7560000A7580000A75A0000A75C0000A75E0000A760 +0000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A7790000A77B0000A77E0000A7800000A782 +0000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A7980000A79A0000A79C0000A79E0000A7A0 +0000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA0000A7BC0000A7BE0000A7C00000A7C2 +0000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F50000A7B3000013A0000013A1000013A2 +000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA000013AB000013AC000013AD000013AE +000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6000013B7000013B8000013B9000013BA +000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2000013C3000013C4000013C5000013C6 +000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE000013CF000013D0000013D1000013D2 +000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA000013DB000013DC000013DD000013DE +000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6000013E7000013E8000013E9000013EA +000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF230000FF240000FF250000FF260000FF27 +0000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F0000FF300000FF310000FF320000FF33 +0000FF340000FF350000FF360000FF370000FF380000FF390000FF3A0001040000010401000104020001040300010404 +00010405000104060001040700010408000104090001040A0001040B0001040C0001040D0001040E0001040F00010410 +0001041100010412000104130001041400010415000104160001041700010418000104190001041A0001041B0001041C +0001041D0001041E0001041F0001042000010421000104220001042300010424000104250001042600010427000104B0 +000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8000104B9000104BA000104BB000104BC +000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4000104C5000104C6000104C7000104C8 +000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0000104D1000104D2000104D300010570 +0001057100010572000105730001057400010575000105760001057700010578000105790001057A0001057C0001057D +0001057E0001057F00010580000105810001058200010583000105840001058500010586000105870001058800010589 +0001058A0001058C0001058D0001058E0001058F000105900001059100010592000105940001059500010C8000010C81 +00010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C8900010C8A00010C8B00010C8C00010C8D +00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C9500010C9600010C9700010C9800010C99 +00010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA100010CA200010CA300010CA400010CA5 +00010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD00010CAE00010CAF00010CB000010CB1 +00010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D5600010D5700010D5800010D5900010D5A +00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D6200010D6300010D6400010D65000118A0 +000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8000118A9000118AA000118AB000118AC +000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4000118B5000118B6000118B7000118B8 +000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E4000016E4100016E4200016E4300016E44 +00016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C00016E4D00016E4E00016E4F00016E50 +00016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E5800016E5900016E5A00016E5B00016E5C +00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E9040001E9050001E9060001E9070001E908 +0001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E9100001E9110001E9120001E9130001E914 +0001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C0001E91D0001E91E0001E91F0001E920 +0001E92102000053000000530000013002000046000000460200004600000049020000460000004C0300004600000046 +0000004903000046000000460000004C0200005300000054020000530000005402000535000005520200054400000546 +0200054400000535020005440000053B0200054E00000546020005440000053D020002BC0000004E0300039900000308 +00000301030003A500000308000003010200004A0000030C02000048000003310200005400000308020000570000030A +020000590000030A02000041000002BE020003A500000313030003A50000031300000300030003A50000031300000301 +030003A50000031300000342020003910000034202000397000003420300039900000308000003000300039900000308 +000003010200039900000342030003990000030800000342030003A50000030800000300030003A50000030800000301 +020003A100000313020003A500000342030003A50000030800000342020003A90000034202001F080000039902001F09 +0000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D0000039902001F0E0000039902001F0F +0000039902001F080000039902001F090000039902001F0A0000039902001F0B0000039902001F0C0000039902001F0D +0000039902001F0E0000039902001F0F0000039902001F280000039902001F290000039902001F2A0000039902001F2B +0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F0000039902001F280000039902001F29 +0000039902001F2A0000039902001F2B0000039902001F2C0000039902001F2D0000039902001F2E0000039902001F2F +0000039902001F680000039902001F690000039902001F6A0000039902001F6B0000039902001F6C0000039902001F6D +0000039902001F6E0000039902001F6F0000039902001F680000039902001F690000039902001F6A0000039902001F6B +0000039902001F6C0000039902001F6D0000039902001F6E0000039902001F6F00000399020003910000039902000391 +0000039902000397000003990200039700000399020003A900000399020003A90000039902001FBA0000039902000386 +0000039902001FCA00000399020003890000039902001FFA000003990200038F00000399030003910000034200000399 +030003970000034200000399030003A90000034200000399"; +return t; +} +immutable(uint)[] toLowerTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C +0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078 +000000790000007A000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9 +000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5 +000000F6000000F8000000F9000000FA000000FB000000FC000000FD000000FE00000101000001030000010500000107 +000001090000010B0000010D0000010F00000111000001130000011500000117000001190000011B0000011D0000011F +00000121000001230000012500000127000001290000012B0000012D0000012F00000069000001330000013500000137 +0000013A0000013C0000013E00000140000001420000014400000146000001480000014B0000014D0000014F00000151 +000001530000015500000157000001590000015B0000015D0000015F0000016100000163000001650000016700000169 +0000016B0000016D0000016F00000171000001730000017500000177000000FF0000017A0000017C0000017E00000253 +0000018300000185000002540000018800000256000002570000018C000001DD000002590000025B0000019200000260 +000002630000026900000268000001990000026F0000027200000275000001A1000001A3000001A500000280000001A8 +00000283000001AD00000288000001B00000028A0000028B000001B4000001B600000292000001B9000001BD000001C6 +000001C6000001C9000001C9000001CC000001CC000001CE000001D0000001D2000001D4000001D6000001D8000001DA +000001DC000001DF000001E1000001E3000001E5000001E7000001E9000001EB000001ED000001EF000001F3000001F3 +000001F500000195000001BF000001F9000001FB000001FD000001FF0000020100000203000002050000020700000209 +0000020B0000020D0000020F00000211000002130000021500000217000002190000021B0000021D0000021F0000019E +000002230000022500000227000002290000022B0000022D0000022F000002310000023300002C650000023C0000019A +00002C660000024200000180000002890000028C00000247000002490000024B0000024D0000024F0000037100000373 +00000377000003F3000003AC000003AD000003AE000003AF000003CC000003CD000003CE000003B1000003B2000003B3 +000003B4000003B5000003B6000003B7000003B8000003B9000003BA000003BB000003BC000003BD000003BE000003BF +000003C0000003C1000003C3000003C4000003C5000003C6000003C7000003C8000003C9000003CA000003CB000003D7 +000003D9000003DB000003DD000003DF000003E1000003E3000003E5000003E7000003E9000003EB000003ED000003EF +000003B8000003F8000003F2000003FB0000037B0000037C0000037D0000045000000451000004520000045300000454 +00000455000004560000045700000458000004590000045A0000045B0000045C0000045D0000045E0000045F00000430 +0000043100000432000004330000043400000435000004360000043700000438000004390000043A0000043B0000043C +0000043D0000043E0000043F000004400000044100000442000004430000044400000445000004460000044700000448 +000004490000044A0000044B0000044C0000044D0000044E0000044F0000046100000463000004650000046700000469 +0000046B0000046D0000046F00000471000004730000047500000477000004790000047B0000047D0000047F00000481 +0000048B0000048D0000048F00000491000004930000049500000497000004990000049B0000049D0000049F000004A1 +000004A3000004A5000004A7000004A9000004AB000004AD000004AF000004B1000004B3000004B5000004B7000004B9 +000004BB000004BD000004BF000004CF000004C2000004C4000004C6000004C8000004CA000004CC000004CE000004D1 +000004D3000004D5000004D7000004D9000004DB000004DD000004DF000004E1000004E3000004E5000004E7000004E9 +000004EB000004ED000004EF000004F1000004F3000004F5000004F7000004F9000004FB000004FD000004FF00000501 +000005030000050500000507000005090000050B0000050D0000050F0000051100000513000005150000051700000519 +0000051B0000051D0000051F00000521000005230000052500000527000005290000052B0000052D0000052F00000561 +00000562000005630000056400000565000005660000056700000568000005690000056A0000056B0000056C0000056D +0000056E0000056F00000570000005710000057200000573000005740000057500000576000005770000057800000579 +0000057A0000057B0000057C0000057D0000057E0000057F000005800000058100000582000005830000058400000585 +0000058600002D0000002D0100002D0200002D0300002D0400002D0500002D0600002D0700002D0800002D0900002D0A +00002D0B00002D0C00002D0D00002D0E00002D0F00002D1000002D1100002D1200002D1300002D1400002D1500002D16 +00002D1700002D1800002D1900002D1A00002D1B00002D1C00002D1D00002D1E00002D1F00002D2000002D2100002D22 +00002D2300002D2400002D2500002D2700002D2D0000AB700000AB710000AB720000AB730000AB740000AB750000AB76 +0000AB770000AB780000AB790000AB7A0000AB7B0000AB7C0000AB7D0000AB7E0000AB7F0000AB800000AB810000AB82 +0000AB830000AB840000AB850000AB860000AB870000AB880000AB890000AB8A0000AB8B0000AB8C0000AB8D0000AB8E +0000AB8F0000AB900000AB910000AB920000AB930000AB940000AB950000AB960000AB970000AB980000AB990000AB9A +0000AB9B0000AB9C0000AB9D0000AB9E0000AB9F0000ABA00000ABA10000ABA20000ABA30000ABA40000ABA50000ABA6 +0000ABA70000ABA80000ABA90000ABAA0000ABAB0000ABAC0000ABAD0000ABAE0000ABAF0000ABB00000ABB10000ABB2 +0000ABB30000ABB40000ABB50000ABB60000ABB70000ABB80000ABB90000ABBA0000ABBB0000ABBC0000ABBD0000ABBE +0000ABBF000013F8000013F9000013FA000013FB000013FC000013FD00001C8A000010D0000010D1000010D2000010D3 +000010D4000010D5000010D6000010D7000010D8000010D9000010DA000010DB000010DC000010DD000010DE000010DF +000010E0000010E1000010E2000010E3000010E4000010E5000010E6000010E7000010E8000010E9000010EA000010EB +000010EC000010ED000010EE000010EF000010F0000010F1000010F2000010F3000010F4000010F5000010F6000010F7 +000010F8000010F9000010FA000010FD000010FE000010FF00001E0100001E0300001E0500001E0700001E0900001E0B +00001E0D00001E0F00001E1100001E1300001E1500001E1700001E1900001E1B00001E1D00001E1F00001E2100001E23 +00001E2500001E2700001E2900001E2B00001E2D00001E2F00001E3100001E3300001E3500001E3700001E3900001E3B +00001E3D00001E3F00001E4100001E4300001E4500001E4700001E4900001E4B00001E4D00001E4F00001E5100001E53 +00001E5500001E5700001E5900001E5B00001E5D00001E5F00001E6100001E6300001E6500001E6700001E6900001E6B +00001E6D00001E6F00001E7100001E7300001E7500001E7700001E7900001E7B00001E7D00001E7F00001E8100001E83 +00001E8500001E8700001E8900001E8B00001E8D00001E8F00001E9100001E9300001E95000000DF00001EA100001EA3 +00001EA500001EA700001EA900001EAB00001EAD00001EAF00001EB100001EB300001EB500001EB700001EB900001EBB +00001EBD00001EBF00001EC100001EC300001EC500001EC700001EC900001ECB00001ECD00001ECF00001ED100001ED3 +00001ED500001ED700001ED900001EDB00001EDD00001EDF00001EE100001EE300001EE500001EE700001EE900001EEB +00001EED00001EEF00001EF100001EF300001EF500001EF700001EF900001EFB00001EFD00001EFF00001F0000001F01 +00001F0200001F0300001F0400001F0500001F0600001F0700001F1000001F1100001F1200001F1300001F1400001F15 +00001F2000001F2100001F2200001F2300001F2400001F2500001F2600001F2700001F3000001F3100001F3200001F33 +00001F3400001F3500001F3600001F3700001F4000001F4100001F4200001F4300001F4400001F4500001F5100001F53 +00001F5500001F5700001F6000001F6100001F6200001F6300001F6400001F6500001F6600001F6700001F8000001F81 +00001F8200001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F95 +00001F9600001F9700001FA000001FA100001FA200001FA300001FA400001FA500001FA600001FA700001FB000001FB1 +00001F7000001F7100001FB300001F7200001F7300001F7400001F7500001FC300001FD000001FD100001F7600001F77 +00001FE000001FE100001F7A00001F7B00001FE500001F7800001F7900001F7C00001F7D00001FF3000003C90000006B +000000E50000214E00002170000021710000217200002173000021740000217500002176000021770000217800002179 +0000217A0000217B0000217C0000217D0000217E0000217F00002184000024D0000024D1000024D2000024D3000024D4 +000024D5000024D6000024D7000024D8000024D9000024DA000024DB000024DC000024DD000024DE000024DF000024E0 +000024E1000024E2000024E3000024E4000024E5000024E6000024E7000024E8000024E900002C3000002C3100002C32 +00002C3300002C3400002C3500002C3600002C3700002C3800002C3900002C3A00002C3B00002C3C00002C3D00002C3E +00002C3F00002C4000002C4100002C4200002C4300002C4400002C4500002C4600002C4700002C4800002C4900002C4A +00002C4B00002C4C00002C4D00002C4E00002C4F00002C5000002C5100002C5200002C5300002C5400002C5500002C56 +00002C5700002C5800002C5900002C5A00002C5B00002C5C00002C5D00002C5E00002C5F00002C610000026B00001D7D +0000027D00002C6800002C6A00002C6C0000025100000271000002500000025200002C7300002C760000023F00000240 +00002C8100002C8300002C8500002C8700002C8900002C8B00002C8D00002C8F00002C9100002C9300002C9500002C97 +00002C9900002C9B00002C9D00002C9F00002CA100002CA300002CA500002CA700002CA900002CAB00002CAD00002CAF +00002CB100002CB300002CB500002CB700002CB900002CBB00002CBD00002CBF00002CC100002CC300002CC500002CC7 +00002CC900002CCB00002CCD00002CCF00002CD100002CD300002CD500002CD700002CD900002CDB00002CDD00002CDF +00002CE100002CE300002CEC00002CEE00002CF30000A6410000A6430000A6450000A6470000A6490000A64B0000A64D +0000A64F0000A6510000A6530000A6550000A6570000A6590000A65B0000A65D0000A65F0000A6610000A6630000A665 +0000A6670000A6690000A66B0000A66D0000A6810000A6830000A6850000A6870000A6890000A68B0000A68D0000A68F +0000A6910000A6930000A6950000A6970000A6990000A69B0000A7230000A7250000A7270000A7290000A72B0000A72D +0000A72F0000A7330000A7350000A7370000A7390000A73B0000A73D0000A73F0000A7410000A7430000A7450000A747 +0000A7490000A74B0000A74D0000A74F0000A7510000A7530000A7550000A7570000A7590000A75B0000A75D0000A75F +0000A7610000A7630000A7650000A7670000A7690000A76B0000A76D0000A76F0000A77A0000A77C00001D790000A77F +0000A7810000A7830000A7850000A7870000A78C000002650000A7910000A7930000A7970000A7990000A79B0000A79D +0000A79F0000A7A10000A7A30000A7A50000A7A70000A7A9000002660000025C000002610000026C0000026A0000029E +000002870000029D0000AB530000A7B50000A7B70000A7B90000A7BB0000A7BD0000A7BF0000A7C10000A7C30000A794 +0000028200001D8E0000A7C80000A7CA000002640000A7CD0000A7D10000A7D70000A7D90000A7DB0000019B0000A7F6 +0000FF410000FF420000FF430000FF440000FF450000FF460000FF470000FF480000FF490000FF4A0000FF4B0000FF4C +0000FF4D0000FF4E0000FF4F0000FF500000FF510000FF520000FF530000FF540000FF550000FF560000FF570000FF58 +0000FF590000FF5A00010428000104290001042A0001042B0001042C0001042D0001042E0001042F0001043000010431 +00010432000104330001043400010435000104360001043700010438000104390001043A0001043B0001043C0001043D +0001043E0001043F00010440000104410001044200010443000104440001044500010446000104470001044800010449 +0001044A0001044B0001044C0001044D0001044E0001044F000104D8000104D9000104DA000104DB000104DC000104DD +000104DE000104DF000104E0000104E1000104E2000104E3000104E4000104E5000104E6000104E7000104E8000104E9 +000104EA000104EB000104EC000104ED000104EE000104EF000104F0000104F1000104F2000104F3000104F4000104F5 +000104F6000104F7000104F8000104F9000104FA000104FB0001059700010598000105990001059A0001059B0001059C +0001059D0001059E0001059F000105A0000105A1000105A3000105A4000105A5000105A6000105A7000105A8000105A9 +000105AA000105AB000105AC000105AD000105AE000105AF000105B0000105B1000105B3000105B4000105B5000105B6 +000105B7000105B8000105B9000105BB000105BC00010CC000010CC100010CC200010CC300010CC400010CC500010CC6 +00010CC700010CC800010CC900010CCA00010CCB00010CCC00010CCD00010CCE00010CCF00010CD000010CD100010CD2 +00010CD300010CD400010CD500010CD600010CD700010CD800010CD900010CDA00010CDB00010CDC00010CDD00010CDE +00010CDF00010CE000010CE100010CE200010CE300010CE400010CE500010CE600010CE700010CE800010CE900010CEA +00010CEB00010CEC00010CED00010CEE00010CEF00010CF000010CF100010CF200010D7000010D7100010D7200010D73 +00010D7400010D7500010D7600010D7700010D7800010D7900010D7A00010D7B00010D7C00010D7D00010D7E00010D7F +00010D8000010D8100010D8200010D8300010D8400010D85000118C0000118C1000118C2000118C3000118C4000118C5 +000118C6000118C7000118C8000118C9000118CA000118CB000118CC000118CD000118CE000118CF000118D0000118D1 +000118D2000118D3000118D4000118D5000118D6000118D7000118D8000118D9000118DA000118DB000118DC000118DD +000118DE000118DF00016E6000016E6100016E6200016E6300016E6400016E6500016E6600016E6700016E6800016E69 +00016E6A00016E6B00016E6C00016E6D00016E6E00016E6F00016E7000016E7100016E7200016E7300016E7400016E75 +00016E7600016E7700016E7800016E7900016E7A00016E7B00016E7C00016E7D00016E7E00016E7F0001E9220001E923 +0001E9240001E9250001E9260001E9270001E9280001E9290001E92A0001E92B0001E92C0001E92D0001E92E0001E92F +0001E9300001E9310001E9320001E9330001E9340001E9350001E9360001E9370001E9380001E9390001E93A0001E93B +0001E93C0001E93D0001E93E0001E93F0001E9400001E9410001E9420001E943000000DF02000069000003070000FB00 +0000FB010000FB020000FB030000FB040000FB050000FB06000005870000FB130000FB140000FB150000FB160000FB17 +0000014900000390000003B0000001F000001E9600001E9700001E9800001E9900001E9A00001F5000001F5200001F54 +00001F5600001FB600001FC600001FD200001FD300001FD600001FD700001FE200001FE300001FE400001FE600001FE7 +00001FF600001F8000001F8100001F8200001F8300001F8400001F8500001F8600001F8700001F8000001F8100001F82 +00001F8300001F8400001F8500001F8600001F8700001F9000001F9100001F9200001F9300001F9400001F9500001F96 +00001F9700001F9000001F9100001F9200001F9300001F9400001F9500001F9600001F9700001FA000001FA100001FA2 +00001FA300001FA400001FA500001FA600001FA700001FA000001FA100001FA200001FA300001FA400001FA500001FA6 +00001FA700001FB300001FB300001FC300001FC300001FF300001FF300001FB200001FB400001FC200001FC400001FF2 +00001FF400001FB700001FC700001FF7"; +return t; +} +immutable(uint)[] toTitleTable() nothrow @nogc pure @safe { +static immutable uint[] t = +x" +0000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C +0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058 +000000590000005A0000039C000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8 +000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4 +000000D5000000D6000000D8000000D9000000DA000000DB000000DC000000DD000000DE000001780000010000000102 +0000010400000106000001080000010A0000010C0000010E00000110000001120000011400000116000001180000011A +0000011C0000011E00000120000001220000012400000126000001280000012A0000012C0000012E0000004900000132 +0000013400000136000001390000013B0000013D0000013F000001410000014300000145000001470000014A0000014C +0000014E00000150000001520000015400000156000001580000015A0000015C0000015E000001600000016200000164 +00000166000001680000016A0000016C0000016E00000170000001720000017400000176000001790000017B0000017D +00000053000002430000018200000184000001870000018B00000191000001F6000001980000023D0000A7DC00000220 +000001A0000001A2000001A4000001A7000001AC000001AF000001B3000001B5000001B8000001BC000001F7000001C5 +000001C5000001C5000001C8000001C8000001C8000001CB000001CB000001CB000001CD000001CF000001D1000001D3 +000001D5000001D7000001D9000001DB0000018E000001DE000001E0000001E2000001E4000001E6000001E8000001EA +000001EC000001EE000001F2000001F2000001F2000001F4000001F8000001FA000001FC000001FE0000020000000202 +0000020400000206000002080000020A0000020C0000020E00000210000002120000021400000216000002180000021A +0000021C0000021E000002220000022400000226000002280000022A0000022C0000022E00000230000002320000023B +00002C7E00002C7F0000024100000246000002480000024A0000024C0000024E00002C6F00002C6D00002C7000000181 +00000186000001890000018A0000018F000001900000A7AB000001930000A7AC000001940000A7CB0000A78D0000A7AA +00000197000001960000A7AE00002C620000A7AD0000019C00002C6E0000019D0000019F00002C64000001A60000A7C5 +000001A90000A7B1000001AE00000244000001B1000001B200000245000001B70000A7B20000A7B00000039900000370 +0000037200000376000003FD000003FE000003FF0000038600000388000003890000038A000003910000039200000393 +0000039400000395000003960000039700000398000003990000039A0000039B0000039C0000039D0000039E0000039F +000003A0000003A1000003A3000003A3000003A4000003A5000003A6000003A7000003A8000003A9000003AA000003AB +0000038C0000038E0000038F0000039200000398000003A6000003A0000003CF000003D8000003DA000003DC000003DE +000003E0000003E2000003E4000003E6000003E8000003EA000003EC000003EE0000039A000003A1000003F90000037F +00000395000003F7000003FA000004100000041100000412000004130000041400000415000004160000041700000418 +000004190000041A0000041B0000041C0000041D0000041E0000041F0000042000000421000004220000042300000424 +00000425000004260000042700000428000004290000042A0000042B0000042C0000042D0000042E0000042F00000400 +0000040100000402000004030000040400000405000004060000040700000408000004090000040A0000040B0000040C +0000040D0000040E0000040F00000460000004620000046400000466000004680000046A0000046C0000046E00000470 +000004720000047400000476000004780000047A0000047C0000047E000004800000048A0000048C0000048E00000490 +000004920000049400000496000004980000049A0000049C0000049E000004A0000004A2000004A4000004A6000004A8 +000004AA000004AC000004AE000004B0000004B2000004B4000004B6000004B8000004BA000004BC000004BE000004C1 +000004C3000004C5000004C7000004C9000004CB000004CD000004C0000004D0000004D2000004D4000004D6000004D8 +000004DA000004DC000004DE000004E0000004E2000004E4000004E6000004E8000004EA000004EC000004EE000004F0 +000004F2000004F4000004F6000004F8000004FA000004FC000004FE0000050000000502000005040000050600000508 +0000050A0000050C0000050E00000510000005120000051400000516000005180000051A0000051C0000051E00000520 +000005220000052400000526000005280000052A0000052C0000052E0000053100000532000005330000053400000535 +000005360000053700000538000005390000053A0000053B0000053C0000053D0000053E0000053F0000054000000541 +00000542000005430000054400000545000005460000054700000548000005490000054A0000054B0000054C0000054D +0000054E0000054F00000550000005510000055200000553000005540000055500000556000010D0000010D1000010D2 +000010D3000010D4000010D5000010D6000010D7000010D8000010D9000010DA000010DB000010DC000010DD000010DE +000010DF000010E0000010E1000010E2000010E3000010E4000010E5000010E6000010E7000010E8000010E9000010EA +000010EB000010EC000010ED000010EE000010EF000010F0000010F1000010F2000010F3000010F4000010F5000010F6 +000010F7000010F8000010F9000010FA000010FD000010FE000010FF000013F0000013F1000013F2000013F3000013F4 +000013F500000412000004140000041E0000042100000422000004220000042A000004620000A64A00001C890000A77D +00002C630000A7C600001E0000001E0200001E0400001E0600001E0800001E0A00001E0C00001E0E00001E1000001E12 +00001E1400001E1600001E1800001E1A00001E1C00001E1E00001E2000001E2200001E2400001E2600001E2800001E2A +00001E2C00001E2E00001E3000001E3200001E3400001E3600001E3800001E3A00001E3C00001E3E00001E4000001E42 +00001E4400001E4600001E4800001E4A00001E4C00001E4E00001E5000001E5200001E5400001E5600001E5800001E5A +00001E5C00001E5E00001E6000001E6200001E6400001E6600001E6800001E6A00001E6C00001E6E00001E7000001E72 +00001E7400001E7600001E7800001E7A00001E7C00001E7E00001E8000001E8200001E8400001E8600001E8800001E8A +00001E8C00001E8E00001E9000001E9200001E9400001E6000001EA000001EA200001EA400001EA600001EA800001EAA +00001EAC00001EAE00001EB000001EB200001EB400001EB600001EB800001EBA00001EBC00001EBE00001EC000001EC2 +00001EC400001EC600001EC800001ECA00001ECC00001ECE00001ED000001ED200001ED400001ED600001ED800001EDA +00001EDC00001EDE00001EE000001EE200001EE400001EE600001EE800001EEA00001EEC00001EEE00001EF000001EF2 +00001EF400001EF600001EF800001EFA00001EFC00001EFE00001F0800001F0900001F0A00001F0B00001F0C00001F0D +00001F0E00001F0F00001F1800001F1900001F1A00001F1B00001F1C00001F1D00001F2800001F2900001F2A00001F2B +00001F2C00001F2D00001F2E00001F2F00001F3800001F3900001F3A00001F3B00001F3C00001F3D00001F3E00001F3F +00001F4800001F4900001F4A00001F4B00001F4C00001F4D00001F5900001F5B00001F5D00001F5F00001F6800001F69 +00001F6A00001F6B00001F6C00001F6D00001F6E00001F6F00001FBA00001FBB00001FC800001FC900001FCA00001FCB +00001FDA00001FDB00001FF800001FF900001FEA00001FEB00001FFA00001FFB00001F8800001F8900001F8A00001F8B +00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F +00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE00001FAF00001FB800001FB900001FBC00000399 +00001FCC00001FD800001FD900001FE800001FE900001FEC00001FFC0000213200002160000021610000216200002163 +0000216400002165000021660000216700002168000021690000216A0000216B0000216C0000216D0000216E0000216F +00002183000024B6000024B7000024B8000024B9000024BA000024BB000024BC000024BD000024BE000024BF000024C0 +000024C1000024C2000024C3000024C4000024C5000024C6000024C7000024C8000024C9000024CA000024CB000024CC +000024CD000024CE000024CF00002C0000002C0100002C0200002C0300002C0400002C0500002C0600002C0700002C08 +00002C0900002C0A00002C0B00002C0C00002C0D00002C0E00002C0F00002C1000002C1100002C1200002C1300002C14 +00002C1500002C1600002C1700002C1800002C1900002C1A00002C1B00002C1C00002C1D00002C1E00002C1F00002C20 +00002C2100002C2200002C2300002C2400002C2500002C2600002C2700002C2800002C2900002C2A00002C2B00002C2C +00002C2D00002C2E00002C2F00002C600000023A0000023E00002C6700002C6900002C6B00002C7200002C7500002C80 +00002C8200002C8400002C8600002C8800002C8A00002C8C00002C8E00002C9000002C9200002C9400002C9600002C98 +00002C9A00002C9C00002C9E00002CA000002CA200002CA400002CA600002CA800002CAA00002CAC00002CAE00002CB0 +00002CB200002CB400002CB600002CB800002CBA00002CBC00002CBE00002CC000002CC200002CC400002CC600002CC8 +00002CCA00002CCC00002CCE00002CD000002CD200002CD400002CD600002CD800002CDA00002CDC00002CDE00002CE0 +00002CE200002CEB00002CED00002CF2000010A0000010A1000010A2000010A3000010A4000010A5000010A6000010A7 +000010A8000010A9000010AA000010AB000010AC000010AD000010AE000010AF000010B0000010B1000010B2000010B3 +000010B4000010B5000010B6000010B7000010B8000010B9000010BA000010BB000010BC000010BD000010BE000010BF +000010C0000010C1000010C2000010C3000010C4000010C5000010C7000010CD0000A6400000A6420000A6440000A646 +0000A6480000A64A0000A64C0000A64E0000A6500000A6520000A6540000A6560000A6580000A65A0000A65C0000A65E +0000A6600000A6620000A6640000A6660000A6680000A66A0000A66C0000A6800000A6820000A6840000A6860000A688 +0000A68A0000A68C0000A68E0000A6900000A6920000A6940000A6960000A6980000A69A0000A7220000A7240000A726 +0000A7280000A72A0000A72C0000A72E0000A7320000A7340000A7360000A7380000A73A0000A73C0000A73E0000A740 +0000A7420000A7440000A7460000A7480000A74A0000A74C0000A74E0000A7500000A7520000A7540000A7560000A758 +0000A75A0000A75C0000A75E0000A7600000A7620000A7640000A7660000A7680000A76A0000A76C0000A76E0000A779 +0000A77B0000A77E0000A7800000A7820000A7840000A7860000A78B0000A7900000A7920000A7C40000A7960000A798 +0000A79A0000A79C0000A79E0000A7A00000A7A20000A7A40000A7A60000A7A80000A7B40000A7B60000A7B80000A7BA +0000A7BC0000A7BE0000A7C00000A7C20000A7C70000A7C90000A7CC0000A7D00000A7D60000A7D80000A7DA0000A7F5 +0000A7B3000013A0000013A1000013A2000013A3000013A4000013A5000013A6000013A7000013A8000013A9000013AA +000013AB000013AC000013AD000013AE000013AF000013B0000013B1000013B2000013B3000013B4000013B5000013B6 +000013B7000013B8000013B9000013BA000013BB000013BC000013BD000013BE000013BF000013C0000013C1000013C2 +000013C3000013C4000013C5000013C6000013C7000013C8000013C9000013CA000013CB000013CC000013CD000013CE +000013CF000013D0000013D1000013D2000013D3000013D4000013D5000013D6000013D7000013D8000013D9000013DA +000013DB000013DC000013DD000013DE000013DF000013E0000013E1000013E2000013E3000013E4000013E5000013E6 +000013E7000013E8000013E9000013EA000013EB000013EC000013ED000013EE000013EF0000FF210000FF220000FF23 +0000FF240000FF250000FF260000FF270000FF280000FF290000FF2A0000FF2B0000FF2C0000FF2D0000FF2E0000FF2F +0000FF300000FF310000FF320000FF330000FF340000FF350000FF360000FF370000FF380000FF390000FF3A00010400 +0001040100010402000104030001040400010405000104060001040700010408000104090001040A0001040B0001040C +0001040D0001040E0001040F000104100001041100010412000104130001041400010415000104160001041700010418 +000104190001041A0001041B0001041C0001041D0001041E0001041F0001042000010421000104220001042300010424 +000104250001042600010427000104B0000104B1000104B2000104B3000104B4000104B5000104B6000104B7000104B8 +000104B9000104BA000104BB000104BC000104BD000104BE000104BF000104C0000104C1000104C2000104C3000104C4 +000104C5000104C6000104C7000104C8000104C9000104CA000104CB000104CC000104CD000104CE000104CF000104D0 +000104D1000104D2000104D3000105700001057100010572000105730001057400010575000105760001057700010578 +000105790001057A0001057C0001057D0001057E0001057F000105800001058100010582000105830001058400010585 +000105860001058700010588000105890001058A0001058C0001058D0001058E0001058F000105900001059100010592 +000105940001059500010C8000010C8100010C8200010C8300010C8400010C8500010C8600010C8700010C8800010C89 +00010C8A00010C8B00010C8C00010C8D00010C8E00010C8F00010C9000010C9100010C9200010C9300010C9400010C95 +00010C9600010C9700010C9800010C9900010C9A00010C9B00010C9C00010C9D00010C9E00010C9F00010CA000010CA1 +00010CA200010CA300010CA400010CA500010CA600010CA700010CA800010CA900010CAA00010CAB00010CAC00010CAD +00010CAE00010CAF00010CB000010CB100010CB200010D5000010D5100010D5200010D5300010D5400010D5500010D56 +00010D5700010D5800010D5900010D5A00010D5B00010D5C00010D5D00010D5E00010D5F00010D6000010D6100010D62 +00010D6300010D6400010D65000118A0000118A1000118A2000118A3000118A4000118A5000118A6000118A7000118A8 +000118A9000118AA000118AB000118AC000118AD000118AE000118AF000118B0000118B1000118B2000118B3000118B4 +000118B5000118B6000118B7000118B8000118B9000118BA000118BB000118BC000118BD000118BE000118BF00016E40 +00016E4100016E4200016E4300016E4400016E4500016E4600016E4700016E4800016E4900016E4A00016E4B00016E4C +00016E4D00016E4E00016E4F00016E5000016E5100016E5200016E5300016E5400016E5500016E5600016E5700016E58 +00016E5900016E5A00016E5B00016E5C00016E5D00016E5E00016E5F0001E9000001E9010001E9020001E9030001E904 +0001E9050001E9060001E9070001E9080001E9090001E90A0001E90B0001E90C0001E90D0001E90E0001E90F0001E910 +0001E9110001E9120001E9130001E9140001E9150001E9160001E9170001E9180001E9190001E91A0001E91B0001E91C +0001E91D0001E91E0001E91F0001E9200001E92102000053000000730000013002000046000000660200004600000069 +020000460000006C03000046000000660000006903000046000000660000006C02000053000000740200005300000074 +020005350000058202000544000005760200054400000565020005440000056B0200054E00000576020005440000056D +020002BC0000004E030003990000030800000301030003A500000308000003010200004A0000030C0200004800000331 +0200005400000308020000570000030A020000590000030A02000041000002BE020003A500000313030003A500000313 +00000300030003A50000031300000301030003A500000313000003420200039100000342020003970000034203000399 +00000308000003000300039900000308000003010200039900000342030003990000030800000342030003A500000308 +00000300030003A50000030800000301020003A100000313020003A500000342030003A50000030800000342020003A9 +0000034200001F8800001F8900001F8A00001F8B00001F8C00001F8D00001F8E00001F8F00001F8800001F8900001F8A +00001F8B00001F8C00001F8D00001F8E00001F8F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E +00001F9F00001F9800001F9900001F9A00001F9B00001F9C00001F9D00001F9E00001F9F00001FA800001FA900001FAA +00001FAB00001FAC00001FAD00001FAE00001FAF00001FA800001FA900001FAA00001FAB00001FAC00001FAD00001FAE +00001FAF00001FBC00001FBC00001FCC00001FCC00001FFC00001FFC02001FBA00000345020003860000034502001FCA +00000345020003890000034502001FFA000003450200038F000003450300039100000342000003450300039700000342 +00000345030003A90000034200000345"; +return t; } } diff --git a/std/json.d b/std/json.d index 1a743125693..a1b1e245c2d 100644 --- a/std/json.d +++ b/std/json.d @@ -1,12 +1,19 @@ // Written in the D programming language. /** -JavaScript Object Notation +Implements functionality to read and write JavaScript Object Notation values. + +JavaScript Object Notation is a lightweight data interchange format commonly used in web services and configuration files. +It's easy for humans to read and write, and it's easy for machines to parse and generate. + +$(RED Warning: While $(LREF JSONValue) is fine for small-scale use, at the range of hundreds of megabytes it is +known to cause and exacerbate GC problems. If you encounter problems, try replacing it with a stream parser. See +also $(LINK https://forum.dlang.org/post/dzfyaxypmkdrpakmycjv@forum.dlang.org).) Copyright: Copyright Jeremie Pelletier 2008 - 2009. License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). Authors: Jeremie Pelletier, David Herberth -References: $(LINK http://json.org/), $(LINK http://seriot.ch/parsing_json.html) +References: $(LINK http://json.org/), $(LINK https://seriot.ch/projects/parsing_json.html) Source: $(PHOBOSSRC std/json.d) */ /* @@ -63,25 +70,26 @@ String literals used to represent special float values within JSON strings. */ enum JSONFloatLiteral : string { - nan = "NaN", /// string representation of floating-point NaN - inf = "Infinite", /// string representation of floating-point Infinity - negativeInf = "-Infinite", /// string representation of floating-point negative Infinity + nan = "NaN", /// String representation of floating-point NaN + inf = "Infinite", /// String representation of floating-point Infinity + negativeInf = "-Infinite", /// String representation of floating-point negative Infinity } /** -Flags that control how json is encoded and parsed. +Flags that control how JSON is encoded and parsed. */ enum JSONOptions { - none, /// standard parsing - specialFloatLiterals = 0x1, /// encode NaN and Inf float values as strings - escapeNonAsciiChars = 0x2, /// encode non ascii characters with an unicode escape sequence - doNotEscapeSlashes = 0x4, /// do not escape slashes ('/') + none, /// Standard parsing and encoding + specialFloatLiterals = 0x1, /// Encode NaN and Inf float values as strings + escapeNonAsciiChars = 0x2, /// Encode non-ASCII characters with a Unicode escape sequence + doNotEscapeSlashes = 0x4, /// Do not escape slashes ('/') strictParsing = 0x8, /// Strictly follow RFC-8259 grammar when parsing + preserveObjectOrder = 0x16, /// Preserve order of object keys when parsing } /** -JSON type enumeration +Enumeration of JSON types */ enum JSONType : byte { @@ -119,13 +127,30 @@ struct JSONValue { import std.exception : enforce; + import std.typecons : Tuple; + + alias OrderedObjectMember = Tuple!( + string, "key", + JSONValue, "value", + ); + union Store { + struct Object + { + bool isOrdered; + union + { + JSONValue[string] unordered; + OrderedObjectMember[] ordered; + } + } + string str; long integer; ulong uinteger; double floating; - JSONValue[string] object; + Object object; JSONValue[] array; } private Store store; @@ -265,10 +290,10 @@ struct JSONValue } /*** - * Value getter/setter for `JSONType.object`. + * Value getter/setter for unordered `JSONType.object`. * Throws: `JSONException` for read access if `type` is not - * `JSONType.object`. - * Note: this is @system because of the following pattern: + * `JSONType.object` or the object is ordered. + * Note: This is @system because of the following pattern: --- auto a = &(json.object()); json.uinteger = 0; // overwrite AA pointer @@ -279,7 +304,9 @@ struct JSONValue { enforce!JSONException(type == JSONType.object, "JSONValue is not an object"); - return store.object; + enforce!JSONException(!store.object.isOrdered, + "JSONValue object is ordered, cannot return by ref"); + return store.object.unordered; } /// ditto @property JSONValue[string] object(return scope JSONValue[string] v) pure nothrow @nogc @trusted // TODO make @safe @@ -289,10 +316,12 @@ struct JSONValue } /*** - * Value getter for `JSONType.object`. - * Unlike `object`, this retrieves the object by value and can be used in @safe code. + * Value getter for unordered `JSONType.object`. + * Unlike `object`, this retrieves the object by value + * and can be used in @safe code. * - * A caveat is that, if the returned value is null, modifications will not be visible: + * One possible caveat is that, if the returned value is null, + * modifications will not be visible: * --- * JSONValue json; * json.object = null; @@ -307,14 +336,78 @@ struct JSONValue { enforce!JSONException(type == JSONType.object, "JSONValue is not an object"); - return store.object; + if (store.object.isOrdered) + { + // Convert to unordered + JSONValue[string] result; + foreach (pair; store.object.ordered) + result[pair.key] = pair.value; + return cast(inout) result; + } + else + return store.object.unordered; + } + + /*** + * Value getter/setter for ordered `JSONType.object`. + * Throws: `JSONException` for read access if `type` is not + * `JSONType.object` or the object is unordered. + * Note: This is @system because of the following pattern: + --- + auto a = &(json.orderedObject()); + json.uinteger = 0; // overwrite AA pointer + (*a)["hello"] = "world"; // segmentation fault + --- + */ + @property ref inout(OrderedObjectMember[]) orderedObject() inout pure @system return + { + enforce!JSONException(type == JSONType.object, + "JSONValue is not an object"); + enforce!JSONException(store.object.isOrdered, + "JSONValue object is unordered, cannot return by ref"); + return store.object.ordered; + } + /// ditto + @property OrderedObjectMember[] orderedObject(return scope OrderedObjectMember[] v) pure nothrow @nogc @trusted // TODO make @safe + { + assign(v); + return v; + } + + /*** + * Value getter for ordered `JSONType.object`. + * Unlike `orderedObject`, this retrieves the object by value + * and can be used in @safe code. + */ + @property inout(OrderedObjectMember[]) orderedObjectNoRef() inout pure @trusted + { + enforce!JSONException(type == JSONType.object, + "JSONValue is not an object"); + if (store.object.isOrdered) + return store.object.ordered; + else + { + // Convert to ordered + OrderedObjectMember[] result; + foreach (key, value; store.object.unordered) + result ~= OrderedObjectMember(key, value); + return cast(inout) result; + } + } + + /// Returns `true` if the order of keys of the represented object is being preserved. + @property bool isOrdered() const pure @trusted + { + enforce!JSONException(type == JSONType.object, + "JSONValue is not an object"); + return store.object.isOrdered; } /*** * Value getter/setter for `JSONType.array`. * Throws: `JSONException` for read access if `type` is not * `JSONType.array`. - * Note: this is @system because of the following pattern: + * Note: This is @system because of the following pattern: --- auto a = &(json.array()); json.uinteger = 0; // overwrite array pointer @@ -338,8 +431,8 @@ struct JSONValue * Value getter for `JSONType.array`. * Unlike `array`, this retrieves the array by value and can be used in @safe code. * - * A caveat is that, if you append to the returned array, the new values aren't visible in the - * JSONValue: + * One possible caveat is that, if you append to the returned array, + * the new values aren't visible in the `JSONValue`: * --- * JSONValue json; * json.array = [JSONValue("hello")]; @@ -364,9 +457,8 @@ struct JSONValue } /*** - * Generic type value getter * A convenience getter that returns this `JSONValue` as the specified D type. - * Note: only numeric, `bool`, `string`, `JSONValue[string]` and `JSONValue[]` types are accepted + * Note: Only numeric types, `bool`, `string`, `JSONValue[string]`, and `JSONValue[]` types are accepted * Throws: `JSONException` if `T` cannot hold the contents of this `JSONValue` * `ConvException` in case of integer overflow when converting to `T` */ @@ -509,16 +601,30 @@ struct JSONValue static if (is(Value : JSONValue)) { JSONValue[string] t = arg; - () @trusted { store.object = t; }(); + () @trusted { + store.object.isOrdered = false; + store.object.unordered = t; + }(); } else { JSONValue[string] aa; foreach (key, value; arg) aa[key] = JSONValue(value); - () @trusted { store.object = aa; }(); + () @trusted { + store.object.isOrdered = false; + store.object.unordered = aa; + }(); } } + else static if (is(T : OrderedObjectMember[])) + { + type_tag = JSONType.object; + () @trusted { + store.object.isOrdered = true; + store.object.ordered = arg; + }(); + } else static if (isArray!T) { type_tag = JSONType.array; @@ -621,6 +727,33 @@ struct JSONValue assert(obj1 != obj2); } + /** + * An enum value that can be used to obtain a `JSONValue` representing + * an empty JSON object. + * Unlike `emptyObject`, the order of inserted keys is preserved. + */ + enum emptyOrderedObject = { + JSONValue v; + v.orderedObject = null; + return v; + }(); + /// + @system unittest + { + JSONValue obj = JSONValue.emptyOrderedObject; + assert(obj.type == JSONType.object); + assert(obj.isOrdered); + obj["b"] = JSONValue(2); + obj["a"] = JSONValue(1); + assert(obj["a"] == JSONValue(1)); + assert(obj["b"] == JSONValue(2)); + + string[] keys; + foreach (string k, JSONValue v; obj) + keys ~= k; + assert(keys == ["b", "a"]); + } + /** * An enum value that can be used to obtain a `JSONValue` representing * an empty JSON array. @@ -652,7 +785,7 @@ struct JSONValue } /*** - * Array syntax for json arrays. + * Array syntax for JSON arrays. * Throws: `JSONException` if `type` is not `JSONType.array`. */ ref inout(JSONValue) opIndex(size_t i) inout pure @safe @@ -671,7 +804,7 @@ struct JSONValue } /*** - * Hash syntax for json objects. + * Hash syntax for JSON objects. * Throws: `JSONException` if `type` is not `JSONType.object`. */ ref inout(JSONValue) opIndex(return scope string k) inout pure @safe @@ -688,26 +821,45 @@ struct JSONValue } /*** - * Operator sets `value` for element of JSON object by `key`. + * Provides support for index assignments, which sets the + * corresponding value of the JSON object's `key` field to `value`. * - * If JSON value is null, then operator initializes it with object and then - * sets `value` for it. + * If the `JSONValue` is `JSONType.null_`, then this function + * initializes it with a JSON object and then performs + * the index assignment. * * Throws: `JSONException` if `type` is not `JSONType.object` * or `JSONType.null_`. */ void opIndexAssign(T)(auto ref T value, string key) { - enforce!JSONException(type == JSONType.object || type == JSONType.null_, - "JSONValue must be object or null"); - JSONValue[string] aa = null; - if (type == JSONType.object) + enforce!JSONException( + type == JSONType.object || + type == JSONType.null_, + "JSONValue must be object or null"); + if (type == JSONType.object && isOrdered) { - aa = this.objectNoRef; + auto arr = this.orderedObjectNoRef; + foreach (ref pair; arr) + if (pair.key == key) + { + pair.value = value; + return; + } + arr ~= OrderedObjectMember(key, JSONValue(value)); + this.orderedObject = arr; } + else + { + JSONValue[string] aa = null; + if (type == JSONType.object) + { + aa = this.objectNoRef; + } - aa[key] = value; - this.object = aa; + aa[key] = value; + this.object = aa; + } } /// @safe unittest @@ -770,12 +922,12 @@ struct JSONValue } /** - * Support for the `in` operator. + * Provides support for the `in` operator. * - * Tests wether a key can be found in an object. + * Tests whether a key can be found in an object. * * Returns: - * when found, the `inout(JSONValue)*` that matches to the key, + * When found, the `inout(JSONValue)*` that matches to the key, * otherwise `null`. * * Throws: `JSONException` if the right hand side argument `JSONType` @@ -794,7 +946,22 @@ struct JSONValue assert(j["author"].str == "Walter"); } - /// + /** + * Compare two JSONValues for equality + * + * JSON arrays and objects are compared deeply. The order of object keys does not matter. + * + * Floating point numbers are compared for exact equality, not approximal equality. + * + * Different number types (unsigned, signed, and floating) will be compared by converting + * them to a common type, in the same way that comparison of built-in D `int`, `uint` and + * `float` works. + * + * Other than that, types must match exactly. + * Empty arrays are not equal to empty objects, and booleans are never equal to integers. + * + * Returns: whether this `JSONValue` is equal to `rhs` + */ bool opEquals(const JSONValue rhs) const @nogc nothrow pure @safe { return opEquals(rhs); @@ -803,6 +970,8 @@ struct JSONValue /// ditto bool opEquals(ref const JSONValue rhs) const @nogc nothrow pure @trusted { + import std.algorithm.searching : canFind; + // Default doesn't work well since store is a union. Compare only // what should be in store. // This is @trusted to remain nogc, nothrow, fast, and usable from @safe code. @@ -848,7 +1017,45 @@ struct JSONValue case JSONType.string: return type_tag == rhs.type_tag && store.str == rhs.store.str; case JSONType.object: - return type_tag == rhs.type_tag && store.object == rhs.store.object; + if (rhs.type_tag != JSONType.object) + return false; + if (store.object.isOrdered) + { + if (rhs.store.object.isOrdered) + { + if (store.object.ordered.length != rhs.store.object.ordered.length) + return false; + foreach (ref pair; store.object.ordered) + if (!rhs.store.object.ordered.canFind(pair)) + return false; + return true; + } + else + { + if (store.object.ordered.length != rhs.store.object.unordered.length) + return false; + foreach (ref pair; store.object.ordered) + if (pair.key !in rhs.store.object.unordered || + rhs.store.object.unordered[pair.key] != pair.value) + return false; + return true; + } + } + else + { + if (rhs.store.object.isOrdered) + { + if (store.object.unordered.length != rhs.store.object.ordered.length) + return false; + foreach (ref pair; rhs.store.object.ordered) + if (pair.key !in store.object.unordered || + store.object.unordered[pair.key] != pair.value) + return false; + return true; + } + else + return store.object.unordered == rhs.store.object.unordered; + } case JSONType.array: return type_tag == rhs.type_tag && store.array == rhs.store.array; case JSONType.true_: @@ -861,9 +1068,13 @@ struct JSONValue /// @safe unittest { - assert(JSONValue(0u) == JSONValue(0)); - assert(JSONValue(0u) == JSONValue(0.0)); - assert(JSONValue(0) == JSONValue(0.0)); + assert(JSONValue(10).opEquals(JSONValue(10.0))); + assert(JSONValue(10) != (JSONValue(10.5))); + + assert(JSONValue(1) != JSONValue(true)); + assert(JSONValue.emptyArray != JSONValue.emptyObject); + + assert(parseJSON(`{"a": 1, "b": 2}`).opEquals(parseJSON(`{"b": 2, "a": 1}`))); } /// Implements the foreach `opApply` interface for json arrays. @@ -885,14 +1096,27 @@ struct JSONValue int opApply(scope int delegate(string key, ref JSONValue) dg) @system { enforce!JSONException(type == JSONType.object, - "JSONValue is not an object"); + "JSONValue is not an object"); + int result; - foreach (string key, ref value; object) + if (isOrdered) { - result = dg(key, value); - if (result) - break; + foreach (ref pair; orderedObject) + { + result = dg(pair.key, pair.value); + if (result) + break; + } + } + else + { + foreach (string key, ref value; object) + { + result = dg(key, value); + if (result) + break; + } } return result; @@ -989,6 +1213,7 @@ if (isSomeFiniteCharInputRange!T) Nullable!Char next; int line = 1, pos = 0; immutable bool strict = (options & JSONOptions.strictParsing) != 0; + immutable bool ordered = (options & JSONOptions.preserveObjectOrder) != 0; void error(string msg) { @@ -1229,31 +1454,62 @@ if (isSomeFiniteCharInputRange!T) switch (c) { case '{': - if (testChar('}')) + if (ordered) { - value.object = null; - break; - } + if (testChar('}')) + { + value.orderedObject = null; + break; + } - JSONValue[string] obj; - do + JSONValue.OrderedObjectMember[] obj; + do + { + skipWhitespace(); + if (!strict && peekChar() == '}') + { + break; + } + checkChar('"'); + string name = parseString(); + checkChar(':'); + JSONValue member; + parseValue(member); + obj ~= JSONValue.OrderedObjectMember(name, member); + } + while (testChar(',')); + value.orderedObject = obj; + + checkChar('}'); + } + else { - skipWhitespace(); - if (!strict && peekChar() == '}') + if (testChar('}')) { + value.object = null; break; } - checkChar('"'); - string name = parseString(); - checkChar(':'); - JSONValue member; - parseValue(member); - obj[name] = member; - } - while (testChar(',')); - value.object = obj; - checkChar('}'); + JSONValue[string] obj; + do + { + skipWhitespace(); + if (!strict && peekChar() == '}') + { + break; + } + checkChar('"'); + string name = parseString(); + checkChar(':'); + JSONValue member; + parseValue(member); + obj[name] = member; + } + while (testChar(',')); + value.object = obj; + + checkChar('}'); + } break; case '[': @@ -1609,49 +1865,82 @@ if (isOutputRange!(Out,char)) final switch (value.type) { case JSONType.object: - auto obj = value.objectNoRef; - if (!obj.length) + if (value.isOrdered) { - json.put("{}"); - } - else - { - putCharAndEOL('{'); - bool first = true; - - void emit(R)(R names) + auto obj = value.orderedObjectNoRef; + if (!obj.length) + { + json.put("{}"); + } + else { - foreach (name; names) + putCharAndEOL('{'); + bool first = true; + + foreach (pair; obj) { - auto member = obj[name]; if (!first) putCharAndEOL(','); first = false; putTabs(1); - toString(name); + toString(pair.key); json.put(':'); if (pretty) json.put(' '); - toValueImpl(member, indentLevel + 1); + toValueImpl(pair.value, indentLevel + 1); } - } - import std.algorithm.sorting : sort; - // https://issues.dlang.org/show_bug.cgi?id=14439 - // auto names = obj.keys; // aa.keys can't be called in @safe code - auto names = new string[obj.length]; - size_t i = 0; - foreach (k, v; obj) + putEOL(); + putTabs(); + json.put('}'); + } + } + else + { + auto obj = value.objectNoRef; + if (!obj.length) { - names[i] = k; - i++; + json.put("{}"); } - sort(names); - emit(names); + else + { + putCharAndEOL('{'); + bool first = true; - putEOL(); - putTabs(); - json.put('}'); + void emit(R)(R names) + { + foreach (name; names) + { + auto member = obj[name]; + if (!first) + putCharAndEOL(','); + first = false; + putTabs(1); + toString(name); + json.put(':'); + if (pretty) + json.put(' '); + toValueImpl(member, indentLevel + 1); + } + } + + import std.algorithm.sorting : sort; + // https://issues.dlang.org/show_bug.cgi?id=14439 + // auto names = obj.keys; // aa.keys can't be called in @safe code + auto names = new string[obj.length]; + size_t i = 0; + foreach (k, v; obj) + { + names[i] = k; + i++; + } + sort(names); + emit(names); + + putEOL(); + putTabs(); + json.put('}'); + } } break; @@ -2440,3 +2729,17 @@ pure nothrow @safe unittest assert(app.data == s, app.data); } + +// https://issues.dlang.org/show_bug.cgi?id=24823 - JSONOptions.preserveObjectOrder +@safe unittest +{ + import std.array : appender; + + string s = `{"b":2,"a":1}`; + JSONValue j = parseJSON(s, -1, JSONOptions.preserveObjectOrder); + + auto app = appender!string(); + j.toString(app); + + assert(app.data == s, app.data); +} diff --git a/std/logger/core.d b/std/logger/core.d index 846f6ee214a..0633bddee81 100644 --- a/std/logger/core.d +++ b/std/logger/core.d @@ -1473,15 +1473,15 @@ if (sharedLog !is myLogger) atomicStore!(MemoryOrder.seq)(stdSharedLogger, atomicLoad(logger)); } -/** This methods get and set the global `LogLevel`. +/** These methods get and set the global `LogLevel`. -Every log message with a `LogLevel` lower as the global `LogLevel` +Every log message with a `LogLevel` lower than the global `LogLevel` will be discarded before it reaches `writeLogMessage` method of any `Logger`. */ /* Implementation note: For any public logging call, the global log level shall only be queried once on -entry. Otherwise when another threads changes the level, we would work with +entry. Otherwise when another thread changes the level, we would work with different levels at different spots in the code. */ @property LogLevel globalLogLevel() @safe @nogc diff --git a/std/logger/package.d b/std/logger/package.d index 4f4183c4cec..14a439486db 100644 --- a/std/logger/package.d +++ b/std/logger/package.d @@ -54,6 +54,7 @@ $(UL $(LI `trace`) $(LI `info`) $(LI `warning`) + $(LI `error`) $(LI `critical`) $(LI `fatal`) ) diff --git a/std/math/algebraic.d b/std/math/algebraic.d index 4791766ab3a..cfb88c89f75 100644 --- a/std/math/algebraic.d +++ b/std/math/algebraic.d @@ -43,24 +43,24 @@ import std.traits : CommonType, isFloatingPoint, isIntegral, isSigned, Unqual; * the return type will be the same as the input. * * Limitations: - * Does not work correctly for signed intergal types and value `Num`.min. + * When x is a signed integral equal to `Num.min` the value of x will be returned instead. + * Note for 2's complement; `-Num.min` (= `Num.max + 1`) is not representable due to overflow. */ -auto abs(Num)(Num x) @nogc pure nothrow -if ((is(immutable Num == immutable short) || is(immutable Num == immutable byte)) || - (is(typeof(Num.init >= 0)) && is(typeof(-Num.init)))) +auto abs(Num)(Num x) @nogc nothrow pure +if (isIntegral!Num || (is(typeof(Num.init >= 0)) && is(typeof(-Num.init)))) { static if (isFloatingPoint!(Num)) return fabs(x); else { - static if (is(immutable Num == immutable short) || is(immutable Num == immutable byte)) - return x >= 0 ? x : cast(Num) -int(x); + static if (isIntegral!Num) + return x >= 0 ? x : cast(Num) -x; else return x >= 0 ? x : -x; } } -/// ditto +/// @safe pure nothrow @nogc unittest { import std.math.traits : isIdentical, isNaN; @@ -70,16 +70,27 @@ if ((is(immutable Num == immutable short) || is(immutable Num == immutable byte) assert(abs(-real.infinity) == real.infinity); assert(abs(-56) == 56); assert(abs(2321312L) == 2321312L); + assert(abs(23u) == 23u); } @safe pure nothrow @nogc unittest { - short s = -8; - byte b = -8; - assert(abs(s) == 8); - assert(abs(b) == 8); - immutable(byte) c = -8; - assert(abs(c) == 8); + assert(abs(byte(-8)) == 8); + assert(abs(ubyte(8u)) == 8); + assert(abs(short(-8)) == 8); + assert(abs(ushort(8u)) == 8); + assert(abs(int(-8)) == 8); + assert(abs(uint(8u)) == 8); + assert(abs(long(-8)) == 8); + assert(abs(ulong(8u)) == 8); + assert(is(typeof(abs(byte(-8))) == byte)); + assert(is(typeof(abs(ubyte(8u))) == ubyte)); + assert(is(typeof(abs(short(-8))) == short)); + assert(is(typeof(abs(ushort(8u))) == ushort)); + assert(is(typeof(abs(int(-8))) == int)); + assert(is(typeof(abs(uint(8u))) == uint)); + assert(is(typeof(abs(long(-8))) == long)); + assert(is(typeof(abs(ulong(8u))) == ulong)); } @safe pure nothrow @nogc unittest @@ -297,7 +308,7 @@ if (isFloatingPoint!T) // If both are huge, avoid overflow by scaling by 2^^-N. // If both are tiny, avoid underflow by scaling by 2^^N. import core.math : fabs, sqrt; - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias F = floatTraits!T; @@ -963,9 +974,9 @@ private T powIntegralImpl(PowType type, T)(T val) else { static if (isSigned!T) - return cast(Unqual!T) (val < 0 ? -(T(1) << bsr(0 - val) + type) : T(1) << bsr(val) + type); + return cast() cast(T) (val < 0 ? -(T(1) << bsr(0 - val) + type) : T(1) << bsr(val) + type); else - return cast(Unqual!T) (T(1) << bsr(val) + type); + return cast() cast(T) (T(1) << bsr(val) + type); } } diff --git a/std/math/exponential.d b/std/math/exponential.d index b1922037e60..13103794660 100644 --- a/std/math/exponential.d +++ b/std/math/exponential.d @@ -256,7 +256,7 @@ if (isFloatingPoint!(F) && isIntegral!(G)) * If x is 0 and n is negative, the result is the same as the result of a * division by zero. */ -typeof(Unqual!(F).init * Unqual!(G).init) pow(F, G)(F x, G n) @nogc @trusted pure nothrow +typeof(Unqual!(F).init * Unqual!(G).init) pow(F, G)(F x, G n) @nogc @safe pure nothrow if (isIntegral!(F) && isIntegral!(G)) { import std.traits : isSigned; @@ -422,217 +422,7 @@ if (isIntegral!I && isFloatingPoint!F) Unqual!(Largest!(F, G)) pow(F, G)(F x, G y) @nogc @trusted pure nothrow if (isFloatingPoint!(F) && isFloatingPoint!(G)) { - import core.math : fabs, sqrt; - import std.math.traits : isInfinity, isNaN, signbit; - - alias Float = typeof(return); - - static real impl(real x, real y) @nogc pure nothrow - { - // Special cases. - if (isNaN(y)) - return y; - if (isNaN(x) && y != 0.0) - return x; - - // Even if x is NaN. - if (y == 0.0) - return 1.0; - if (y == 1.0) - return x; - - if (isInfinity(y)) - { - if (isInfinity(x)) - { - if (!signbit(y) && !signbit(x)) - return F.infinity; - else - return F.nan; - } - else if (fabs(x) > 1) - { - if (signbit(y)) - return +0.0; - else - return F.infinity; - } - else if (fabs(x) == 1) - { - return F.nan; - } - else // < 1 - { - if (signbit(y)) - return F.infinity; - else - return +0.0; - } - } - if (isInfinity(x)) - { - if (signbit(x)) - { - long i = cast(long) y; - if (y > 0.0) - { - if (i == y && i & 1) - return -F.infinity; - else if (i == y) - return F.infinity; - else - return -F.nan; - } - else if (y < 0.0) - { - if (i == y && i & 1) - return -0.0; - else if (i == y) - return +0.0; - else - return F.nan; - } - } - else - { - if (y > 0.0) - return F.infinity; - else if (y < 0.0) - return +0.0; - } - } - - if (x == 0.0) - { - if (signbit(x)) - { - long i = cast(long) y; - if (y > 0.0) - { - if (i == y && i & 1) - return -0.0; - else - return +0.0; - } - else if (y < 0.0) - { - if (i == y && i & 1) - return -F.infinity; - else - return F.infinity; - } - } - else - { - if (y > 0.0) - return +0.0; - else if (y < 0.0) - return F.infinity; - } - } - if (x == 1.0) - return 1.0; - - if (y >= F.max) - { - if ((x > 0.0 && x < 1.0) || (x > -1.0 && x < 0.0)) - return 0.0; - if (x > 1.0 || x < -1.0) - return F.infinity; - } - if (y <= -F.max) - { - if ((x > 0.0 && x < 1.0) || (x > -1.0 && x < 0.0)) - return F.infinity; - if (x > 1.0 || x < -1.0) - return 0.0; - } - - if (x >= F.max) - { - if (y > 0.0) - return F.infinity; - else - return 0.0; - } - if (x <= -F.max) - { - long i = cast(long) y; - if (y > 0.0) - { - if (i == y && i & 1) - return -F.infinity; - else - return F.infinity; - } - else if (y < 0.0) - { - if (i == y && i & 1) - return -0.0; - else - return +0.0; - } - } - - // Integer power of x. - long iy = cast(long) y; - if (iy == y && fabs(y) < 32_768.0) - return pow(x, iy); - - real sign = 1.0; - if (x < 0) - { - // Result is real only if y is an integer - // Check for a non-zero fractional part - enum maxOdd = pow(2.0L, real.mant_dig) - 1.0L; - static if (maxOdd > ulong.max) - { - // Generic method, for any FP type - import std.math.rounding : floor; - if (floor(y) != y) - return sqrt(x); // Complex result -- create a NaN - - const hy = 0.5 * y; - if (floor(hy) != hy) - sign = -1.0; - } - else - { - // Much faster, if ulong has enough precision - const absY = fabs(y); - if (absY <= maxOdd) - { - const uy = cast(ulong) absY; - if (uy != absY) - return sqrt(x); // Complex result -- create a NaN - - if (uy & 1) - sign = -1.0; - } - } - x = -x; - } - version (INLINE_YL2X) - { - // If x > 0, x ^^ y == 2 ^^ ( y * log2(x) ) - // TODO: This is not accurate in practice. A fast and accurate - // (though complicated) method is described in: - // "An efficient rounding boundary test for pow(x, y) - // in double precision", C.Q. Lauter and V. Lefèvre, INRIA (2007). - return sign * exp2( core.math.yl2x(x, y) ); - } - else - { - // If x > 0, x ^^ y == 2 ^^ ( y * log2(x) ) - // TODO: This is not accurate in practice. A fast and accurate - // (though complicated) method is described in: - // "An efficient rounding boundary test for pow(x, y) - // in double precision", C.Q. Lauter and V. Lefèvre, INRIA (2007). - Float w = exp2(y * log2(x)); - return sign * w; - } - } - return impl(x, y); + return _powImpl(x, y); } /// @@ -802,6 +592,216 @@ if (isFloatingPoint!(F) && isFloatingPoint!(G)) assert(pow(-real.infinity, 0.0) == 1.0); } +private real _powImpl(real x, real y) @safe @nogc pure nothrow +{ + alias F = real; + import core.math : fabs, sqrt; + import std.math.traits : isInfinity, isNaN, signbit; + + // Special cases. + if (isNaN(y)) + return y; + if (isNaN(x) && y != 0.0) + return x; + + // Even if x is NaN. + if (y == 0.0) + return 1.0; + if (y == 1.0) + return x; + + if (isInfinity(y)) + { + if (isInfinity(x)) + { + if (!signbit(y) && !signbit(x)) + return F.infinity; + else + return F.nan; + } + else if (fabs(x) > 1) + { + if (signbit(y)) + return +0.0; + else + return F.infinity; + } + else if (fabs(x) == 1) + { + return F.nan; + } + else // < 1 + { + if (signbit(y)) + return F.infinity; + else + return +0.0; + } + } + if (isInfinity(x)) + { + if (signbit(x)) + { + long i = cast(long) y; + if (y > 0.0) + { + if (i == y && i & 1) + return -F.infinity; + else if (i == y) + return F.infinity; + else + return -F.nan; + } + else if (y < 0.0) + { + if (i == y && i & 1) + return -0.0; + else if (i == y) + return +0.0; + else + return F.nan; + } + } + else + { + if (y > 0.0) + return F.infinity; + else if (y < 0.0) + return +0.0; + } + } + + if (x == 0.0) + { + if (signbit(x)) + { + long i = cast(long) y; + if (y > 0.0) + { + if (i == y && i & 1) + return -0.0; + else + return +0.0; + } + else if (y < 0.0) + { + if (i == y && i & 1) + return -F.infinity; + else + return F.infinity; + } + } + else + { + if (y > 0.0) + return +0.0; + else if (y < 0.0) + return F.infinity; + } + } + if (x == 1.0) + return 1.0; + + if (y >= F.max) + { + if ((x > 0.0 && x < 1.0) || (x > -1.0 && x < 0.0)) + return 0.0; + if (x > 1.0 || x < -1.0) + return F.infinity; + } + if (y <= -F.max) + { + if ((x > 0.0 && x < 1.0) || (x > -1.0 && x < 0.0)) + return F.infinity; + if (x > 1.0 || x < -1.0) + return 0.0; + } + + if (x >= F.max) + { + if (y > 0.0) + return F.infinity; + else + return 0.0; + } + if (x <= -F.max) + { + long i = cast(long) y; + if (y > 0.0) + { + if (i == y && i & 1) + return -F.infinity; + else + return F.infinity; + } + else if (y < 0.0) + { + if (i == y && i & 1) + return -0.0; + else + return +0.0; + } + } + + // Integer power of x. + long iy = cast(long) y; + if (iy == y && fabs(y) < 32_768.0) + return pow(x, iy); + + real sign = 1.0; + if (x < 0) + { + // Result is real only if y is an integer + // Check for a non-zero fractional part + enum maxOdd = pow(2.0L, real.mant_dig) - 1.0L; + static if (maxOdd > ulong.max) + { + // Generic method, for any FP type + import std.math.rounding : floor; + if (floor(y) != y) + return sqrt(x); // Complex result -- create a NaN + + const hy = 0.5 * y; + if (floor(hy) != hy) + sign = -1.0; + } + else + { + // Much faster, if ulong has enough precision + const absY = fabs(y); + if (absY <= maxOdd) + { + const uy = cast(ulong) absY; + if (uy != absY) + return sqrt(x); // Complex result -- create a NaN + + if (uy & 1) + sign = -1.0; + } + } + x = -x; + } + version (INLINE_YL2X) + { + // If x > 0, x ^^ y == 2 ^^ ( y * log2(x) ) + // TODO: This is not accurate in practice. A fast and accurate + // (though complicated) method is described in: + // "An efficient rounding boundary test for pow(x, y) + // in double precision", C.Q. Lauter and V. Lefèvre, INRIA (2007). + return sign * exp2( core.math.yl2x(x, y) ); + } + else + { + // If x > 0, x ^^ y == 2 ^^ ( y * log2(x) ) + // TODO: This is not accurate in practice. A fast and accurate + // (though complicated) method is described in: + // "An efficient rounding boundary test for pow(x, y) + // in double precision", C.Q. Lauter and V. Lefèvre, INRIA (2007). + auto w = exp2(y * log2(x)); + return sign * w; + } +} + /** Computes the value of a positive integer `x`, raised to the power `n`, modulo `m`. * * Params: @@ -1002,8 +1002,7 @@ float exp(float x) @safe pure nothrow @nogc { return __ctfe ? cast(float) exp(ca private T expImpl(T)(T x) @safe pure nothrow @nogc { - import std.math : floatTraits, RealFormat; - import std.math.traits : isNaN; + import std.math.traits : floatTraits, RealFormat, isNaN; import std.math.rounding : floor; import std.math.algebraic : poly; import std.math.constants : LOG2E; @@ -1143,7 +1142,7 @@ private T expImpl(T)(T x) @safe pure nothrow @nogc @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.math.operations : NaN, feqrel, isClose; import std.math.constants : E; import std.math.traits : isIdentical; @@ -1517,7 +1516,7 @@ L_largenegative: private T expm1Impl(T)(T x) @safe pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.math.rounding : floor; import std.math.algebraic : poly; import std.math.constants : LN2; @@ -1909,8 +1908,7 @@ L_was_nan: private T exp2Impl(T)(T x) @nogc @safe pure nothrow { - import std.math : floatTraits, RealFormat; - import std.math.traits : isNaN; + import std.math.traits : floatTraits, RealFormat, isNaN; import std.math.rounding : floor; import std.math.algebraic : poly; @@ -2098,8 +2096,7 @@ private T exp2Impl(T)(T x) @nogc @safe pure nothrow T frexp(T)(const T value, out int exp) @trusted pure nothrow @nogc if (isFloatingPoint!T) { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; - import std.math.traits : isSubnormal; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB, isSubnormal; if (__ctfe) { @@ -2353,8 +2350,7 @@ if (isFloatingPoint!T) @safe unittest { - import std.math : floatTraits, RealFormat; - import std.math.traits : isIdentical; + import std.math.traits : floatTraits, RealFormat, isIdentical; import std.meta : AliasSeq; import std.typecons : tuple, Tuple; @@ -2486,7 +2482,7 @@ if (isFloatingPoint!T) int ilogb(T)(const T x) @trusted pure nothrow @nogc if (isFloatingPoint!T) { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; import core.bitop : bsr; alias F = floatTraits!T; @@ -2681,7 +2677,7 @@ alias FP_ILOGBNAN = core.stdc.math.FP_ILOGBNAN; @safe nothrow @nogc unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.math.operations : nextUp; import std.meta : AliasSeq; import std.typecons : Tuple; @@ -2778,7 +2774,7 @@ float ldexp(float n, int exp) @safe pure nothrow @nogc { return core.math.ldex @safe pure nothrow @nogc unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (floatTraits!(real).realFormat == RealFormat.ieeeExtended || floatTraits!(real).realFormat == RealFormat.ieeeExtended53 || @@ -2866,7 +2862,7 @@ private // Coefficients shared across log(), log2(), log10(), log1p(). template LogCoeffs(T) { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (floatTraits!T.realFormat == RealFormat.ieeeQuadruple) { @@ -3033,13 +3029,13 @@ private 4.5270000862445199635215E-5, ]; static immutable double[7] logp1Q = [ - 1.0000000000000000000000E0, 6.0118660497603843919306E1, 2.1642788614495947685003E2, 3.0909872225312059774938E2, 2.2176239823732856465394E2, 8.3047565967967209469434E1, 1.5062909083469192043167E1, + 1.0000000000000000000000E0, ]; static immutable double[7] log10P = [ @@ -3101,13 +3097,13 @@ private 4.5270000862E-5, ]; static immutable float[7] logp1Q = [ - 1.00000000000E0, 6.01186604976E1, 2.16427886144E2, 3.09098722253E2, 2.21762398237E2, 8.30475659679E1, 1.50629090834E1, + 1.00000000000E0, ]; // log2 and log10 uses the same coefficients as log. @@ -3179,8 +3175,7 @@ private T logImpl(T, bool LOG1P = false)(T x) @safe pure nothrow @nogc { import std.math.constants : SQRT1_2; import std.math.algebraic : poly; - import std.math.traits : isInfinity, isNaN, signbit; - import std.math : floatTraits, RealFormat; + import std.math.traits : isInfinity, isNaN, signbit, floatTraits, RealFormat; alias coeffs = LogCoeffs!T; alias F = floatTraits!T; @@ -3306,7 +3301,7 @@ private T logImpl(T, bool LOG1P = false)(T x) @safe pure nothrow @nogc @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.meta : AliasSeq; static void testLog(T)(T[2][] vals) @@ -3323,7 +3318,7 @@ private T logImpl(T, bool LOG1P = false)(T x) @safe pure nothrow @nogc } static foreach (F; AliasSeq!(float, double, real)) {{ - F[2][24] vals = [ + scope F[2][] vals = [ [F(1), F(0x0p+0)], [F(2), F(0x1.62e42fefa39ef358p-1)], [F(4), F(0x1.62e42fefa39ef358p+0)], [F(8), F(0x1.0a2b23f3bab73682p+1)], [F(16), F(0x1.62e42fefa39ef358p+1)], [F(32), F(0x1.bb9d3beb8c86b02ep+1)], @@ -3335,6 +3330,9 @@ private T logImpl(T, bool LOG1P = false)(T x) @safe pure nothrow @nogc [F(17), F(0x1.6aa6bc1fa7f79cfp+1)], [F(31), F(0x1.b78ce48912b59f12p+1)], [F(33), F(0x1.bf8d8f4d5b8d1038p+1)], [F(63), F(0x1.09291e8e3181b20ep+2)], [F(65), F(0x1.0b292939429755ap+2)], [F(-0), -F.infinity], [F(0), -F.infinity], + [F(0.1), F(-0x1.26bb1bbb5551582ep+1)], [F(0.25), F(-0x1.62e42fefa39ef358p+0)], + [F(0.75), F(-0x1.269621134db92784p-2)], [F(0.875), F(-0x1.1178e8227e47bde4p-3)], + [F(10), F(0x1.26bb1bbb5551582ep+1)], [F(100), F(0x1.26bb1bbb5551582ep+2)], [F(10000), F(0x1.26bb1bbb5551582ep+3)], ]; testLog(vals); @@ -3449,8 +3447,7 @@ private T log10Impl(T)(T x) @safe pure nothrow @nogc { import std.math.constants : SQRT1_2; import std.math.algebraic : poly; - import std.math.traits : isNaN, isInfinity, signbit; - import std.math : floatTraits, RealFormat; + import std.math.traits : isNaN, isInfinity, signbit, floatTraits, RealFormat; alias coeffs = LogCoeffs!T; alias F = floatTraits!T; @@ -3555,7 +3552,7 @@ Ldone: @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.meta : AliasSeq; static void testLog10(T)(T[2][] vals) @@ -3572,7 +3569,7 @@ Ldone: } static foreach (F; AliasSeq!(float, double, real)) {{ - F[2][24] vals = [ + scope F[2][] vals = [ [F(1), F(0x0p+0)], [F(2), F(0x1.34413509f79fef32p-2)], [F(4), F(0x1.34413509f79fef32p-1)], [F(8), F(0x1.ce61cf8ef36fe6cap-1)], [F(16), F(0x1.34413509f79fef32p+0)], [F(32), F(0x1.8151824c7587eafep+0)], @@ -3584,7 +3581,9 @@ Ldone: [F(17), F(0x1.3afeb354b7d9731ap+0)], [F(31), F(0x1.7dc9e145867e62eap+0)], [F(33), F(0x1.84bd545e4baeddp+0)], [F(63), F(0x1.cca1950e4511e192p+0)], [F(65), F(0x1.d01b16f9433cf7b8p+0)], [F(-0), -F.infinity], [F(0), -F.infinity], - [F(10000), F(0x1p+2)], + [F(0.1), F(-0x1p+0)], [F(0.25), F(-0x1.34413509f79fef32p-1)], + [F(0.75), F(-0x1.ffbfc2bbc7803758p-4)], [F(0.875), F(-0x1.db11ed766abf432ep-5)], + [F(10), F(0x1p+0)], [F(100), F(0x1p+1)], [F(10000), F(0x1p+2)], ]; testLog10(vals); }} @@ -3705,7 +3704,7 @@ private T log1pImpl(T)(T x) @safe pure nothrow @nogc import std.math.traits : isNaN, isInfinity, signbit; import std.math.algebraic : poly; import std.math.constants : SQRT1_2, SQRT2; - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; // Special cases. if (isNaN(x) || x == 0.0) @@ -3741,7 +3740,7 @@ private T log1pImpl(T)(T x) @safe pure nothrow @nogc @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.meta : AliasSeq; static void testLog1p(T)(T[2][] vals) @@ -3758,7 +3757,7 @@ private T log1pImpl(T)(T x) @safe pure nothrow @nogc } static foreach (F; AliasSeq!(float, double, real)) {{ - F[2][24] vals = [ + scope F[2][] vals = [ [F(1), F(0x1.62e42fefa39ef358p-1)], [F(2), F(0x1.193ea7aad030a976p+0)], [F(4), F(0x1.9c041f7ed8d336bp+0)], [F(8), F(0x1.193ea7aad030a976p+1)], [F(16), F(0x1.6aa6bc1fa7f79cfp+1)], [F(32), F(0x1.bf8d8f4d5b8d1038p+1)], @@ -3770,6 +3769,9 @@ private T log1pImpl(T)(T x) @safe pure nothrow @nogc [F(17), F(0x1.71f7b3a6b918664cp+1)], [F(31), F(0x1.bb9d3beb8c86b02ep+1)], [F(33), F(0x1.c35fc81b90df59c6p+1)], [F(63), F(0x1.0a2b23f3bab73682p+2)], [F(65), F(0x1.0c234da4a23a6686p+2)], [F(-0), F(-0x0p+0)], [F(0), F(0x0p+0)], + [F(0.1), F(0x1.8663f793c46c69cp-4)], [F(0.25), F(0x1.c8ff7c79a9a21ac4p-3)], + [F(0.75), F(0x1.1e85f5e7040d03ep-1)], [F(0.875), F(0x1.41d8fe84672ae646p-1)], + [F(10), F(0x1.32ee3b77f374bb7cp+1)], [F(100), F(0x1.275e2271bba30be4p+2)], [F(10000), F(0x1.26bbed6fbd84182ep+3)], ]; testLog1p(vals); @@ -3883,7 +3885,7 @@ private T log2Impl(T)(T x) @safe pure nothrow @nogc import std.math.traits : isNaN, isInfinity, signbit; import std.math.constants : SQRT1_2, LOG2E; import std.math.algebraic : poly; - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias coeffs = LogCoeffs!T; alias F = floatTraits!T; @@ -3964,7 +3966,7 @@ Ldone: @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.meta : AliasSeq; static void testLog2(T)(T[2][] vals) @@ -3981,7 +3983,7 @@ Ldone: } static foreach (F; AliasSeq!(float, double, real)) {{ - F[2][24] vals = [ + scope F[2][] vals = [ [F(1), F(0x0p+0)], [F(2), F(0x1p+0)], [F(4), F(0x1p+1)], [F(8), F(0x1.8p+1)], [F(16), F(0x1p+2)], [F(32), F(0x1.4p+2)], @@ -3993,6 +3995,9 @@ Ldone: [F(17), F(0x1.0598fdbeb244c5ap+2)], [F(31), F(0x1.3d118d66c4d4e554p+2)], [F(33), F(0x1.42d75a6eb1dfb0e6p+2)], [F(63), F(0x1.7e8bc1179e0caa9cp+2)], [F(65), F(0x1.816e79685c2d2298p+2)], [F(-0), -F.infinity], [F(0), -F.infinity], + [F(0.1), F(-0x1.a934f0979a3715fcp+1)], [F(0.25), F(-0x1p+1)], + [F(0.75), F(-0x1.a8ff971810a5e182p-2)], [F(0.875), F(-0x1.8a8980abfbd32668p-3)], + [F(10), F(0x1.a934f0979a3715fcp+1)], [F(100), F(0x1.a934f0979a3715fcp+2)], [F(10000), F(0x1.a934f0979a3715fcp+3)], ]; testLog2(vals); @@ -4161,7 +4166,7 @@ private T logbImpl(T)(T x) @trusted pure nothrow @nogc @safe @nogc nothrow unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.meta : AliasSeq; static void testLogb(T)(T[2][] vals) @@ -4178,7 +4183,7 @@ private T logbImpl(T)(T x) @trusted pure nothrow @nogc } static foreach (F; AliasSeq!(float, double, real)) {{ - F[2][24] vals = [ + scope F[2][] vals = [ [F(1), F(0x0p+0)], [F(2), F(0x1p+0)], [F(4), F(0x1p+1)], [F(8), F(0x1.8p+1)], [F(16), F(0x1p+2)], [F(32), F(0x1.4p+2)], @@ -4190,6 +4195,9 @@ private T logbImpl(T)(T x) @trusted pure nothrow @nogc [F(17), F(0x1p+2)], [F(31), F(0x1p+2)], [F(33), F(0x1.4p+2)], [F(63), F(0x1.4p+2)], [F(65), F(0x1.8p+2)], [F(-0), -F.infinity], [F(0), -F.infinity], + [F(0.1), F(-0x1p+2)], [F(0.25), F(-0x1p+1)], + [F(0.75), F(-0x1p+0)], [F(0.875), F(-0x1p+0)], + [F(10), F(0x1.8p+1)], [F(100), F(0x1.8p+2)], [F(10000), F(0x1.ap+3)], ]; testLogb(vals); diff --git a/std/math/hardware.d b/std/math/hardware.d index cca9f3ba10b..501245ba90b 100644 --- a/std/math/hardware.d +++ b/std/math/hardware.d @@ -30,6 +30,7 @@ version (SPARC64) version = SPARC_Any; version (SystemZ) version = IBMZ_Any; version (RISCV32) version = RISCV_Any; version (RISCV64) version = RISCV_Any; +version (LoongArch64) version = LoongArch_Any; version (D_InlineAsm_X86) version = InlineAsm_X86_Any; version (D_InlineAsm_X86_64) version = InlineAsm_X86_Any; @@ -57,6 +58,7 @@ else version (X86_Any) version = IeeeFlagsSupport; else version (PPC_Any) version = IeeeFlagsSupport; else version (RISCV_Any) version = IeeeFlagsSupport; else version (MIPS_Any) version = IeeeFlagsSupport; +else version (LoongArch_Any) version = IeeeFlagsSupport; else version (ARM_Any) version = IeeeFlagsSupport; // Struct FloatingPointControl is only available if hardware FP units are available. @@ -87,6 +89,7 @@ private: // The ARM and PowerPC FPSCR is a 32-bit register. // The SPARC FSR is a 32bit register (64 bits for SPARC 7 & 8, but high bits are uninteresting). // The RISC-V (32 & 64 bit) fcsr is 32-bit register. + // THe LoongArch fcsr (fcsr0) is a 32-bit register. uint flags; version (CRuntime_Microsoft) @@ -150,14 +153,21 @@ private: } else version (RISCV_Any) { - mixin(` uint result = void; asm pure nothrow @nogc { "frflags %0" : "=r" (result); } return result; - `); + } + else version (LoongArch_Any) + { + uint result = void; + asm pure nothrow @nogc + { + "movfcsr2gr %0, $fcsr2" : "=r" (result); + } + return result & EXCEPTIONS_MASK; } else assert(0, "Not yet supported"); @@ -183,13 +193,18 @@ private: } else version (RISCV_Any) { - mixin(` uint newValues = 0x0; asm pure nothrow @nogc { "fsflags %0" : : "r" (newValues); } - `); + } + else version (LoongArch_Any) + { + asm nothrow @nogc + { + "movgr2fcsr $fcsr2,$r0"; + } } else { @@ -613,6 +628,21 @@ nothrow @nogc: | inexactException, } } + else version (LoongArch_Any) + { + enum : ExceptionMask + { + inexactException = 0x00, + divByZeroException = 0x01, + overflowException = 0x02, + underflowException = 0x04, + invalidException = 0x08, + severeExceptions = overflowException | divByZeroException + | invalidException, + allExceptions = severeExceptions | underflowException + | inexactException, + } + } else version (MIPS_Any) { enum : ExceptionMask @@ -700,6 +730,8 @@ nothrow @nogc: return true; else version (MIPS_Any) return true; + else version (LoongArch_Any) + return true; else version (ARM_Any) { // The hasExceptionTraps_impl function is basically pure, @@ -773,6 +805,10 @@ private: { alias ControlState = uint; } + else version (LoongArch_Any) + { + alias ControlState = uint; + } else version (MIPS_Any) { alias ControlState = uint; @@ -835,14 +871,22 @@ private: } else version (RISCV_Any) { - mixin(` ControlState cont; asm pure nothrow @nogc { "frcsr %0" : "=r" (cont); } return cont; - `); + } + else version (LoongArch_Any) + { + ControlState cont; + asm pure nothrow @nogc + { + "movfcsr2gr %0, $fcsr0" : "=r" (cont); + } + cont &= (roundingMask | allExceptions); + return cont; } else assert(0, "Not yet supported"); @@ -880,12 +924,18 @@ private: } else version (RISCV_Any) { - mixin(` asm pure nothrow @nogc { "fscsr %0" : : "r" (newState); } - `); + } + else version (LoongArch_Any) + { + asm nothrow @nogc + { + "movgr2fcsr $fcsr0,%0" : + : "r" (newState & (roundingMask | allExceptions)); + } } else assert(0, "Not yet supported"); diff --git a/std/math/operations.d b/std/math/operations.d index f2e18005e25..d456e29adb6 100644 --- a/std/math/operations.d +++ b/std/math/operations.d @@ -44,7 +44,7 @@ import std.traits : CommonType, isFloatingPoint, isIntegral, Unqual; */ real NaN(ulong payload) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias F = floatTraits!(real); static if (F.realFormat == RealFormat.ieeeExtended || @@ -136,7 +136,7 @@ real NaN(ulong payload) @trusted pure nothrow @nogc @system pure nothrow @nogc unittest // not @safe because taking address of local. { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (floatTraits!(real).realFormat == RealFormat.ieeeDouble) { @@ -159,7 +159,7 @@ real NaN(ulong payload) @trusted pure nothrow @nogc */ ulong getNaNPayload(real x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; // assert(isNaN(x)); alias F = floatTraits!(real); @@ -283,7 +283,7 @@ debug(UnitTest) */ real nextUp(real x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; alias F = floatTraits!(real); static if (F.realFormat != RealFormat.ieeeDouble) @@ -522,8 +522,7 @@ float nextDown(float x) @safe pure nothrow @nogc @safe pure nothrow @nogc unittest { - import std.math : floatTraits, RealFormat; - import std.math.traits : isIdentical; + import std.math.traits : floatTraits, RealFormat, isIdentical; static if (floatTraits!(real).realFormat == RealFormat.ieeeExtended || floatTraits!(real).realFormat == RealFormat.ieeeDouble || @@ -865,7 +864,7 @@ real fma(real x, real y, real z) @safe pure nothrow @nogc { return (x * y) + z; int feqrel(X)(const X x, const X y) @trusted pure nothrow @nogc if (isFloatingPoint!(X)) { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import core.math : fabs; /* Public Domain. Author: Don Clugston, 18 Aug 2005. @@ -1287,11 +1286,12 @@ bool isClose(T, U, V = CommonType!(FloatingPointBaseType!T,FloatingPointBaseType // two numbers if (lhs == rhs) return true; - static if (is(typeof(lhs.infinity)) && is(typeof(rhs.infinity))) - { - if (lhs == lhs.infinity || rhs == rhs.infinity || - lhs == -lhs.infinity || rhs == -rhs.infinity) return false; - } + static if (is(typeof(lhs.infinity))) + if (lhs == lhs.infinity || lhs == -lhs.infinity) + return false; + static if (is(typeof(rhs.infinity))) + if (rhs == rhs.infinity || rhs == -rhs.infinity) + return false; import std.math.algebraic : abs; @@ -1406,6 +1406,8 @@ bool isClose(T, U, V = CommonType!(FloatingPointBaseType!T,FloatingPointBaseType assert(!isClose(1,real.nan)); assert(!isClose(real.nan,real.max)); assert(!isClose(real.nan,real.nan)); + + assert(!isClose(-double.infinity, 1)); } @safe pure nothrow @nogc unittest @@ -1492,7 +1494,7 @@ private template FloatingPointBaseType(T) int cmp(T)(const(T) x, const(T) y) @nogc @trusted pure nothrow if (isFloatingPoint!T) { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias F = floatTraits!T; @@ -1720,7 +1722,7 @@ if (isFloatingPoint!T) FloatingPointBitpattern!T extractBitpattern(T)(const(T) value) @trusted if (isFloatingPoint!T) { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; T val = value; FloatingPointBitpattern!T ret; @@ -1892,7 +1894,7 @@ if (isFloatingPoint!T) @safe pure unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias F = floatTraits!real; static if (F.realFormat == RealFormat.ieeeExtended) @@ -1943,14 +1945,14 @@ if (isFloatingPoint!T) @safe pure unittest { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.math.exponential : log2; alias F = floatTraits!real; // log2 is broken for x87-reals on some computers in CTFE // the following test excludes these computers from the test - // (issue 21757) + // (https://issues.dlang.org/show_bug.cgi?id=21757) enum test = cast(int) log2(3.05e2312L); static if (F.realFormat == RealFormat.ieeeExtended && test == 7681) { diff --git a/std/math/package.d b/std/math/package.d index 19982ec216a..0d1ecc35642 100644 --- a/std/math/package.d +++ b/std/math/package.d @@ -3,7 +3,7 @@ /** * Contains the elementary mathematical functions (powers, roots, * and trigonometric functions), and low-level floating-point operations. - * Mathematical special functions are available in `std.mathspecial`. + * Mathematical special functions are available in $(MREF std, mathspecial). * $(SCRIPT inhibitQuickIndex = 1;) @@ -168,12 +168,6 @@ public import std.math.rounding; public import std.math.traits; public import std.math.trigonometry; -// @@@DEPRECATED_2.102@@@ -// Note: Exposed accidentally, should be deprecated / removed -deprecated("std.meta.AliasSeq was unintentionally available from std.math " - ~ "and will be removed after 2.102. Please import std.meta instead") -public import std.meta : AliasSeq; - package(std): // Not public yet /* Return the value that lies halfway between x and y on the IEEE number line. * @@ -327,169 +321,3 @@ else static assert(real.mant_dig == 53 || real.mant_dig == 113, "Only 64-bit and 128-bit reals are supported for BigEndian CPUs."); } - -// Underlying format exposed through floatTraits -enum RealFormat -{ - ieeeHalf, - ieeeSingle, - ieeeDouble, - ieeeExtended, // x87 80-bit real - ieeeExtended53, // x87 real rounded to precision of double. - ibmExtended, // IBM 128-bit extended - ieeeQuadruple, -} - -// Constants used for extracting the components of the representation. -// They supplement the built-in floating point properties. -template floatTraits(T) -{ - import std.traits : Unqual; - - // EXPMASK is a ushort mask to select the exponent portion (without sign) - // EXPSHIFT is the number of bits the exponent is left-shifted by in its ushort - // EXPBIAS is the exponent bias - 1 (exp == EXPBIAS yields ×2^-1). - // EXPPOS_SHORT is the index of the exponent when represented as a ushort array. - // SIGNPOS_BYTE is the index of the sign when represented as a ubyte array. - // RECIP_EPSILON is the value such that (smallest_subnormal) * RECIP_EPSILON == T.min_normal - enum Unqual!T RECIP_EPSILON = (1/T.epsilon); - static if (T.mant_dig == 24) - { - // Single precision float - enum ushort EXPMASK = 0x7F80; - enum ushort EXPSHIFT = 7; - enum ushort EXPBIAS = 0x3F00; - enum uint EXPMASK_INT = 0x7F80_0000; - enum uint MANTISSAMASK_INT = 0x007F_FFFF; - enum realFormat = RealFormat.ieeeSingle; - version (LittleEndian) - { - enum EXPPOS_SHORT = 1; - enum SIGNPOS_BYTE = 3; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else static if (T.mant_dig == 53) - { - static if (T.sizeof == 8) - { - // Double precision float, or real == double - enum ushort EXPMASK = 0x7FF0; - enum ushort EXPSHIFT = 4; - enum ushort EXPBIAS = 0x3FE0; - enum uint EXPMASK_INT = 0x7FF0_0000; - enum uint MANTISSAMASK_INT = 0x000F_FFFF; // for the MSB only - enum ulong MANTISSAMASK_LONG = 0x000F_FFFF_FFFF_FFFF; - enum realFormat = RealFormat.ieeeDouble; - version (LittleEndian) - { - enum EXPPOS_SHORT = 3; - enum SIGNPOS_BYTE = 7; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else static if (T.sizeof == 12) - { - // Intel extended real80 rounded to double - enum ushort EXPMASK = 0x7FFF; - enum ushort EXPSHIFT = 0; - enum ushort EXPBIAS = 0x3FFE; - enum realFormat = RealFormat.ieeeExtended53; - version (LittleEndian) - { - enum EXPPOS_SHORT = 4; - enum SIGNPOS_BYTE = 9; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else - static assert(false, "No traits support for " ~ T.stringof); - } - else static if (T.mant_dig == 64) - { - // Intel extended real80 - enum ushort EXPMASK = 0x7FFF; - enum ushort EXPSHIFT = 0; - enum ushort EXPBIAS = 0x3FFE; - enum realFormat = RealFormat.ieeeExtended; - version (LittleEndian) - { - enum EXPPOS_SHORT = 4; - enum SIGNPOS_BYTE = 9; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else static if (T.mant_dig == 113) - { - // Quadruple precision float - enum ushort EXPMASK = 0x7FFF; - enum ushort EXPSHIFT = 0; - enum ushort EXPBIAS = 0x3FFE; - enum realFormat = RealFormat.ieeeQuadruple; - version (LittleEndian) - { - enum EXPPOS_SHORT = 7; - enum SIGNPOS_BYTE = 15; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else static if (T.mant_dig == 106) - { - // IBM Extended doubledouble - enum ushort EXPMASK = 0x7FF0; - enum ushort EXPSHIFT = 4; - enum realFormat = RealFormat.ibmExtended; - - // For IBM doubledouble the larger magnitude double comes first. - // It's really a double[2] and arrays don't index differently - // between little and big-endian targets. - enum DOUBLEPAIR_MSB = 0; - enum DOUBLEPAIR_LSB = 1; - - // The exponent/sign byte is for most significant part. - version (LittleEndian) - { - enum EXPPOS_SHORT = 3; - enum SIGNPOS_BYTE = 7; - } - else - { - enum EXPPOS_SHORT = 0; - enum SIGNPOS_BYTE = 0; - } - } - else - static assert(false, "No traits support for " ~ T.stringof); -} - -// These apply to all floating-point types -version (LittleEndian) -{ - enum MANTISSA_LSB = 0; - enum MANTISSA_MSB = 1; -} -else -{ - enum MANTISSA_LSB = 1; - enum MANTISSA_MSB = 0; -} diff --git a/std/math/rounding.d b/std/math/rounding.d index 9cf4efd564b..0639078c55f 100644 --- a/std/math/rounding.d +++ b/std/math/rounding.d @@ -547,7 +547,7 @@ long lrint(real x) @trusted pure nothrow @nogc } else { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; alias F = floatTraits!(real); static if (F.realFormat == RealFormat.ieeeDouble) @@ -772,27 +772,18 @@ version (Posix) * * If the fractional part of x is exactly 0.5, the return value is rounded * away from zero. - * - * $(BLUE This function is not implemented for Digital Mars C runtime.) */ long lround(real x) @trusted nothrow @nogc { - version (CRuntime_DigitalMars) - assert(0, "lround not implemented"); - else - return core.stdc.math.llroundl(x); + return core.stdc.math.llroundl(x); } /// @safe nothrow @nogc unittest { - version (CRuntime_DigitalMars) {} - else - { - assert(lround(0.49) == 0); - assert(lround(0.5) == 1); - assert(lround(1.5) == 2); - } + assert(lround(0.49) == 0); + assert(lround(0.5) == 1); + assert(lround(1.5) == 2); } /** @@ -892,7 +883,7 @@ long rndtol(float x) @safe pure nothrow @nogc { return rndtol(cast(real) x); } // Helper for floor/ceil T floorImpl(T)(const T x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; alias F = floatTraits!(T); // Take care not to trigger library calls from the compiler, diff --git a/std/math/traits.d b/std/math/traits.d index 2841bad219f..81ab1b789db 100644 --- a/std/math/traits.d +++ b/std/math/traits.d @@ -137,7 +137,7 @@ if (isFloatingPoint!(X)) */ bool isFinite(X)(X x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (__traits(isFloating, X)) if (__ctfe) @@ -202,7 +202,7 @@ bool isFinite(X)(X x) @trusted pure nothrow @nogc */ bool isNormal(X)(X x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; static if (__traits(isFloating, X)) if (__ctfe) @@ -264,7 +264,7 @@ bool isNormal(X)(X x) @trusted pure nothrow @nogc */ bool isSubnormal(X)(X x) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; static if (__traits(isFloating, X)) if (__ctfe) @@ -344,7 +344,7 @@ bool isSubnormal(X)(X x) @trusted pure nothrow @nogc bool isInfinity(X)(X x) @nogc @trusted pure nothrow if (isFloatingPoint!(X)) { - import std.math : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; + import std.math.traits : floatTraits, RealFormat, MANTISSA_MSB, MANTISSA_LSB; alias F = floatTraits!(X); static if (F.realFormat == RealFormat.ieeeSingle) @@ -466,7 +466,7 @@ if (isFloatingPoint!(X)) */ bool isIdentical(real x, real y) @trusted pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; // We're doing a bitwise comparison so the endianness is irrelevant. long* pxs = cast(long *)&x; @@ -510,7 +510,7 @@ bool isIdentical(real x, real y) @trusted pure nothrow @nogc */ int signbit(X)(X x) @nogc @trusted pure nothrow { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; if (__ctfe) { @@ -594,7 +594,7 @@ Returns: R copysign(R, X)(R to, X from) @trusted pure nothrow @nogc if (isFloatingPoint!(R) && isFloatingPoint!(X)) { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; if (__ctfe) { @@ -851,3 +851,168 @@ if (isNumeric!X) }} } +// Underlying format exposed through floatTraits +enum RealFormat +{ + ieeeHalf, + ieeeSingle, + ieeeDouble, + ieeeExtended, // x87 80-bit real + ieeeExtended53, // x87 real rounded to precision of double. + ibmExtended, // IBM 128-bit extended + ieeeQuadruple, +} + +// Constants used for extracting the components of the representation. +// They supplement the built-in floating point properties. +template floatTraits(T) +{ + import std.traits : Unqual; + + // EXPMASK is a ushort mask to select the exponent portion (without sign) + // EXPSHIFT is the number of bits the exponent is left-shifted by in its ushort + // EXPBIAS is the exponent bias - 1 (exp == EXPBIAS yields ×2^-1). + // EXPPOS_SHORT is the index of the exponent when represented as a ushort array. + // SIGNPOS_BYTE is the index of the sign when represented as a ubyte array. + // RECIP_EPSILON is the value such that (smallest_subnormal) * RECIP_EPSILON == T.min_normal + enum Unqual!T RECIP_EPSILON = (1/T.epsilon); + static if (T.mant_dig == 24) + { + // Single precision float + enum ushort EXPMASK = 0x7F80; + enum ushort EXPSHIFT = 7; + enum ushort EXPBIAS = 0x3F00; + enum uint EXPMASK_INT = 0x7F80_0000; + enum uint MANTISSAMASK_INT = 0x007F_FFFF; + enum realFormat = RealFormat.ieeeSingle; + version (LittleEndian) + { + enum EXPPOS_SHORT = 1; + enum SIGNPOS_BYTE = 3; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else static if (T.mant_dig == 53) + { + static if (T.sizeof == 8) + { + // Double precision float, or real == double + enum ushort EXPMASK = 0x7FF0; + enum ushort EXPSHIFT = 4; + enum ushort EXPBIAS = 0x3FE0; + enum uint EXPMASK_INT = 0x7FF0_0000; + enum uint MANTISSAMASK_INT = 0x000F_FFFF; // for the MSB only + enum ulong MANTISSAMASK_LONG = 0x000F_FFFF_FFFF_FFFF; + enum realFormat = RealFormat.ieeeDouble; + version (LittleEndian) + { + enum EXPPOS_SHORT = 3; + enum SIGNPOS_BYTE = 7; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else static if (T.sizeof == 12) + { + // Intel extended real80 rounded to double + enum ushort EXPMASK = 0x7FFF; + enum ushort EXPSHIFT = 0; + enum ushort EXPBIAS = 0x3FFE; + enum realFormat = RealFormat.ieeeExtended53; + version (LittleEndian) + { + enum EXPPOS_SHORT = 4; + enum SIGNPOS_BYTE = 9; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else + static assert(false, "No traits support for " ~ T.stringof); + } + else static if (T.mant_dig == 64) + { + // Intel extended real80 + enum ushort EXPMASK = 0x7FFF; + enum ushort EXPSHIFT = 0; + enum ushort EXPBIAS = 0x3FFE; + enum realFormat = RealFormat.ieeeExtended; + version (LittleEndian) + { + enum EXPPOS_SHORT = 4; + enum SIGNPOS_BYTE = 9; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else static if (T.mant_dig == 113) + { + // Quadruple precision float + enum ushort EXPMASK = 0x7FFF; + enum ushort EXPSHIFT = 0; + enum ushort EXPBIAS = 0x3FFE; + enum realFormat = RealFormat.ieeeQuadruple; + version (LittleEndian) + { + enum EXPPOS_SHORT = 7; + enum SIGNPOS_BYTE = 15; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else static if (T.mant_dig == 106) + { + // IBM Extended doubledouble + enum ushort EXPMASK = 0x7FF0; + enum ushort EXPSHIFT = 4; + enum realFormat = RealFormat.ibmExtended; + + // For IBM doubledouble the larger magnitude double comes first. + // It's really a double[2] and arrays don't index differently + // between little and big-endian targets. + enum DOUBLEPAIR_MSB = 0; + enum DOUBLEPAIR_LSB = 1; + + // The exponent/sign byte is for most significant part. + version (LittleEndian) + { + enum EXPPOS_SHORT = 3; + enum SIGNPOS_BYTE = 7; + } + else + { + enum EXPPOS_SHORT = 0; + enum SIGNPOS_BYTE = 0; + } + } + else + static assert(false, "No traits support for " ~ T.stringof); +} + +// These apply to all floating-point types +version (LittleEndian) +{ + enum MANTISSA_LSB = 0; + enum MANTISSA_MSB = 1; +} +else +{ + enum MANTISSA_LSB = 1; + enum MANTISSA_MSB = 0; +} diff --git a/std/math/trigonometry.d b/std/math/trigonometry.d index a3d04c60402..4f5f5c50e55 100644 --- a/std/math/trigonometry.d +++ b/std/math/trigonometry.d @@ -307,7 +307,7 @@ Lret: private T tanImpl(T)(T x) @safe pure nothrow @nogc { - import std.math : floatTraits, RealFormat; + import std.math.traits : floatTraits, RealFormat; import std.math.constants : PI, PI_4; import std.math.rounding : floor; import std.math.algebraic : poly; @@ -675,8 +675,7 @@ float atan(float x) @safe pure nothrow @nogc { return __ctfe ? cast(float) atan( private T atanImpl(T)(T x) @safe pure nothrow @nogc { - import std.math : floatTraits, RealFormat; - import std.math.traits : copysign, isInfinity, signbit; + import std.math.traits : floatTraits, RealFormat, copysign, isInfinity, signbit; import std.math.constants : PI_2, PI_4; import std.math.algebraic : poly; diff --git a/std/mmfile.d b/std/mmfile.d index f8f8a9088b6..b2cab3157d0 100644 --- a/std/mmfile.d +++ b/std/mmfile.d @@ -2,10 +2,22 @@ /** * Read and write memory mapped files. + * + * Memory mapped files are a mechanism in operating systems that allows + * file access through virtual memory. After opening a file with `MmFile`, + * the contents can be read from or written to with standard slice / pointer operations. + * Changes to the memory are automatically reflected in the underlying file. + * + * Memory mapping can increase I/O performance of large files, compared to buffered + * read / write operations from `std.file` and `std.stdio`. However, I/O errors are + * not handled as safely: when for example the disk that the file is on gets removed, + * reading from it may result in a segfault. + * * Copyright: Copyright The D Language Foundation 2004 - 2009. * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). * Authors: $(HTTP digitalmars.com, Walter Bright), * Matthew Wilson + * References: $(LINK https://en.wikipedia.org/wiki/Memory-mapped_file) * Source: $(PHOBOSSRC std/mmfile.d) * * $(SCRIPT inhibitQuickIndex = 1;) @@ -612,23 +624,47 @@ private: { static assert(0); } +} + +/// Read an existing file +@system unittest +{ + import std.file; + std.file.write(deleteme, "hello"); // deleteme is a temporary filename + scope(exit) remove(deleteme); + + // Use a scope class so the file will be closed at the end of this function + scope mmfile = new MmFile(deleteme); + + assert(mmfile.length == "hello".length); + + // Access file contents with the slice operator + // This is typed as `void[]`, so cast to `char[]` or `ubyte[]` to use it + const data = cast(const(char)[]) mmfile[]; + + // At this point, the file content may not have been read yet. + // In that case, the following memory access will intentionally + // trigger a page fault, causing the kernel to load the file contents + assert(data[0 .. 5] == "hello"); +} + +/// Write a new file +@system unittest +{ + import std.file; + scope(exit) remove(deleteme); + + scope mmfile = new MmFile(deleteme, MmFile.Mode.readWriteNew, 5, null); + assert(mmfile.length == 5); + + auto data = cast(ubyte[]) mmfile[]; + + // This write to memory will be reflected in the file contents + data[] = '\n'; + + mmfile.flush(); - // Report error, where errno gives the error number - // void errNo() - // { - // version (Windows) - // { - // throw new FileException(filename, GetLastError()); - // } - // else version (linux) - // { - // throw new FileException(filename, errno); - // } - // else - // { - // static assert(0); - // } - // } + assert(std.file.read(deleteme) == "\n\n\n\n\n"); } @system unittest diff --git a/std/net/curl.d b/std/net/curl.d index 42a34b9bd55..07905fc7003 100644 --- a/std/net/curl.d +++ b/std/net/curl.d @@ -23,7 +23,7 @@ SMTP) ) ) Note: -You may need to link to the $(B curl) library, e.g. by adding $(D "libs": ["curl"]) +You may need to link with the $(B curl) library, e.g. by adding $(D "libs": ["curl"]) to your $(B dub.json) file if you are using $(LINK2 http://code.dlang.org, DUB). Windows x86 note: @@ -32,20 +32,19 @@ $(LINK2 https://downloads.dlang.org/other/index.html, download archive page). This module is not available for iOS, tvOS or watchOS. -Compared to using libcurl directly this module allows simpler client code for +Compared to using libcurl directly, this module allows simpler client code for common uses, requires no unsafe operations, and integrates better with the rest -of the language. Futhermore it provides $(MREF_ALTTEXT range, std,range) +of the language. Furthermore it provides $(MREF_ALTTEXT range, std,range) access to protocols supported by libcurl both synchronously and asynchronously. A high level and a low level API are available. The high level API is built entirely on top of the low level one. The high level API is for commonly used functionality such as HTTP/FTP get. The -$(LREF byLineAsync) and $(LREF byChunkAsync) provides asynchronous -$(MREF_ALTTEXT range, std,range) that performs the request in another -thread while handling a line/chunk in the current thread. +$(LREF byLineAsync) and $(LREF byChunkAsync) functions asynchronously +perform the request given, outputting the fetched content into a $(MREF_ALTTEXT range, std,range). -The low level API allows for streaming and other advanced features. +The low level API allows for streaming, setting request headers and cookies, and other advanced features. $(BOOKTABLE Cheat Sheet, $(TR $(TH Function Name) $(TH Description) @@ -79,18 +78,18 @@ byChunk("dlang.org", 10)) returns a range of ubyte[10] containing the dlang.org web page.) ) $(TR $(TDNW $(LREF byLineAsync)) $(TD $(D -byLineAsync("dlang.org")) returns a range of char[] containing the dlang.org web - page asynchronously.) +byLineAsync("dlang.org")) asynchronously returns a range of char[] containing the dlang.org web + page.) ) $(TR $(TDNW $(LREF byChunkAsync)) $(TD $(D -byChunkAsync("dlang.org", 10)) returns a range of ubyte[10] containing the -dlang.org web page asynchronously.) +byChunkAsync("dlang.org", 10)) asynchronously returns a range of ubyte[10] containing the +dlang.org web page.) ) $(LEADINGROW Low level ) -$(TR $(TDNW $(LREF HTTP)) $(TD `HTTP` struct for advanced usage)) -$(TR $(TDNW $(LREF FTP)) $(TD `FTP` struct for advanced usage)) -$(TR $(TDNW $(LREF SMTP)) $(TD `SMTP` struct for advanced usage)) +$(TR $(TDNW $(LREF HTTP)) $(TD Struct for advanced HTTP usage)) +$(TR $(TDNW $(LREF FTP)) $(TD Struct for advanced FTP usage)) +$(TR $(TDNW $(LREF SMTP)) $(TD Struct for advanced SMTP usage)) ) @@ -135,10 +134,10 @@ http.perform(); First, an instance of the reference-counted HTTP struct is created. Then the custom delegates are set. These will be called whenever the HTTP instance receives a header and a data buffer, respectively. In this simple example, the -headers are written to stdout and the data is ignored. If the request should be +headers are written to stdout and the data is ignored. If the request is stopped before it has finished then return something less than data.length from the onReceive callback. See $(LREF onReceiveHeader)/$(LREF onReceive) for more -information. Finally the HTTP request is effected by calling perform(), which is +information. Finally, the HTTP request is performed by calling perform(), which is synchronous. Source: $(PHOBOSSRC std/net/curl.d) @@ -147,8 +146,8 @@ Copyright: Copyright Jonas Drewsen 2011-2012 License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). Authors: Jonas Drewsen. Some of the SMTP code contributed by Jimmy Cao. -Credits: The functionally is based on $(HTTP curl.haxx.se/libcurl, libcurl). - LibCurl is licensed under an MIT/X derivative license. +Credits: The functionality is based on $(HTTP curl.haxx.se/libcurl, libcurl). + libcurl is licensed under an MIT/X derivative license. */ /* Copyright Jonas Drewsen 2011 - 2012. @@ -1064,7 +1063,7 @@ private auto _basicHTTP(T)(const(char)[] url, const(void)[] sendData, HTTP clien { size_t minLen = min(buf.length, remainingData.length); if (minLen == 0) return 0; - buf[0 .. minLen] = remainingData[0 .. minLen]; + buf[0 .. minLen] = cast(void[]) remainingData[0 .. minLen]; remainingData = remainingData[minLen..$]; return minLen; }; @@ -1203,7 +1202,7 @@ private auto _basicFTP(T)(const(char)[] url, const(void)[] sendData, FTP client) { size_t minLen = min(buf.length, sendData.length); if (minLen == 0) return 0; - buf[0 .. minLen] = sendData[0 .. minLen]; + buf[0 .. minLen] = cast(void[]) sendData[0 .. minLen]; sendData = sendData[minLen..$]; return minLen; }; @@ -2420,9 +2419,10 @@ struct HTTP @system @property void onReceiveHeader(void delegate(in char[] key, in char[] value) callback) { - import std.algorithm.searching : startsWith; - import std.regex : regex, match; + import std.algorithm.searching : findSplit, startsWith; + import std.string : indexOf, chomp; import std.uni : toLower; + import std.exception : assumeUnique; // Wrap incoming callback in order to separate http status line from // http headers. On redirected requests there may be several such @@ -2448,21 +2448,20 @@ struct HTTP return; } - // Normal http header - auto m = match(cast(char[]) header, regex("(.*?): (.*)$")); - - auto fieldName = m.captures[1].toLower().idup; + auto m = header.findSplit(": "); + const(char)[] lowerFieldName = m[0].toLower(); + ///Fixes https://issues.dlang.org/show_bug.cgi?id=24458 + string fieldName = lowerFieldName is m[0] ? lowerFieldName.idup : assumeUnique(lowerFieldName); + auto fieldContent = m[2].chomp; if (fieldName == "content-type") { - auto mct = match(cast(char[]) m.captures[2], - regex("charset=([^;]*)", "i")); - if (!mct.empty && mct.captures.length > 1) - charset = mct.captures[1].idup; + auto io = indexOf(fieldContent, "charset=", No.caseSensitive); + if (io != -1) + charset = fieldContent[io + "charset=".length .. $].findSplit(";")[0].idup; } - - if (!m.empty && callback !is null) - callback(fieldName, m.captures[2]); - headersIn[fieldName] = m.captures[2].idup; + if (!m[1].empty && callback !is null) + callback(fieldName, fieldContent); + headersIn[fieldName] = fieldContent.idup; } catch (UTFException e) { @@ -2480,20 +2479,27 @@ struct HTTP /// Parse status line, as received from / generated by cURL. private static bool parseStatusLine(const char[] header, out StatusLine status) @safe { - import std.conv : to; - import std.regex : regex, match; + import std.algorithm.searching : findSplit, startsWith; + import std.conv : to, ConvException; - const m = match(header, regex(r"^HTTP/(\d+)(?:\.(\d+))? (\d+)(?: (.*))?$")); - if (m.empty) - return false; // Invalid status line - else + if (!header.startsWith("HTTP/")) + return false; + + try { - status.majorVersion = to!ushort(m.captures[1]); - status.minorVersion = m.captures[2].length ? to!ushort(m.captures[2]) : 0; - status.code = to!ushort(m.captures[3]); - status.reason = m.captures[4].idup; + const m = header["HTTP/".length .. $].findSplit(" "); + const v = m[0].findSplit("."); + status.majorVersion = to!ushort(v[0]); + status.minorVersion = v[1].length ? to!ushort(v[2]) : 0; + const s2 = m[2].findSplit(" "); + status.code = to!ushort(s2[0]); + status.reason = s2[2].idup; return true; } + catch (ConvException e) + { + return false; + } } @safe unittest @@ -2506,6 +2512,12 @@ struct HTTP // The HTTP2 protocol is binary; cURL generates this fake text header. assert(parseStatusLine("HTTP/2 200", status) && status == StatusLine(2, 0, 200, null)); + + assert(!parseStatusLine("HTTP/2", status)); + assert(!parseStatusLine("HTTP/2 -1", status)); + assert(!parseStatusLine("HTTP/2 200", status)); + assert(!parseStatusLine("HTTP/2.X 200", status)); + assert(!parseStatusLine("HTTP|2 200", status)); } /** Time condition enumeration as an alias of $(REF CurlTimeCond, etc,c,curl) diff --git a/std/net/isemail.d b/std/net/isemail.d index 12a29fe44c9..2234f3590ca 100644 --- a/std/net/isemail.d +++ b/std/net/isemail.d @@ -111,8 +111,9 @@ if (isSomeChar!(Char)) auto endOrDie = false; auto crlfCount = int.min; // int.min == not defined - foreach (ref i, e ; email) + for (size_t i; i < email.length; i++) { + auto e = email[i]; token = email.get(i, e); switch (context) diff --git a/std/numeric.d b/std/numeric.d index 648b70eeea8..9f0fb564de3 100644 --- a/std/numeric.d +++ b/std/numeric.d @@ -3405,7 +3405,7 @@ private: // This algorithm works by performing the even and odd parts of our FFT // using the "two for the price of one" method mentioned at - // http://www.engineeringproductivitytools.com/stuff/T0001/PT10.HTM#Head521 + // https://web.archive.org/web/20180312110051/http://www.engineeringproductivitytools.com/stuff/T0001/PT10.HTM#Head521 // by making the odd terms into the imaginary components of our new FFT, // and then using symmetry to recombine them. void fftImplPureReal(Ret, R)(R range, Ret buf) const diff --git a/std/outbuffer.d b/std/outbuffer.d index 92af9a9a16a..f6d4ba850f3 100644 --- a/std/outbuffer.d +++ b/std/outbuffer.d @@ -22,9 +22,10 @@ import std.traits : isSomeString; * OutBuffer's byte order is the format native to the computer. * To control the byte order (endianness), use a class derived * from OutBuffer. + * * OutBuffer's internal buffer is allocated with the GC. Pointers * stored into the buffer are scanned by the GC, but you have to - * ensure proper alignment, e.g. by using alignSize((void*).sizeof). + * ensure proper alignment, e.g. by using `alignSize((void*).sizeof)`. */ class OutBuffer @@ -297,7 +298,7 @@ class OutBuffer * Append output of C's vprintf() to internal buffer. */ - void vprintf(scope string format, va_list args) @trusted nothrow + void vprintf(scope string format, va_list args) @system nothrow { import core.stdc.stdio : vsnprintf; import core.stdc.stdlib : alloca; @@ -342,7 +343,7 @@ class OutBuffer * Append output of C's printf() to internal buffer. */ - void printf(scope string format, ...) @trusted + void printf(scope string format, ...) @system { va_list ap; va_start(ap, format); @@ -475,7 +476,7 @@ class OutBuffer buf.write("hello"); buf.write(cast(byte) 0x20); buf.write("world"); - buf.printf(" %d", 62665); + buf.writef(" %d", 62665); assert(cmp(buf.toString(), "hello world 62665") == 0); buf.clear(); diff --git a/std/parallelism.d b/std/parallelism.d index 9b231f3ac8a..7525d9b1491 100644 --- a/std/parallelism.d +++ b/std/parallelism.d @@ -418,8 +418,8 @@ Bugs: Changes to `ref` and `out` arguments are not propagated to the */ struct Task(alias fun, Args...) { - AbstractTask base = {runTask : &impl}; - alias base this; + private AbstractTask base = {runTask : &impl}; + private alias base this; private @property AbstractTask* basePtr() { @@ -884,11 +884,26 @@ identical to the non-@safe case, but safety introduces some restrictions: */ @trusted auto task(F, Args...)(F fun, Args args) -if (is(typeof(fun(args))) && isSafeTask!F) +if (__traits(compiles, () @safe => fun(args)) && isSafeTask!F) { return new Task!(run, F, Args)(fun, args); } +@safe unittest +{ + static struct Oops { + int convert() { + *cast(int*) 0xcafebabe = 0xdeadbeef; + return 0; + } + alias convert this; + } + static void foo(int) @safe {} + + static assert(!__traits(compiles, task(&foo, Oops.init))); + static assert(!__traits(compiles, scopedTask(&foo, Oops.init))); +} + /** These functions allow the creation of `Task` objects on the stack rather than the GC heap. The lifetime of a `Task` created by `scopedTask` @@ -928,7 +943,7 @@ if (is(typeof(delegateOrFp(args))) && !isSafeTask!F) /// Ditto @trusted auto scopedTask(F, Args...)(F fun, Args args) -if (is(typeof(fun(args))) && isSafeTask!F) +if (__traits(compiles, () @safe => fun(args)) && isSafeTask!F) { auto ret = Task!(run, F, Args)(fun, args); ret.isScoped = true; @@ -1581,7 +1596,7 @@ public: auto logs = new double[10_000_000]; // Parallel foreach works with or without an index - // variable. It can be iterate by ref if range.front + // variable. It can iterate by ref if range.front // returns by ref. // Iterate over logs using work units of size 100. diff --git a/std/path.d b/std/path.d index 4b5a7efe07f..a45865a9f18 100644 --- a/std/path.d +++ b/std/path.d @@ -1595,7 +1595,7 @@ if (isSomeChar!C) @safe unittest { - // Test for issue 7397 + // Test for https://issues.dlang.org/show_bug.cgi?id=7397 string[] ary = ["a", "b"]; version (Posix) { @@ -1758,7 +1758,6 @@ immutable(C)[] buildNormalizedPath(C)(const(C[])[] paths...) if (isSomeChar!C) { import std.array : array; - import std.exception : assumeUnique; const(C)[] chained; foreach (path; paths) @@ -1770,7 +1769,7 @@ if (isSomeChar!C) } auto result = asNormalizedPath(chained); // .array returns a copy, so it is unique - return () @trusted { return assumeUnique(result.array); } (); + return result.array; } /// @@ -1876,7 +1875,7 @@ if (isSomeChar!C) @safe unittest { - // Test for issue 7397 + // Test for https://issues.dlang.org/show_bug.cgi?id=7397 string[] ary = ["a", "b"]; version (Posix) { @@ -2733,6 +2732,9 @@ else version (Posix) The function allocates memory if and only if it gets to the third stage of this algorithm. + Note that `absolutePath` will not normalize `..` segments. + Use `buildNormalizedPath(absolutePath(path))` if that is desired. + Params: path = the relative path to transform base = the base directory of the relative path @@ -2746,7 +2748,7 @@ else version (Posix) See_Also: $(LREF asAbsolutePath) which does not allocate */ -string absolutePath(string path, lazy string base = getcwd()) +string absolutePath(return scope const string path, lazy string base = getcwd()) @safe pure { import std.array : array; @@ -2793,6 +2795,19 @@ string absolutePath(string path, lazy string base = getcwd()) assertThrown(absolutePath("bar", "foo")); } +// Ensure that we can call absolute path with scope paramaters +@safe unittest +{ + string testAbsPath(scope const string path, scope const string base) { + return absolutePath(path, base); + } + + version (Posix) + assert(testAbsPath("some/file", "/foo/bar") == "/foo/bar/some/file"); + version (Windows) + assert(testAbsPath(`some\file`, `c:\foo\bar`) == `c:\foo\bar\some\file`); +} + /** Transforms `path` into an absolute path. The following algorithm is used: @@ -2803,6 +2818,9 @@ string absolutePath(string path, lazy string base = getcwd()) which allocates memory.) ) + Note that `asAbsolutePath` will not normalize `..` segments. + Use `asNormalizedPath(asAbsolutePath(path))` if that is desired. + Params: path = the relative path to transform @@ -3379,7 +3397,7 @@ do else { C[] pattmp; - foreach (ref pi; 0 .. pattern.length) + for (size_t pi = 0; pi < pattern.length; pi++) { const pc = pattern[pi]; switch (pc) @@ -3560,7 +3578,8 @@ if (isConvertibleToString!Range) assert(!globMatch("foo.bar", "[gh]???bar")); assert(!globMatch("foo.bar"w, "[!fg]*bar"w)); assert(!globMatch("foo.bar"d, "[fg]???baz"d)); - assert(!globMatch("foo.di", "*.d")); // test issue 6634: triggered bad assertion + // https://issues.dlang.org/show_bug.cgi?id=6634 + assert(!globMatch("foo.di", "*.d")); // triggered bad assertion assert(globMatch("foo.bar", "{foo,bif}.bar")); assert(globMatch("bif.bar"w, "{foo,bif}.bar"w)); @@ -3956,7 +3975,7 @@ if (isConvertibleToString!Range) } ----- */ -string expandTilde(string inputPath) @safe nothrow +string expandTilde(return scope const string inputPath) @safe nothrow { version (Posix) { @@ -4139,7 +4158,7 @@ string expandTilde(string inputPath) @safe nothrow } /// -@system unittest +@safe unittest { version (Posix) { @@ -4154,7 +4173,7 @@ string expandTilde(string inputPath) @safe nothrow } } -@system unittest +@safe unittest { version (Posix) { @@ -4206,6 +4225,26 @@ string expandTilde(string inputPath) @safe nothrow } } +@safe unittest +{ + version (Posix) + { + import std.process : environment; + + string testPath(scope const string source_path) { + return source_path.expandTilde; + } + + auto oldHome = environment["HOME"]; + scope(exit) environment["HOME"] = oldHome; + + environment["HOME"] = "dmd/test"; + assert(testPath("~/") == "dmd/test/"); + assert(testPath("~") == "dmd/test"); + } +} + + version (StdUnittest) { private: diff --git a/std/process.d b/std/process.d index 494910f3535..41f788d2290 100644 --- a/std/process.d +++ b/std/process.d @@ -127,26 +127,19 @@ else version (WatchOS) version = iOSDerived; } -// When the DMC runtime is used, we have to use some custom functions -// to convert between Windows file handles and FILE*s. -version (Win32) version (CRuntime_DigitalMars) version = DMC_RUNTIME; - // Some of the following should be moved to druntime. private { // Microsoft Visual C Runtime (MSVCRT) declarations. - version (Windows) + version (CRuntime_Microsoft) { - version (DMC_RUNTIME) { } else + import core.stdc.stdint; + enum { - import core.stdc.stdint; - enum - { - STDIN_FILENO = 0, - STDOUT_FILENO = 1, - STDERR_FILENO = 2, - } + STDIN_FILENO = 0, + STDOUT_FILENO = 1, + STDERR_FILENO = 2, } } @@ -350,6 +343,8 @@ static: */ bool opBinaryRight(string op : "in")(scope const(char)[] name) @trusted { + if (name is null) + return false; version (Posix) return core.sys.posix.stdlib.getenv(name.tempCString()) !is null; else version (Windows) @@ -451,6 +446,10 @@ private: // doesn't exist. void getImpl(scope const(char)[] name, scope void delegate(const(OSChar)[]) @safe sink) @trusted { + // fix issue https://issues.dlang.org/show_bug.cgi?id=24549 + if (name is null) + return sink(null); + version (Windows) { // first we ask windows how long the environment variable is, @@ -600,6 +599,15 @@ private: assert("std_process" !in environment); } +// https://issues.dlang.org/show_bug.cgi?id=24549 +@safe unittest +{ + import std.exception : assertThrown; + assert(environment.get(null) is null); + assertThrown(environment[null]); + assert(!(null in environment)); +} + // ============================================================================= // Functions and classes for process management. // ============================================================================= @@ -872,6 +880,7 @@ version (Posix) private enum InternalError : ubyte doubleFork, malloc, preExec, + closefds_dup2, } /* @@ -1000,7 +1009,7 @@ private Pid spawnProcessPosix(scope const(char[])[] args, if (config.flags & Config.Flags.detached) close(pidPipe[0]); close(forkPipe[0]); - immutable forkPipeOut = forkPipe[1]; + auto forkPipeOut = forkPipe[1]; immutable pidPipeOut = pidPipe[1]; // Set the working directory. @@ -1034,56 +1043,106 @@ private Pid spawnProcessPosix(scope const(char[])[] args, if (!(config.flags & Config.Flags.inheritFDs)) { - // NOTE: malloc() and getrlimit() are not on the POSIX async - // signal safe functions list, but practically this should - // not be a problem. Java VM and CPython also use malloc() - // in its own implementation via opendir(). - import core.stdc.stdlib : malloc; - import core.sys.posix.poll : pollfd, poll, POLLNVAL; - import core.sys.posix.sys.resource : rlimit, getrlimit, RLIMIT_NOFILE; - - // Get the maximum number of file descriptors that could be open. - rlimit r; - if (getrlimit(RLIMIT_NOFILE, &r) != 0) - { - abortOnError(forkPipeOut, InternalError.getrlimit, .errno); - } - immutable maxDescriptors = cast(int) r.rlim_cur; + version (FreeBSD) + import core.sys.freebsd.unistd : closefrom; + else version (OpenBSD) + import core.sys.openbsd.unistd : closefrom; - // The above, less stdin, stdout, and stderr - immutable maxToClose = maxDescriptors - 3; - - // Call poll() to see which ones are actually open: - auto pfds = cast(pollfd*) malloc(pollfd.sizeof * maxToClose); - if (pfds is null) - { - abortOnError(forkPipeOut, InternalError.malloc, .errno); - } - foreach (i; 0 .. maxToClose) - { - pfds[i].fd = i + 3; - pfds[i].events = 0; - pfds[i].revents = 0; - } - if (poll(pfds, maxToClose, 0) >= 0) - { - foreach (i; 0 .. maxToClose) - { - // don't close pipe write end - if (pfds[i].fd == forkPipeOut) continue; - // POLLNVAL will be set if the file descriptor is invalid. - if (!(pfds[i].revents & POLLNVAL)) close(pfds[i].fd); - } - } - else + static if (!__traits(compiles, closefrom)) { - // Fall back to closing everything. - foreach (i; 3 .. maxDescriptors) - { - if (i == forkPipeOut) continue; - close(i); + // FIXME: This implementation crashes the system when RLIMIT_NOFILE + // has a big value. For a possible solution see: + // https://github.com/dlang/phobos/pull/8990 + void fallback (int lowfd) { + // NOTE: malloc() and getrlimit() are not on the POSIX async + // signal safe functions list, but practically this should + // not be a problem. Java VM and CPython also use malloc() + // in its own implementation via opendir(). + import core.stdc.stdlib : malloc; + import core.sys.posix.poll : pollfd, poll, POLLNVAL; + import core.sys.posix.sys.resource : rlimit, getrlimit, RLIMIT_NOFILE; + + // Get the maximum number of file descriptors that could be open. + rlimit r; + if (getrlimit(RLIMIT_NOFILE, &r) != 0) + { + abortOnError(forkPipeOut, InternalError.getrlimit, .errno); + } + immutable maxDescriptors = cast(int) r.rlim_cur; + + immutable maxToClose = maxDescriptors - lowfd; + + // Call poll() to see which ones are actually open: + auto pfds = cast(pollfd*) malloc(pollfd.sizeof * maxToClose); + if (pfds is null) + { + abortOnError(forkPipeOut, InternalError.malloc, .errno); + } + foreach (i; 0 .. maxToClose) + { + pfds[i].fd = i + lowfd; + pfds[i].events = 0; + pfds[i].revents = 0; + } + if (poll(pfds, maxToClose, 0) >= 0) + { + foreach (i; 0 .. maxToClose) + { + // POLLNVAL will be set if the file descriptor is invalid. + if (!(pfds[i].revents & POLLNVAL)) close(pfds[i].fd); + } + } + else + { + // Fall back to closing everything. + foreach (i; lowfd .. maxDescriptors) + { + close(i); + } + } } + + // closefrom may not be available on the version of glibc we build against. + // Until we find a way to perform this check we will try to use dlsym to + // check for the function. See: https://github.com/dlang/phobos/pull/9048 + version (CRuntime_Glibc) + void closefrom (int lowfd) { + static bool tryGlibcClosefrom (int lowfd) { + import core.sys.posix.dlfcn : dlopen, dlclose, dlsym, dlerror, RTLD_LAZY; + + void *handle = dlopen("libc.so.6", RTLD_LAZY); + if (!handle) + return false; + scope(exit) dlclose(handle); + + // Clear errors + dlerror(); + alias closefromT = extern(C) void function(int) @nogc @system nothrow; + auto closefrom = cast(closefromT) dlsym(handle, "closefrom"); + if (dlerror()) + return false; + + closefrom(lowfd); + return true; + } + + if (!tryGlibcClosefrom(lowfd)) + fallback(lowfd); + } + else + alias closefrom = fallback; } + + // We need to close all open file descriptors excluding std{in,out,err} + // and forkPipeOut because we still need it. + // Since the various libc's provide us with `closefrom` move forkPipeOut + // to position 3, right after STDERR_FILENO, and close all FDs following that. + if (dup2(forkPipeOut, 3) == -1) + abortOnError(forkPipeOut, InternalError.closefds_dup2, .errno); + forkPipeOut = 3; + // forkPipeOut needs to be closed after we call `exec`. + setCLOEXEC(forkPipeOut, true); + closefrom(forkPipeOut + 1); } else // This is already done if we don't inherit descriptors. { @@ -1102,6 +1161,14 @@ private Pid spawnProcessPosix(scope const(char[])[] args, } } + if (config.preExecDelegate !is null) + { + if (config.preExecDelegate() != true) + { + abortOnError(forkPipeOut, InternalError.preExec, .errno); + } + } + // Execute program. core.sys.posix.unistd.execve(argz[0], argz.ptr, envz); @@ -1187,7 +1254,11 @@ private Pid spawnProcessPosix(scope const(char[])[] args, errorMsg = "Failed to allocate memory"; break; case InternalError.preExec: - errorMsg = "Failed to execute preExecFunction"; + errorMsg = "Failed to execute preExecFunction or preExecDelegate"; + break; + case InternalError.closefds_dup2: + assert(!(config.flags & Config.Flags.inheritFDs)); + errorMsg = "Failed to close inherited file descriptors"; break; case InternalError.noerror: assert(false); @@ -1271,6 +1342,29 @@ version (Posix) assert(received); } +version (Posix) +@system unittest +{ + __gshared int j; + foreach (i; 0 .. 3) + { + auto config = Config( + preExecFunction: function() @trusted { + j = 1; + return true; + }, + preExecDelegate: delegate() @trusted { + // j should now be 1, as preExecFunction is called before + // preExecDelegate is. + _Exit(i + j); + return true; + }, + ); + auto pid = spawnProcess(["false"], config: config); + assert(wait(pid) == i + 1); + } +} + /* Implementation of spawnProcess() for Windows. @@ -2186,13 +2280,30 @@ struct Config Please note that the code in this function must only use async-signal-safe functions.) + If $(LREF preExecDelegate) is also set, it is called last. + On Windows, this member is not available. */ bool function() nothrow @nogc @safe preExecFunction; + + /** + A delegate that is called before `exec` in $(LREF spawnProcess). + It returns `true` if succeeded and otherwise returns `false`. + + $(RED Warning: + Please note that the code in this function must only use + async-signal-safe functions.) + + If $(LREF preExecFunction) is also set, it is called first. + + On Windows, this member is not available. + */ + bool delegate() nothrow @nogc @safe preExecDelegate; } else version (Posix) { bool function() nothrow @nogc @safe preExecFunction; + bool delegate() nothrow @nogc @safe preExecDelegate; } } diff --git a/std/random.d b/std/random.d index 93be764abd1..87e63f3f6ee 100644 --- a/std/random.d +++ b/std/random.d @@ -812,7 +812,7 @@ Parameters for the generator. // Bitmasks used in the 'twist' part of the algorithm private enum UIntType lowerMask = (cast(UIntType) 1u << r) - 1, - upperMask = (~lowerMask) & this.max; + upperMask = (~lowerMask) & max; /* Collection of all state variables @@ -905,17 +905,17 @@ Parameters for the generator. private static void seedImpl(UIntType value, ref State mtState) @nogc { mtState.data[$ - 1] = value; - static if (this.max != UIntType.max) + static if (max != UIntType.max) { - mtState.data[$ - 1] &= this.max; + mtState.data[$ - 1] &= max; } foreach_reverse (size_t i, ref e; mtState.data[0 .. $ - 1]) { e = f * (mtState.data[i + 1] ^ (mtState.data[i + 1] >> (w - 2))) + cast(UIntType)(n - (i + 1)); - static if (this.max != UIntType.max) + static if (max != UIntType.max) { - e &= this.max; + e &= max; } } @@ -2842,7 +2842,7 @@ auto ref choice(Range)(ref Range range) "Choice did not return a valid element from the given Range"); } -@safe unittest // issue 18631 +@safe unittest // https://issues.dlang.org/show_bug.cgi?id=18631 { auto rng = MinstdRand0(42); const a = [0,1,2]; @@ -2855,7 +2855,7 @@ auto ref choice(Range)(ref Range range) auto z1 = choice(cast(const)[1, 2, 3], rng); } -@safe unittest // Ref range (issue 18631 PR) +@safe unittest // Ref range (https://issues.dlang.org/show_bug.cgi?id=18631 PR) { struct TestRange { diff --git a/std/range/package.d b/std/range/package.d index 6689a38009b..e8532cd0b72 100644 --- a/std/range/package.d +++ b/std/range/package.d @@ -232,10 +232,10 @@ module std.range; public import std.array; public import std.range.interfaces; public import std.range.primitives; -public import std.typecons : Flag, Yes, No; +public import std.typecons : Flag, Yes, No, Rebindable, rebindable; import std.internal.attributes : betterC; -import std.meta : allSatisfy, anySatisfy, staticMap; +import std.meta : aliasSeqOf, allSatisfy, anySatisfy, staticMap; import std.traits : CommonType, isCallable, isFloatingPoint, isIntegral, isPointer, isSomeFunction, isStaticArray, Unqual, isInstanceOf; @@ -313,12 +313,18 @@ if (isBidirectionalRange!(Unqual!Range)) { @property void front(ElementType!R val) { - source.back = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source.back = __ctfe ? val : forward!val; } @property void back(ElementType!R val) { - source.front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source.front = __ctfe ? val : forward!val; } } @@ -330,7 +336,10 @@ if (isBidirectionalRange!(Unqual!Range)) { void opIndexAssign(ElementType!R val, size_t n) { - source[retroIndex(n)] = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source[retroIndex(n)] = __ctfe ? val : forward!val; } } @@ -474,6 +483,45 @@ pure @safe nothrow @nogc unittest foreach (x; data.retro) {} } +pure @safe nothrow unittest +{ + import std.algorithm.comparison : equal; + + static struct S { + int v; + @disable this(this); + } + + immutable foo = [S(1), S(2), S(3)]; + auto r = retro(foo); + assert(equal(r, [S(3), S(2), S(1)])); +} + +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[5] arr = [Handle(0), Handle(1), Handle(2), Handle(3), Handle(4)]; + auto range = arr[].retro(); + + called = false; + range.front = Handle(42); + assert(called); + + called = false; + range.back = Handle(42); + assert(called); + + called = false; + range[2] = Handle(42); + assert(called); +} /** Iterates range `r` with stride `n`. If the range is a @@ -585,7 +633,10 @@ do { @property void front(ElementType!R val) { - source.front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source.front = __ctfe ? val : forward!val; } } @@ -864,6 +915,38 @@ pure @safe nothrow unittest assert(equal(s, [1L, 4L, 7L])); } +pure @safe nothrow unittest +{ + import std.algorithm.comparison : equal; + + static struct S { + int v; + @disable this(this); + } + + immutable foo = [S(1), S(2), S(3), S(4), S(5)]; + auto r = stride(foo, 3); + assert(equal(r, [S(1), S(4)])); +} + +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[5] arr = [Handle(0), Handle(1), Handle(2), Handle(3), Handle(4)]; + auto range = arr[].stride(2); + + called = false; + range.front = Handle(42); + assert(called); +} + /** Spans multiple ranges in sequence. The function `chain` takes any number of ranges and returns a $(D Chain!(R1, R2,...)) object. The @@ -872,6 +955,11 @@ result is a range that offers the `front`, `popFront`, and $(D empty) primitives. If all input ranges offer random access and $(D length), `Chain` offers them as well. +Note that repeated random access of the resulting range is likely +to perform somewhat badly since lengths of the ranges in the chain have to be +added up for each random access operation. Random access to elements of +the first remaining range is still efficient. + If only one range is offered to `Chain` or `chain`, the $(D Chain) type exits the picture by aliasing itself directly to that range's type. @@ -907,7 +995,12 @@ if (Ranges.length > 0 && enum sameET = is(.ElementType!A == RvalueElementType); } - enum bool allSameType = allSatisfy!(sameET, R); + enum bool allSameType = allSatisfy!(sameET, R), + bidirectional = allSatisfy!(isBidirectionalRange, R), + mobileElements = allSatisfy!(hasMobileElements, R), + assignableElements = allSameType + && allSatisfy!(hasAssignableElements, R); + alias ElementType = RvalueElementType; static if (allSameType && allSatisfy!(hasLvalueElements, R)) @@ -925,17 +1018,49 @@ if (Ranges.length > 0 && } } - // This is the entire state R source; - // TODO: use a vtable (or more) instead of linear iteration + size_t frontIndex; + // Always points to index one past the last non-empty range, + // because otherwise decrementing while pointing to first range + // would overflow to size_t.max. + static if (bidirectional) size_t backIndex; + else enum backIndex = source.length; + + this(typeof(Result.tupleof) fields) + { + this.tupleof = fields; + } public: this(R input) { - // Must be static foreach because of https://issues.dlang.org/show_bug.cgi?id=21209 - static foreach (i, v; input) + frontIndex = source.length; + static if (bidirectional) backIndex = 0; + + foreach (i, ref v; input) source[i] = v; + + // We do this separately to avoid invoking `empty` needlessly. + // While not recommended, a range may depend on side effects of + // `empty` call. + foreach (i, ref v; input) if (!v.empty) + { + frontIndex = i; + static if (bidirectional) backIndex = i+1; + break; + } + + // backIndex is already set in the first loop to + // as frontIndex+1, so we'll use that if we don't find a + // non-empty range here. + static if (bidirectional) + static foreach_reverse (i; 1 .. R.length + 1) { - source[i] = v; + if (i <= frontIndex + 1) return; + if (!input[i-1].empty) + { + backIndex = i; + return; + } } } @@ -950,118 +1075,219 @@ if (Ranges.length > 0 && { @property bool empty() { - foreach (i, Unused; R) + if (frontIndex == 0) { - if (!source[i].empty) return false; + // special handling: we might be in Range.init state! + // For instance, `format!"%s"` uses Range.init to ensure + // that formatting is possible. + // In that case, we must still behave in an internally consistent way. + return source[0].empty; } - return true; + return frontIndex >= backIndex; } } static if (allSatisfy!(isForwardRange, R)) + { @property auto save() { - auto saveSource(size_t len)() - { - import std.typecons : tuple; - static assert(len > 0); - static if (len == 1) - { - return tuple(source[0].save); - } - else - { - return saveSource!(len - 1)() ~ - tuple(source[len - 1].save); - } - } - return Result(saveSource!(R.length).expand); + auto saveI(size_t i)() => source[i].save; + + // TODO: this has the constructor needlessly refind + // frontIndex and backIndex. It'd be better to just copy + // those from `.this`. + auto saveResult = + Result(staticMap!(saveI, aliasSeqOf!(R.length.iota))); + + return saveResult; } + } void popFront() { - foreach (i, Unused; R) + sw1: switch (frontIndex) { - if (source[i].empty) continue; - source[i].popFront(); - return; + static foreach (i; 0 .. R.length) + { + case i: + source[i].popFront(); + break sw1; + } + + case R.length: + assert(0, "Attempt to `popFront` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); + } + + sw2: switch (frontIndex) + { + static foreach (i; 0 .. R.length) + { + case i: + if (source[i].empty) + { + frontIndex++; + goto case; + } + else break sw2; + } + + // Only possible to reach from goto of previous case. + case R.length: + break; + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to `popFront` of empty `chain` range"); } @property auto ref front() { - foreach (i, Unused; R) + switch (frontIndex) { - if (source[i].empty) continue; - return fixRef(source[i].front); + static foreach (i; 0 .. R.length) + { + case i: + return fixRef(source[i].front); + } + + case R.length: + assert(0, "Attempt to get `front` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to get `front` of empty `chain` range"); } - static if (allSameType && allSatisfy!(hasAssignableElements, R)) + static if (assignableElements) { // @@@BUG@@@ //@property void front(T)(T v) if (is(T : RvalueElementType)) @property void front(RvalueElementType v) { - foreach (i, Unused; R) + import core.lifetime : forward; + + sw: switch (frontIndex) { - if (source[i].empty) continue; - source[i].front = v; - return; + static foreach (i; 0 .. R.length) + { + case i: + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source[i].front = __ctfe ? v : forward!v; + break sw; + } + + case R.length: + assert(0, "Attempt to set `front` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to set `front` of empty `chain` range"); } } - static if (allSatisfy!(hasMobileElements, R)) + static if (mobileElements) { RvalueElementType moveFront() { - foreach (i, Unused; R) + switch (frontIndex) { - if (source[i].empty) continue; - return source[i].moveFront(); + static foreach (i; 0 .. R.length) + { + case i: + return source[i].moveFront(); + } + + case R.length: + assert(0, "Attempt to `moveFront` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to `moveFront` of empty `chain` range"); } } - static if (allSatisfy!(isBidirectionalRange, R)) + static if (bidirectional) { @property auto ref back() { - foreach_reverse (i, Unused; R) + switch (backIndex) { - if (source[i].empty) continue; - return fixRef(source[i].back); + static foreach_reverse (i; 1 .. R.length + 1) + { + case i: + return fixRef(source[i-1].back); + } + + case 0: + assert(0, "Attempt to get `back` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to get `back` of empty `chain` range"); } void popBack() { - foreach_reverse (i, Unused; R) + sw1: switch (backIndex) { - if (source[i].empty) continue; - source[i].popBack(); - return; + static foreach_reverse (i; 1 .. R.length + 1) + { + case i: + source[i-1].popBack(); + break sw1; + } + + case 0: + assert(0, "Attempt to `popFront` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); + } + + sw2: switch (backIndex) + { + static foreach_reverse (i; 1 .. R.length + 1) + { + case i: + if (source[i-1].empty) + { + backIndex--; + goto case; + } + else break sw2; + } + + // Only possible to reach from goto of previous case. + case 0: + break; + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to `popBack` of empty `chain` range"); } - static if (allSatisfy!(hasMobileElements, R)) + static if (mobileElements) { RvalueElementType moveBack() { - foreach_reverse (i, Unused; R) + switch (backIndex) { - if (source[i].empty) continue; - return source[i].moveBack(); + static foreach_reverse (i; 1 .. R.length + 1) + { + case i: + return source[i-1].moveBack(); + } + + case 0: + assert(0, "Attempt to `moveBack` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to `moveBack` of empty `chain` range"); } } @@ -1069,13 +1295,24 @@ if (Ranges.length > 0 && { @property void back(RvalueElementType v) { - foreach_reverse (i, Unused; R) + import core.lifetime : forward; + + sw: switch (backIndex) { - if (source[i].empty) continue; - source[i].back = v; - return; + static foreach_reverse (i; 1 .. R.length + 1) + { + case i: + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source[i - 1].back = __ctfe ? v : forward!v; + break sw; + } + + case 0: + assert(0, "Attempt to set `back` of empty `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to set `back` of empty `chain` range"); } } } @@ -1084,11 +1321,24 @@ if (Ranges.length > 0 && { @property size_t length() { - size_t result; - foreach (i, Unused; R) + size_t result = 0; + sw: switch (frontIndex) { - result += source[i].length; + static foreach (i; 0 .. R.length) + { + case i: + result += source[i].length; + if (backIndex == i+1) break sw; + else goto case; + } + + case R.length: + break; + + default: + assert(0, "Internal library error. Please report it."); } + return result; } @@ -1099,106 +1349,182 @@ if (Ranges.length > 0 && { auto ref opIndex(size_t index) { - foreach (i, Range; R) + switch (frontIndex) { - static if (isInfinite!(Range)) + static foreach (i; 0 .. R.length) { - return source[i][index]; - } - else - { - immutable length = source[i].length; - if (index < length) return fixRef(source[i][index]); - index -= length; + case i: + static if (!isInfinite!(R[i])) + { + immutable length = source[i].length; + if (index >= length) + { + index -= length; + goto case; + } + } + + return fixRef(source[i][index]); } + + case R.length: + assert(0, "Attempt to access out-of-bounds index of `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to access out-of-bounds index of `chain` range"); } - static if (allSatisfy!(hasMobileElements, R)) + static if (mobileElements) { RvalueElementType moveAt(size_t index) { - foreach (i, Range; R) + switch (frontIndex) { - static if (isInfinite!(Range)) + static foreach (i; 0 .. R.length) { + case i: + static if (!isInfinite!(R[i])) + { + immutable length = source[i].length; + if (index >= length) + { + index -= length; + goto case; + } + } + return source[i].moveAt(index); } - else - { - immutable length = source[i].length; - if (index < length) return source[i].moveAt(index); - index -= length; - } + + case R.length: + assert(0, "Attempt to move out-of-bounds index of `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to move out-of-bounds index of `chain` range"); } } static if (allSameType && allSatisfy!(hasAssignableElements, R)) void opIndexAssign(ElementType v, size_t index) { - foreach (i, Range; R) + import core.lifetime : forward; + + sw: switch (frontIndex) { - static if (isInfinite!(Range)) - { - source[i][index] = v; - } - else + static foreach (i; 0 .. R.length) { - immutable length = source[i].length; - if (index < length) + case i: + static if (!isInfinite!(R[i])) { - source[i][index] = v; - return; + immutable length = source[i].length; + if (index >= length) + { + index -= length; + goto case; + } } - index -= length; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source[i][index] = __ctfe ? v : forward!v; + break sw; } + + case R.length: + assert(0, "Attempt to write out-of-bounds index of `chain` range"); + + default: + assert(0, "Internal library error. Please report it."); } - assert(false, "Attempt to write out-of-bounds index of `chain` range"); } } static if (allSatisfy!(hasLength, R) && allSatisfy!(hasSlicing, R)) auto opSlice(size_t begin, size_t end) return scope { - auto result = this; - foreach (i, Unused; R) + // force staticMap type conversion to Rebindable + static struct ResultRanges { - immutable len = result.source[i].length; - if (len < begin) - { - result.source[i] = result.source[i] - [len .. len]; - begin -= len; - } - else - { - result.source[i] = result.source[i] - [begin .. len]; - break; - } + staticMap!(Rebindable, typeof(source)) fields; } - auto cut = length; - cut = cut <= end ? 0 : cut - end; - foreach_reverse (i, Unused; R) + auto sourceI(size_t i)() => rebindable(this.source[i]); + auto resultRanges = ResultRanges(staticMap!(sourceI, aliasSeqOf!(R.length.iota))).fields; + size_t resultFrontIndex = this.frontIndex; + static if (bidirectional) + size_t resultBackIndex = this.backIndex; + + sw: switch (frontIndex) { - immutable len = result.source[i].length; - if (cut > len) + static foreach (i; 0 .. R.length) { - result.source[i] = result.source[i] - [0 .. 0]; - cut -= len; + case i: + immutable len = resultRanges[i].length; + if (len <= begin) + { + resultRanges[i] = resultRanges[i] + [len .. len]; + begin -= len; + resultFrontIndex++; + goto case; + } + else + { + resultRanges[i] = resultRanges[i] + [begin .. len]; + break sw; + } } - else + + case R.length: + assert(begin == 0, + "Attempt to access out-of-bounds slice of `chain` range"); + break; + + default: + assert(0, "Internal library error. Please report it."); + } + + // Overflow intentional if end index too big. + // This will trigger the bounds check failure below. + auto cut = length - end; + + sw2: switch (backIndex) + { + static foreach_reverse (i; 1 .. R.length + 1) { - result.source[i] = result.source[i] - [0 .. len - cut]; - break; + case i: + immutable len = resultRanges[i-1].length; + if (len <= cut) + { + resultRanges[i-1] = resultRanges[i-1] + [0 .. 0]; + cut -= len; + resultBackIndex--; + goto case; + } + else + { + resultRanges[i-1] = resultRanges[i-1] + [0 .. len - cut]; + break sw2; + } } + + case 0: + assert(cut == 0, end > length? + "Attempt to access out-of-bounds slice of `chain` range": + "Attempt to access negative length slice of `chain` range"); + break sw2; + + default: + assert(0, "Internal library error. Please report it."); } - return result; + + static if (bidirectional) + return Result(resultRanges, resultFrontIndex, resultBackIndex); + else + return Result(resultRanges, resultFrontIndex); } } return Result(rs); @@ -1293,6 +1619,10 @@ pure @safe nothrow unittest auto s = chain(arr1, arr2, arr3); assert(s[5] == 6); assert(equal(s, witness)); + assert(s[4 .. 6].equal(arr2)); + assert(s[2 .. 5].equal([3, 4, 5])); + assert(s[0 .. 0].empty); + assert(s[7 .. $].empty); assert(s[5] == 6); } { @@ -1392,6 +1722,88 @@ pure @safe unittest assert(equal(r, "foobar")); } +// https://issues.dlang.org/show_bug.cgi?id=23844 +pure @safe unittest +{ + struct S + { + immutable int value; + } + + auto range = chain(only(S(5)), only(S(6))); + assert(range.array == [S(5), S(6)]); +} + +// https://issues.dlang.org/show_bug.cgi?id=24064 +pure @safe nothrow unittest +{ + import std.algorithm.comparison : equal; + import std.typecons : Nullable; + + immutable Nullable!string foo = "b"; + string[] bar = ["a"]; + assert(chain(bar, foo).equal(["a", "b"])); +} + +pure @safe nothrow @nogc unittest +{ + // support non-copyable items + + static struct S { + int v; + @disable this(this); + } + + S[2] s0, s1; + foreach (ref el; chain(s0[], s1[])) + { + int n = el.v; + } + + S[] s2, s3; + foreach (ref el; chain(s2, s3)) + { + int n = el.v; + } +} + +// https://issues.dlang.org/show_bug.cgi?id=24243 +pure @safe nothrow unittest +{ + import std.algorithm.iteration : filter; + + auto range = chain([2], [3].filter!"a"); + + // This might happen in format!"%s"(range), for instance. + assert(typeof(range).init.empty); +} + +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[5] arr = [Handle(0), Handle(1), Handle(2), Handle(3), Handle(4)]; + auto range = arr[0 .. 2].chain(arr[4 .. 5]); + + called = false; + range.front = Handle(42); + assert(called); + + called = false; + range.back = Handle(42); + assert(called); + + called = false; + range[2] = Handle(42); + assert(called); +} + /** Choose one of two ranges at runtime depending on a Boolean condition. @@ -1547,7 +1959,7 @@ private struct ChooseResult(Ranges...) this(this) { actOnChosen!((ref r) { - static if (hasElaborateCopyConstructor!(typeof(r))) r.__postblit(); + static if (hasElaborateCopyConstructor!(typeof(r))) r.__xpostblit(); })(this); } @@ -1825,6 +2237,46 @@ pure @safe unittest auto chosen2 = chosen.save; } +pure @safe nothrow unittest +{ + static struct S { + int v; + @disable this(this); + } + + auto a = [S(1), S(2), S(3)]; + auto b = [S(4), S(5), S(6)]; + + auto chosen = choose(true, a, b); + assert(chosen.front.v == 1); + + auto chosen2 = choose(false, a, b); + assert(chosen2.front.v == 4); +} + +// https://issues.dlang.org/show_bug.cgi?id=15708 +@safe unittest +{ + static struct HasPostblit + { + this(this) {} + } + + static struct Range + { + bool empty; + int front; + void popFront() {} + HasPostblit member; + } + + Range range; + int[] arr; + + auto chosen = choose(true, range, arr); + auto copy = chosen; +} + /** Choose one of multiple ranges at runtime. @@ -2075,7 +2527,14 @@ if (Rs.length > 1 && allSatisfy!(isInputRange, staticMap!(Unqual, Rs))) } } - return Result(rs, 0); + size_t firstNonEmpty = size_t.max; + static foreach (i; 0 .. Rs.length) + { + if (firstNonEmpty == size_t.max && !rs[i].empty) + firstNonEmpty = i; + } + + return Result(rs, firstNonEmpty); } /// @@ -2122,6 +2581,28 @@ pure @safe unittest assert(equal(r.save, "fboaor")); assert(equal(r.save, "fboaor")); } +pure @safe nothrow unittest +{ + import std.algorithm.comparison : equal; + + static struct S { + int v; + @disable this(this); + } + + S[] a = [ S(1), S(2) ]; + S[] b = [ S(10), S(20) ]; + auto r = roundRobin(a, b); + assert(equal(r, [ S(1), S(10), S(2), S(20) ])); +} + +// https://issues.dlang.org/show_bug.cgi?id=24384 +@safe unittest +{ + auto r = roundRobin("", "a"); + assert(!r.empty); + auto e = r.front; +} /** Iterates a random-access range starting from a given point and @@ -2313,12 +2794,14 @@ if (isInputRange!(Unqual!Range) && /// ditto @property void front(ElementType!R v) { - import std.algorithm.mutation : move; + import core.lifetime : forward; assert(!empty, "Attempting to assign to the front of an empty " ~ Take.stringof); - source.front = move(v); + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + source.front = __ctfe ? v : forward!v; } static if (hasMobileElements!R) @@ -2615,6 +3098,25 @@ pure @safe nothrow @nogc unittest assert(r.take(2).equal(repeat(1, 2))); } +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + import std.algorithm.iteration : filter; + + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[5] arr = [Handle(0), Handle(1), Handle(2), Handle(3), Handle(4)]; + auto range = arr[].filter!(a => true)().take(3); + + called = false; + range.front = Handle(42); + assert(called); +} /** Similar to $(LREF take), but assumes that `range` has at least $(D @@ -2694,10 +3196,14 @@ if (isInputRange!R) { @property auto ref front(ElementType!R v) { + import core.lifetime : forward; + assert(!empty, "Attempting to assign to the front of an empty " ~ typeof(this).stringof); - return _input.front = v; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + return _input.front = __ctfe ? v : forward!v; } } } @@ -2834,6 +3340,26 @@ pure @safe nothrow unittest }} } +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + import std.algorithm.iteration : filter; + + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[5] arr = [Handle(0), Handle(1), Handle(2), Handle(3), Handle(4)]; + auto range = arr[].filter!(a => true)().takeExactly(3); + + called = false; + range.front = Handle(42); + assert(called); +} + /** Returns a range with at most one element; for example, $(D takeOne([42, 43, 44])) returns a range consisting of the integer $(D @@ -3567,24 +4093,17 @@ Returns: struct Repeat(T) { private: - //Store a non-qualified T when possible: This is to make Repeat assignable - static if ((is(T == class) || is(T == interface)) && (is(T == const) || is(T == immutable))) - { - import std.typecons : Rebindable; - alias UT = Rebindable!T; - } - else static if (is(T : Unqual!T) && is(Unqual!T : T)) - alias UT = Unqual!T; - else - alias UT = T; - UT _value; + import std.typecons : Rebindable2; + + // Store a rebindable T to make Repeat assignable. + Rebindable2!T _value; public: /// Range primitives - @property inout(T) front() inout { return _value; } + @property inout(T) front() inout { return _value.get; } /// ditto - @property inout(T) back() inout { return _value; } + @property inout(T) back() inout { return _value.get; } /// ditto enum bool empty = false; @@ -3599,7 +4118,7 @@ public: @property auto save() inout { return this; } /// ditto - inout(T) opIndex(size_t) inout { return _value; } + inout(T) opIndex(size_t) inout { return _value.get; } /// ditto auto opSlice(size_t i, size_t j) @@ -3624,7 +4143,12 @@ public: } /// Ditto -Repeat!T repeat(T)(T value) { return Repeat!T(value); } +Repeat!T repeat(T)(T value) +{ + import std.typecons : Rebindable2; + + return Repeat!T(Rebindable2!T(value)); +} /// pure @safe nothrow unittest @@ -3929,7 +4453,10 @@ if (isForwardRange!R && !isInfinite!R) /// ditto @property void front(ElementType!R val) { - _original[_index] = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + _original[_index] = __ctfe ? val : forward!val; } } @@ -4039,7 +4566,10 @@ if (isForwardRange!R && !isInfinite!R) /// ditto @property auto front(ElementType!R val) { - return _current.front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + return _current.front = __ctfe ? val : forward!val; } } @@ -4382,6 +4912,35 @@ pure @safe unittest assert(equal(r.save, "foof")); } +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + import std.algorithm.iteration : filter; + + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[3] arr = [Handle(0), Handle(1), Handle(2)]; + { + auto range = arr[].cycle().take(5); + + called = false; + range.front = Handle(42); + assert(called); + } + { + auto range = arr[].filter!(a => true)().cycle().take(5); + + called = false; + range.front = Handle(42); + assert(called); + } +} + private alias lengthType(R) = typeof(R.init.length.init); /** @@ -5511,10 +6070,13 @@ nothrow pure @system unittest Generate lockstep's opApply function as a mixin string. If withIndex is true prepend a size_t index to the delegate. */ -private string lockstepMixin(Ranges...)(bool withIndex, bool reverse) +private struct LockstepMixin(Ranges...) { + import std.conv : text; import std.format : format; + string name; + string implName; string[] params; string[] emptyChecks; string[] dgArgs; @@ -5522,76 +6084,103 @@ private string lockstepMixin(Ranges...)(bool withIndex, bool reverse) string indexDef; string indexInc; - if (withIndex) +@safe pure: + this(bool withIndex, bool reverse) { - params ~= "size_t"; - dgArgs ~= "index"; - if (reverse) + if (withIndex) { - indexDef = q{ - size_t index = ranges[0].length-1; - enforce(_stoppingPolicy == StoppingPolicy.requireSameLength, - "lockstep can only be used with foreach_reverse when stoppingPolicy == requireSameLength"); + params ~= "size_t"; + dgArgs ~= "index"; + if (reverse) + { + indexDef = q{ + size_t index = ranges[0].length - 1; + enforce( + this.stoppingPolicy == StoppingPolicy.requireSameLength, + "Indexed lockstep can only be used with foreach_reverse when " ~ + "stoppingPolicy == requireSameLength"); - foreach (range; ranges[1..$]) - enforce(range.length == ranges[0].length); - }; - indexInc = "--index;"; + foreach (range; ranges[1 .. $]) + enforce(range.length == ranges[0].length); + }; + indexInc = "--index;"; + } + else + { + indexDef = "size_t index = 0;"; + indexInc = "++index;"; + } } - else + + foreach (idx, Range; Ranges) { - indexDef = "size_t index = 0;"; - indexInc = "++index;"; + params ~= format("%sElementType!(Ranges[%s])", hasLvalueElements!Range ? "ref " : "", idx); + emptyChecks ~= format("!ranges[%s].empty", idx); + if (reverse) + { + dgArgs ~= format("ranges[%s].back", idx); + popFronts ~= format("ranges[%s].popBack();", idx); + } + else + { + dgArgs ~= format("ranges[%s].front", idx); + popFronts ~= format("ranges[%s].popFront();", idx); + } } - } - foreach (idx, Range; Ranges) - { - params ~= format("%sElementType!(Ranges[%s])", hasLvalueElements!Range ? "ref " : "", idx); - emptyChecks ~= format("!ranges[%s].empty", idx); if (reverse) { - dgArgs ~= format("ranges[%s].back", idx); - popFronts ~= format("ranges[%s].popBack();", idx); + name = "opApplyReverse"; + if (withIndex) implName = "opApplyReverseIdxImpl"; + else implName = "opApplyReverseImpl"; } else { - dgArgs ~= format("ranges[%s].front", idx); - popFronts ~= format("ranges[%s].popFront();", idx); + name = "opApply"; + if (withIndex) implName = "opApplyIdxImpl"; + else implName = "opApplyImpl"; } } - string name = reverse ? "opApplyReverse" : "opApply"; - - return format( - q{ - int %s(scope int delegate(%s) dg) - { - import std.exception : enforce; - - auto ranges = _ranges; - int res; - %s +const: + string getAlias() + { + return format(q{ + alias %s = %s!(int delegate(%-(%s%|, %))); + }, + name, implName, params + ); + } - while (%s) + string getImpl() + { + return format(q{ + int %s(DG)(scope DG dg) scope { - res = dg(%s); - if (res) break; - %s + import std.exception : enforce; + + auto ranges = this.ranges; %s - } - if (_stoppingPolicy == StoppingPolicy.requireSameLength) - { - foreach (range; ranges) - enforce(range.empty); + while (%-(%s%| && %)) + { + if (int result = dg(%-(%s%|, %))) return result; + %-(%s%| + %) + %s + } + + if (this.stoppingPolicy == StoppingPolicy.requireSameLength) + { + foreach (range; ranges) + enforce(range.empty); + } + return 0; } - return res; - } - }, name, params.join(", "), indexDef, - emptyChecks.join(" && "), dgArgs.join(", "), - popFronts.join("\n "), - indexInc); + }, + implName, indexDef, emptyChecks, dgArgs, popFronts, indexInc + ); + } } /** @@ -5611,10 +6200,6 @@ private string lockstepMixin(Ranges...)(bool withIndex, bool reverse) By default `StoppingPolicy` is set to `StoppingPolicy.shortest`. - Limitations: The `pure`, `@safe`, `@nogc`, or `nothrow` attributes cannot be - inferred for `lockstep` iteration. $(LREF zip) can infer the first two due to - a different implementation. - See_Also: $(LREF zip) `lockstep` is similar to $(LREF zip), but `zip` bundles its @@ -5625,41 +6210,53 @@ private string lockstepMixin(Ranges...)(bool withIndex, bool reverse) struct Lockstep(Ranges...) if (Ranges.length > 1 && allSatisfy!(isInputRange, Ranges)) { + private Ranges ranges; + private StoppingPolicy stoppingPolicy; + /// - this(R ranges, StoppingPolicy sp = StoppingPolicy.shortest) + this(Ranges ranges, StoppingPolicy sp = StoppingPolicy.shortest) { import std.exception : enforce; - _ranges = ranges; + this.ranges = ranges; enforce(sp != StoppingPolicy.longest, - "Can't use StoppingPolicy.Longest on Lockstep."); - _stoppingPolicy = sp; + "Can't use StoppingPolicy.Longest on Lockstep."); + this.stoppingPolicy = sp; } - mixin(lockstepMixin!Ranges(false, false)); - mixin(lockstepMixin!Ranges(true, false)); + private enum lockstepMixinFF = LockstepMixin!Ranges(withIndex: false, reverse: false); + mixin(lockstepMixinFF.getImpl); + + private enum lockstepMixinTF = LockstepMixin!Ranges(withIndex: true, reverse: false); + mixin(lockstepMixinTF.getImpl); + + mixin(lockstepMixinFF.getAlias); + mixin(lockstepMixinTF.getAlias); + static if (allSatisfy!(isBidirectionalRange, Ranges)) { - mixin(lockstepMixin!Ranges(false, true)); + private enum lockstepMixinFT = LockstepMixin!Ranges(withIndex: false, reverse: true); + mixin(lockstepMixinFT.getImpl); static if (allSatisfy!(hasLength, Ranges)) { - mixin(lockstepMixin!Ranges(true, true)); + private enum lockstepMixinTT = LockstepMixin!Ranges(withIndex: true, reverse: true); + mixin(lockstepMixinTT.getImpl); + mixin(lockstepMixinTT.getAlias); } else { - mixin(lockstepReverseFailMixin!Ranges(true)); + mixin(lockstepReverseFailMixin!Ranges(withIndex: true)); + alias opApplyReverse = opApplyReverseIdxFail; } + mixin(lockstepMixinFT.getAlias); } else { - mixin(lockstepReverseFailMixin!Ranges(false)); - mixin(lockstepReverseFailMixin!Ranges(true)); + mixin(lockstepReverseFailMixin!Ranges(withIndex: false)); + mixin(lockstepReverseFailMixin!Ranges(withIndex: true)); + alias opApplyReverse = opApplyReverseFail; + alias opApplyReverse = opApplyReverseIdxFail; } - -private: - alias R = Ranges; - R _ranges; - StoppingPolicy _stoppingPolicy; } /// Ditto @@ -5679,33 +6276,39 @@ if (allSatisfy!(isInputRange, Ranges)) } /// -@system unittest +pure @safe unittest { - auto arr1 = [1,2,3,4,5,100]; - auto arr2 = [6,7,8,9,10]; + int[6] arr1 = [1,2,3,4,5,100]; + int[5] arr2 = [6,7,8,9,10]; + + foreach (ref a, b; lockstep(arr1[], arr2[])) + { + a += b; + } - foreach (ref a, b; lockstep(arr1, arr2)) - { - a += b; - } + assert(arr1 == [7,9,11,13,15,100]); +} - assert(arr1 == [7,9,11,13,15,100]); +/// Lockstep also supports iterating with an index variable: +pure @safe unittest +{ + int[3] arr1 = [1,2,3]; + int[3] arr2 = [4,5,6]; - /// Lockstep also supports iterating with an index variable: - foreach (index, a, b; lockstep(arr1, arr2)) - { - assert(arr1[index] == a); - assert(arr2[index] == b); - } + foreach (index, a, b; lockstep(arr1[], arr2[])) + { + assert(arr1[index] == a); + assert(arr2[index] == b); + } } // https://issues.dlang.org/show_bug.cgi?id=15860: foreach_reverse on lockstep -@system unittest +pure @safe unittest { auto arr1 = [0, 1, 2, 3]; auto arr2 = [4, 5, 6, 7]; - size_t n = arr1.length -1; + size_t n = arr1.length - 1; foreach_reverse (index, a, b; lockstep(arr1, arr2, StoppingPolicy.requireSameLength)) { assert(n == index); @@ -5724,7 +6327,7 @@ if (allSatisfy!(isInputRange, Ranges)) } } -@system unittest +pure @safe unittest { import std.algorithm.iteration : filter; import std.conv : to; @@ -5821,7 +6424,7 @@ if (allSatisfy!(isInputRange, Ranges)) foreach (x, y; lockstep(iota(0, 10), iota(0, 10))) { } } -@system unittest +pure @safe unittest { struct RvalueRange { @@ -5877,11 +6480,11 @@ private string lockstepReverseFailMixin(Ranges...)(bool withIndex) return format( q{ - int opApplyReverse()(scope int delegate(%s) dg) + int opApplyReverse%sFail()(scope int delegate(%s) dg) { static assert(false, "%s"); } - }, params.join(", "), message); + }, withIndex ? "Idx" : "" , params.join(", "), message); } // For generic programming, make sure Lockstep!(Range) is well defined for a @@ -7053,7 +7656,10 @@ struct FrontTransversal(Ror, { @property void front(ElementType val) { - _input.front.front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + _input.front.front = __ctfe ? val : forward!val; } } @@ -7110,7 +7716,10 @@ struct FrontTransversal(Ror, { @property void back(ElementType val) { - _input.back.front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + _input.back.front = __ctfe ? val : forward!val; } } } @@ -7143,7 +7752,10 @@ struct FrontTransversal(Ror, { void opIndexAssign(ElementType val, size_t n) { - _input[n].front = val; + import core.lifetime : forward; + + // __ctfe check is workaround for https://issues.dlang.org/show_bug.cgi?id=21542 + _input[n].front = __ctfe ? val : forward!val; } } mixin ImplementLength!_input; @@ -7284,6 +7896,50 @@ pure @safe unittest assert(ft.empty); } +// https://issues.dlang.org/show_bug.cgi?id=24481 +@safe unittest +{ + bool called; + struct Handle + { + int entry; + void opAssign()(auto ref const(typeof(this)) that) const { called = true; } + } + + const(Handle)[][] arr = [[Handle(0), Handle(10)], + [Handle(1), Handle(11)], + [Handle(2), Handle(12)], + [Handle(3), Handle(13)], + [Handle(4), Handle(14)]]; + + { + auto range = arr.frontTransversal(); + + called = false; + range.front = Handle(42); + assert(called == true); + + called = false; + range.back = Handle(42); + assert(called == true); + } + { + auto range = arr.frontTransversal!(TransverseOptions.assumeNotJagged)(); + + called = false; + range.front = Handle(42); + assert(called == true); + + called = false; + range.back = Handle(42); + assert(called == true); + + called = false; + range[0] = Handle(42); + assert(called == true); + } +} + /** Given a range of ranges, iterate transversally through the `n`th element of each of the enclosed ranges. This function @@ -8785,7 +9441,8 @@ public: { // `nextSource` is used to "look one step into the future" and check for the end // this means `nextSource` is advanced by `stepSize` on every `popFront` - nextSource = source.save.drop(windowSize); + nextSource = source.save; + auto poppedElems = nextSource.popFrontN(windowSize); } if (source.empty) @@ -8806,14 +9463,13 @@ public: if (source.length <= windowSize) hasShownPartialBefore = true; } - } else { // empty source range is needed, s.t. length, slicing etc. works properly static if (needsEndTracker) { - if (nextSource.empty) + if (poppedElems < windowSize) _empty = true; } else @@ -9770,13 +10426,39 @@ public: assert([1].map!(x => x).slide(2).equal!equal([[1]])); } +// https://issues.dlang.org/show_bug.cgi?id=19642 +@safe unittest +{ + import std.algorithm.comparison : equal; + import std.algorithm.iteration : splitter; + + assert("ab cd".splitter(' ').slide!(No.withPartial)(2).equal!equal([["ab", "cd"]])); +} + +// https://issues.dlang.org/show_bug.cgi?id=23976 +@safe unittest +{ + import std.algorithm.comparison : equal; + import std.algorithm.iteration : splitter; + + assert("1<2".splitter('<').slide(2).equal!equal([["1", "2"]])); +} + private struct OnlyResult(Values...) if (Values.length > 1) { + import std.meta : ApplyRight; + import std.traits : isAssignable; + private enum arity = Values.length; private alias UnqualValues = staticMap!(Unqual, Values); + private enum canAssignElements = allSatisfy!( + ApplyRight!(isAssignable, CommonType!Values), + Values + ); + private this(return scope ref Values values) { ref @trusted unqual(T)(ref T x){return cast() x;} @@ -9801,6 +10483,15 @@ if (Values.length > 1) return this[0]; } + static if (canAssignElements) + { + void front(CommonType!Values value) @property + { + assert(!empty, "Attempting to assign the front of an empty Only range"); + this[0] = value; + } + } + void popFront() { assert(!empty, "Attempting to popFront an empty Only range"); @@ -9813,6 +10504,15 @@ if (Values.length > 1) return this[$ - 1]; } + static if (canAssignElements) + { + void back(CommonType!Values value) @property + { + assert(!empty, "Attempting to assign the back of an empty Only range"); + this[$ - 1] = value; + } + } + void popBack() { assert(!empty, "Attempting to popBack an empty Only range"); @@ -9842,6 +10542,18 @@ if (Values.length > 1) return cast(T) values[i]; } + static if (canAssignElements) + { + void opIndexAssign(CommonType!Values value, size_t idx) + { + assert(idx < length, "Attempting to assign to an out of bounds index of an Only range"); + final switch (frontIndex + idx) + static foreach (i; 0 .. Values.length) + case i: + values[i] = value; + } + } + OnlyResult opSlice() { return this; @@ -9885,16 +10597,34 @@ if (Values.length > 1) // Specialize for single-element results private struct OnlyResult(T) { + import std.traits : isAssignable; + @property T front() { assert(!empty, "Attempting to fetch the front of an empty Only range"); return fetchFront(); } + static if (isAssignable!T) + { + @property void front(T value) + { + assert(!empty, "Attempting to assign the front of an empty Only range"); + assignFront(value); + } + } @property T back() { assert(!empty, "Attempting to fetch the back of an empty Only range"); return fetchFront(); } + static if (isAssignable!T) + { + @property void back(T value) + { + assert(!empty, "Attempting to assign the front of an empty Only range"); + assignFront(value); + } + } @property bool empty() const { return _empty; } @property size_t length() const { return !_empty; } @property auto save() { return this; } @@ -9910,6 +10640,14 @@ private struct OnlyResult(T) } alias opDollar = length; + // FIXME Workaround for https://issues.dlang.org/show_bug.cgi?id=24415 + import std.traits : hasElaborateCopyConstructor; + static if (hasElaborateCopyConstructor!T) + { + private static struct WorkaroundBugzilla24415 {} + public this()(WorkaroundBugzilla24415) {} + } + private this()(return scope auto ref T value) { ref @trusted unqual(ref T x){return cast() x;} @@ -9925,6 +10663,15 @@ private struct OnlyResult(T) return fetchFront(); } + static if (isAssignable!T) + { + void opIndexAssign(T value, size_t i) + { + assert(!_empty && i == 0, "Attempting to assign an out of bounds index of an Only range"); + assignFront(value); + } + } + OnlyResult opSlice() { return this; @@ -9954,6 +10701,13 @@ private struct OnlyResult(T) { return *cast(T*)&_value; } + static if (isAssignable!T) + { + private @trusted void assignFront(T newValue) + { + *cast(T*) &_value = newValue; + } + } } /** @@ -9974,6 +10728,9 @@ Params: Returns: A `RandomAccessRange` of the assembled values. + The returned range can be sliced. Its elements can be assigned to if every + type in `Values` supports assignment from the range's element type. + See_Also: $(LREF chain) to chain ranges */ auto only(Values...)(return scope Values values) @@ -9985,7 +10742,7 @@ if (!is(CommonType!Values == void)) /// ditto auto only()() { - // cannot use noreturn due to issue 22383 + // cannot use noreturn due to https://issues.dlang.org/show_bug.cgi?id=22383 struct EmptyElementType {} EmptyElementType[] result; return result; @@ -10235,6 +10992,32 @@ auto only()() auto r1 = arr.chain(x.only, only(x, x)); } +// https://issues.dlang.org/show_bug.cgi?id=24382 +@safe unittest +{ + auto r1 = only(123); + r1.front = 456; + r1.back = 456; + r1[0] = 456; + + auto r2 = only(123, 456); + r2.front = 789; + r2.back = 789; + r2[0] = 789; + + auto r3 = only(1.23, 456); + // Can't assign double to int + static assert(!__traits(compiles, r3.front = 7.89)); + static assert(!__traits(compiles, r3.back = 7.89)); + // Workaround https://issues.dlang.org/show_bug.cgi?id=24383 + static assert(!__traits(compiles, () { r3[0] = 7.89; })); + // Can't assign type other than element type (even if compatible) + static assert(!__traits(compiles, r3.front = 789)); + static assert(!__traits(compiles, r3.back = 789)); + // Workaround https://issues.dlang.org/show_bug.cgi?id=24383 + static assert(!__traits(compiles, () { r3[0] = 789; })); +} + /** Iterate over `range` with an attached index variable. @@ -11663,7 +12446,7 @@ public: return (*_range).front; } - static if (is(typeof((*(cast(const R*)_range)).front))) @property auto front() const + static if (is(typeof(((const R* r) => (*r).front)(null)))) @property auto front() const { return (*_range).front; } @@ -11689,7 +12472,7 @@ public: return (*_range).empty; } - static if (is(typeof((*cast(const R*)_range).empty))) @property bool empty() const + static if (is(typeof(((const R* r) => (*r).empty)(null)))) @property bool empty() const { return (*_range).empty; } @@ -11719,10 +12502,11 @@ public: else static if (isForwardRange!R) { import std.traits : isSafe; - private alias S = typeof((*_range).save); + private alias S = typeof((() => (*_range).save)()); + + static if (is(typeof(((const R* r) => (*r).save)(null)))) + private alias CS = typeof(((const R* r) => (*r).save)(null)); - static if (is(typeof((*cast(const R*)_range).save))) - private alias CS = typeof((*cast(const R*)_range).save); static if (isSafe!((R* r) => (*r).save)) { @@ -11731,7 +12515,7 @@ public: mixin(_genSave()); } - static if (is(typeof((*cast(const R*)_range).save))) @property RefRange!CS save() @trusted const + static if (is(typeof(((const R* r) => (*r).save)(null)))) @property RefRange!CS save() @trusted const { mixin(_genSave()); } @@ -11743,7 +12527,7 @@ public: mixin(_genSave()); } - static if (is(typeof((*cast(const R*)_range).save))) @property RefRange!CS save() const + static if (is(typeof(((const R* r) => (*r).save)(null)))) @property RefRange!CS save() const { mixin(_genSave()); } @@ -11762,7 +12546,7 @@ public: private static string _genSave() @safe pure nothrow { return `import core.lifetime : emplace;` ~ - `alias S = typeof((*_range).save);` ~ + `alias S = typeof((() => (*_range).save)());` ~ `static assert(isForwardRange!S, S.stringof ~ " is not a forward range.");` ~ `auto mem = new void[S.sizeof];` ~ `emplace!S(mem, cast(S)(*_range).save);` ~ @@ -11791,7 +12575,7 @@ public: return (*_range).back; } - static if (is(typeof((*(cast(const R*)_range)).back))) @property auto back() const + static if (is(typeof(((const R* r) => (*r).back)(null)))) @property auto back() const { return (*_range).back; } @@ -11881,7 +12665,7 @@ public: { return (*_range).length; } - static if (is(typeof((*cast(const R*)_range).length))) @property auto length() const + static if (is(typeof(((const R* r) => (*r).length)(null)))) @property auto length() const { return (*_range).length; } @@ -12324,6 +13108,44 @@ private: auto rr2 = refRange(&r2); } +// https://issues.dlang.org/show_bug.cgi?id=24801 +@safe unittest +{ + + { + static struct R + { + int front() => 0; + void popFront() {} + bool empty() => false; + } + R range; + auto r = RefRange!R(&range); + } + + { + static struct R + { + size_t start, end; + size_t length() => end - start; + int opIndex(size_t i) => 0; + + + int front() => this[0]; + int back() => this[length-1]; + void popFront() { start++; } + void popBack() { end--; } + bool empty() => length == 0; + R save() const => R(); + } + + R range; + auto r = RefRange!R(&range); + } + + +} + /// ditto auto refRange(R)(R* range) if (isInputRange!R) @@ -12800,10 +13622,10 @@ if (isInputRange!R && isIntegral!(ElementType!R)) { size_t bitsNum = IntegralType.sizeof * 8; - auto first = cast(IntegralType)(1); + auto first = IntegralType(1); // 2 ^ (bitsNum - 1) - auto second = cast(IntegralType)(cast(IntegralType)(1) << (bitsNum - 2)); + auto second = cast(IntegralType)(IntegralType(1) << (bitsNum - 2)); IntegralType[] a = [first, second]; auto bw = Bitwise!(IntegralType[])(a); @@ -12832,7 +13654,7 @@ if (isInputRange!R && isIntegral!(ElementType!R)) auto bw2 = bw[0 .. $ - 5]; auto bw3 = bw2[]; - assert(bw2.length == (bw.length - 5)); + assert(bw2.length == bw.length - 5); assert(bw2.length == bw3.length); bw2.popFront(); assert(bw2.length != bw3.length); diff --git a/std/range/primitives.d b/std/range/primitives.d index e581409ba32..dddcae9afd2 100644 --- a/std/range/primitives.d +++ b/std/range/primitives.d @@ -165,9 +165,12 @@ See_Also: Params: R = type to be tested + E = if present, the elements of the range must be + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) + to this type Returns: - `true` if R is an input range, `false` if not + `true` if R is an input range (possibly with element type `E`), `false` if not */ enum bool isInputRange(R) = is(typeof(R.init) == R) @@ -176,6 +179,10 @@ enum bool isInputRange(R) = && !is(typeof((R r) { return r.front; } (R.init)) == void) && is(typeof((R r) => r.popFront)); +/// ditto +enum bool isInputRange(R, E) = + .isInputRange!R && isQualifierConvertible!(ElementType!R, E); + /// @safe unittest { @@ -192,6 +199,18 @@ enum bool isInputRange(R) = static assert( isInputRange!(char[])); static assert(!isInputRange!(char[4])); static assert( isInputRange!(inout(int)[])); + static assert(!isInputRange!(int[], string)); + static assert( isInputRange!(int[], int)); + static assert( isInputRange!(int[], const int)); + static assert(!isInputRange!(int[], immutable int)); + + static assert(!isInputRange!(const(int)[], int)); + static assert( isInputRange!(const(int)[], const int)); + static assert(!isInputRange!(const(int)[], immutable int)); + + static assert(!isInputRange!(immutable(int)[], int)); + static assert( isInputRange!(immutable(int)[], const int)); + static assert( isInputRange!(immutable(int)[], immutable int)); static struct NotDefaultConstructible { @@ -524,13 +543,9 @@ private void putChar(R, E)(ref R r, E e) if (isSomeChar!E) { // https://issues.dlang.org/show_bug.cgi?id=9186: Can't use (E[]).init - ref const( char)[] cstringInit(); - ref const(wchar)[] wstringInit(); - ref const(dchar)[] dstringInit(); - - enum csCond = is(typeof(doPut(r, cstringInit()))); - enum wsCond = is(typeof(doPut(r, wstringInit()))); - enum dsCond = is(typeof(doPut(r, dstringInit()))); + enum csCond = is(typeof(doPut(r, (){ ref const( char)[] cstringInit(); return cstringInit(); }()))); + enum wsCond = is(typeof(doPut(r, (){ ref const(wchar)[] wstringInit(); return wstringInit(); }()))); + enum dsCond = is(typeof(doPut(r, (){ ref const(dchar)[] dstringInit(); return dstringInit(); }()))); //Use "max" to avoid static type demotion enum ccCond = is(typeof(doPut(r, char.max))); @@ -996,16 +1011,40 @@ have a `save` function. See_Also: The header of $(MREF std,range) for tutorials on ranges. + +Params: + R = type to be tested + E = if present, the elements of the range must be + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) + to this type + +Returns: + `true` if R is a forward range (possibly with element type `E`), `false` if not */ enum bool isForwardRange(R) = isInputRange!R && is(typeof((R r) { return r.save; } (R.init)) == R); +/// ditto +enum bool isForwardRange(R, E) = + .isForwardRange!R && isQualifierConvertible!(ElementType!R, E); + /// @safe unittest { static assert(!isForwardRange!(int)); static assert( isForwardRange!(int[])); static assert( isForwardRange!(inout(int)[])); + + static assert( isForwardRange!(int[], const int)); + static assert(!isForwardRange!(int[], immutable int)); + + static assert(!isForwardRange!(const(int)[], int)); + static assert( isForwardRange!(const(int)[], const int)); + static assert(!isForwardRange!(const(int)[], immutable int)); + + static assert(!isForwardRange!(immutable(int)[], int)); + static assert( isForwardRange!(immutable(int)[], const int)); + static assert( isForwardRange!(immutable(int)[], immutable int)); } @safe unittest @@ -1038,12 +1077,25 @@ element in the range. Calling `r.back` is allowed only if calling See_Also: The header of $(MREF std,range) for tutorials on ranges. + +Params: + R = type to be tested + E = if present, the elements of the range must be + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) + to this type + +Returns: + `true` if R is a bidirectional range (possibly with element type `E`), `false` if not */ enum bool isBidirectionalRange(R) = isForwardRange!R && is(typeof((R r) => r.popBack)) && (is(typeof((return ref R r) => r.back)) || is(typeof(ref (return ref R r) => r.back))) && is(typeof(R.init.back.init) == ElementType!R); +/// ditto +enum bool isBidirectionalRange(R, E) = + .isBidirectionalRange!R && isQualifierConvertible!(ElementType!R, E); + /// @safe unittest { @@ -1054,6 +1106,18 @@ enum bool isBidirectionalRange(R) = isForwardRange!R auto t = r.back; // can get the back of the range auto w = r.front; static assert(is(typeof(t) == typeof(w))); // same type for front and back + + // Checking the element type + static assert( isBidirectionalRange!(int[], const int)); + static assert(!isBidirectionalRange!(int[], immutable int)); + + static assert(!isBidirectionalRange!(const(int)[], int)); + static assert( isBidirectionalRange!(const(int)[], const int)); + static assert(!isBidirectionalRange!(const(int)[], immutable int)); + + static assert(!isBidirectionalRange!(immutable(int)[], int)); + static assert( isBidirectionalRange!(immutable(int)[], const int)); + static assert( isBidirectionalRange!(immutable(int)[], immutable int)); } @safe unittest @@ -1103,6 +1167,15 @@ are bidirectional ranges only. See_Also: The header of $(MREF std,range) for tutorials on ranges. + +Params: + R = type to be tested + E = if present, the elements of the range must be + $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) + to this type + +Returns: + `true` if R is a random-access range (possibly with element type `E`), `false` if not */ enum bool isRandomAccessRange(R) = is(typeof(lvalueOf!R[1]) == ElementType!R) @@ -1113,6 +1186,10 @@ enum bool isRandomAccessRange(R) = && (isInfinite!R || !is(typeof(lvalueOf!R[$ - 1])) || is(typeof(lvalueOf!R[$ - 1]) == ElementType!R)); +/// ditto +enum bool isRandomAccessRange(R, E) = + .isRandomAccessRange!R && isQualifierConvertible!(ElementType!R, E); + /// @safe unittest { @@ -1141,6 +1218,18 @@ enum bool isRandomAccessRange(R) = static if (!isInfinite!R) static assert(is(typeof(f) == typeof(r[$ - 1]))); } + + // Checking the element type + static assert( isRandomAccessRange!(int[], const int)); + static assert(!isRandomAccessRange!(int[], immutable int)); + + static assert(!isRandomAccessRange!(const(int)[], int)); + static assert( isRandomAccessRange!(const(int)[], const int)); + static assert(!isRandomAccessRange!(const(int)[], immutable int)); + + static assert(!isRandomAccessRange!(immutable(int)[], int)); + static assert( isRandomAccessRange!(immutable(int)[], const int)); + static assert( isRandomAccessRange!(immutable(int)[], immutable int)); } @safe unittest @@ -1665,11 +1754,9 @@ For finite ranges, the result of `opSlice` must be of the same type as the original range type. If the range defines `opDollar`, then it must support subtraction. -For infinite ranges, when $(I not) using `opDollar`, the result of -`opSlice` must be the result of $(LREF take) or $(LREF takeExactly) on the -original range (they both return the same type for infinite ranges). However, -when using `opDollar`, the result of `opSlice` must be that of the -original range type. +For infinite ranges, when $(I not) using `opDollar`, the result of `opSlice` +may be a forward range of any type. However, when using `opDollar`, the result +of `opSlice` must be of the same type as the original range type. The following expression must be true for `hasSlicing` to be `true`: @@ -1744,6 +1831,38 @@ enum bool hasSlicing(R) = isForwardRange!R static assert(hasSlicing!InfOnes); } +// https://issues.dlang.org/show_bug.cgi?id=24348 +@safe unittest +{ + static struct Slice + { + size_t length; + bool empty() => length == 0; + int front() => 0; + void popFront() { --length; } + Slice save() => this; + } + + static struct InfZeros + { + enum empty = false; + int front() => 0; + void popFront() {} + InfZeros save() => this; + + Slice opIndex(size_t[2] bounds) + { + size_t i = bounds[0], j = bounds[1]; + size_t length = i <= j ? j - i : 0; + return Slice(length); + } + + size_t[2] opSlice(size_t dim : 0)(size_t i, size_t j) => [i, j]; + } + + static assert(hasSlicing!InfZeros); +} + /** This is a best-effort implementation of `length` for any kind of range. diff --git a/std/regex/internal/backtracking.d b/std/regex/internal/backtracking.d index 21766fc2d0c..a488e0660d0 100644 --- a/std/regex/internal/backtracking.d +++ b/std/regex/internal/backtracking.d @@ -73,12 +73,7 @@ final: override @property ref size_t refCount() { return _refCount; } override @property ref const(RegEx) pattern(){ return re; } - static if (__traits(hasMember,Stream, "search")) - { - enum kicked = true; - } - else - enum kicked = false; + enum kicked = __traits(hasMember, Stream, "search"); static size_t initialMemory(const ref RegEx re) { @@ -687,7 +682,7 @@ final: while (prevStack()) {} return re.ir[pc].data; default: - debug printBytecode(re.ir[0..$]); + debug(std_regex_debug) printBytecode(re.ir[0..$]); assert(0); L_backtrack: if (!popState()) diff --git a/std/regex/internal/ir.d b/std/regex/internal/ir.d index ec0cb66631e..25566d6bea6 100644 --- a/std/regex/internal/ir.d +++ b/std/regex/internal/ir.d @@ -49,10 +49,29 @@ CharMatcher[CodepointSet] matcherCache; } } -@property ref wordMatcher()() +// Force pure because that is needed +// Templated so that we don't pull in std.uni wordCharacter unnecessarily. +@property ref wordMatcher()() pure { - static immutable CharMatcher matcher = CharMatcher(wordCharacter); - return matcher; + static auto actual() + { + static CharMatcher matcher; + static bool haveMatcher; + + if (!haveMatcher) + { + matcher = CharMatcher(wordCharacter); + haveMatcher = true; + } + + return &matcher; + } + + // WORKAROUND: if the compiler won't memoize the output of the function for us, + // we'll do it with pure and there will be casts and it'll be happy about it. + // This is unfortunately needed to make std.regex as a whole faster to import & use + // in build times ~500ms. + return *(cast(immutable(CharMatcher)* function() @safe nothrow @nogc pure)&actual)(); } // some special Unicode white space characters @@ -299,7 +318,7 @@ struct Bytecode @property bool backreference() const { assert(code == IR.GroupStart || code == IR.GroupEnd); - return cast(bool)(raw & 1 << 23); + return (raw & 1 << 23) != 0; } //mark as local reference (for backrefs in lookarounds) @@ -313,7 +332,7 @@ struct Bytecode @property bool localRef() const { assert(code == IR.Backref); - return cast(bool)(raw & 1 << 23); + return (raw & 1 << 23) != 0; } //human readable name of instruction @@ -384,7 +403,7 @@ struct Group(DataIndex) } //debugging tool, prints out instruction along with opcodes -@trusted string disassemble(in Bytecode[] irb, uint pc, in NamedGroup[] dict=[]) +debug(std_regex_parser) @trusted string disassemble(in Bytecode[] irb, uint pc, in NamedGroup[] dict=[]) { import std.array : appender; import std.format.write : formattedWrite; @@ -448,7 +467,7 @@ struct Group(DataIndex) } //disassemble the whole chunk -@trusted void printBytecode()(in Bytecode[] slice, in NamedGroup[] dict=[]) +debug(std_regex_parser) @trusted void printBytecode()(in Bytecode[] slice, in NamedGroup[] dict=[]) { import std.stdio : writeln; for (uint pc=0; pc= 0, "Cannot open Windows HANDLE"); fdopen(fd, stdioOpenmode, "HANDLE(%s)".format(handle)); @@ -932,8 +802,7 @@ Throws: `ErrnoException` in case of error. } /** -Returns `true` if the file is at end (see $(HTTP -cplusplus.com/reference/clibrary/cstdio/feof.html, feof)). +Returns `true` if the file is at end (see $(CSTDIO feof)). Throws: `Exception` if the file is not opened. */ @@ -961,8 +830,7 @@ Throws: `Exception` if the file is not opened. /** If the file is closed or not yet opened, returns `true`. Otherwise, returns -$(HTTP cplusplus.com/reference/clibrary/cstdio/ferror.html, ferror) for -the file handle. +$(CSTDIO ferror) for the file handle. */ @property bool error() const @trusted pure nothrow { @@ -1017,8 +885,7 @@ Throws: `ErrnoException` on failure if closing the file. /** If the file was closed or not yet opened, succeeds vacuously. Otherwise -closes the file (by calling $(HTTP -cplusplus.com/reference/clibrary/cstdio/fclose.html, fclose)), +closes the file (by calling $(CSTDIO fclose)), throwing on error. Even if an exception is thrown, afterwards the $(D File) object is empty. This is different from `detach` in that it always closes the file; consequently, all other `File` objects @@ -1046,8 +913,7 @@ Throws: `ErrnoException` on error. /** If the file is closed or not yet opened, succeeds vacuously. Otherwise, returns -$(HTTP cplusplus.com/reference/clibrary/cstdio/_clearerr.html, -_clearerr) for the file handle. +$(CSTDIO clearerr) for the file handle. */ void clearerr() @safe pure nothrow { @@ -1058,8 +924,7 @@ _clearerr) for the file handle. /** Flushes the C `FILE` buffers. -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/_fflush.html, _fflush) -for the file handle. +Calls $(CSTDIO fflush) for the file handle. Throws: `Exception` if the file is not opened or if the call to `fflush` fails. */ @@ -1125,7 +990,7 @@ Throws: `Exception` if the file is not opened or if the OS call fails. } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/fread.html, fread) for the +Calls $(CSTDIO fread) for the file handle. The number of items to read and the size of each item is inferred from the size and type of the input array, respectively. @@ -1146,18 +1011,9 @@ Throws: `ErrnoException` if the file is not opened or the call to `fread` fails. enforce(isOpen, "Attempting to read from an unopened file"); version (Windows) { - immutable fd = .fileno(_p.handle); - immutable mode = .__setmode(fd, _O_BINARY); - scope(exit) .__setmode(fd, mode); - version (DIGITAL_MARS_STDIO) - { - import core.atomic : atomicOp; - - // https://issues.dlang.org/show_bug.cgi?id=4243 - immutable info = __fhnd_info[fd]; - atomicOp!"&="(__fhnd_info[fd], ~FHND_TEXT); - scope(exit) __fhnd_info[fd] = info; - } + immutable fileno_t fd = .fileno(_p.handle); + immutable mode = ._setmode(fd, _O_BINARY); + scope(exit) ._setmode(fd, mode); } immutable freadResult = trustedFread(_p.handle, buffer); assert(freadResult <= buffer.length); // fread return guarantee @@ -1184,6 +1040,9 @@ Throws: `ErrnoException` if the file is not opened or the call to `fread` fails. assert(buf == "\r\n\n\r\n"); } + // https://issues.dlang.org/show_bug.cgi?id=24685 + static assert(!__traits(compiles, (File f) @safe { int*[1] bar; f.rawRead(bar[]); })); + // https://issues.dlang.org/show_bug.cgi?id=21729 @system unittest { @@ -1220,7 +1079,7 @@ Throws: `ErrnoException` if the file is not opened or the call to `fread` fails. } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/fwrite.html, fwrite) for the file +Calls $(CSTDIO fwrite) for the file handle. The number of items to write and the size of each item is inferred from the size and type of the input array, respectively. An error is thrown if the buffer could not be written in its entirety. @@ -1236,25 +1095,15 @@ Throws: `ErrnoException` if the file is not opened or if the call to `fwrite` fa version (Windows) { - immutable fd = .fileno(_p.handle); - immutable oldMode = .__setmode(fd, _O_BINARY); + immutable fileno_t fd = .fileno(_p.handle); + immutable oldMode = ._setmode(fd, _O_BINARY); if (oldMode != _O_BINARY) { // need to flush the data that was written with the original mode - .__setmode(fd, oldMode); - flush(); // before changing translation mode .__setmode(fd, _O_BINARY); - .__setmode(fd, _O_BINARY); - } - - version (DIGITAL_MARS_STDIO) - { - import core.atomic : atomicOp; - - // https://issues.dlang.org/show_bug.cgi?id=4243 - immutable info = __fhnd_info[fd]; - atomicOp!"&="(__fhnd_info[fd], ~FHND_TEXT); - scope (exit) __fhnd_info[fd] = info; + ._setmode(fd, oldMode); + flush(); // before changing translation mode ._setmode(fd, _O_BINARY); + ._setmode(fd, _O_BINARY); } scope (exit) @@ -1262,7 +1111,7 @@ Throws: `ErrnoException` if the file is not opened or if the call to `fwrite` fa if (oldMode != _O_BINARY) { flush(); - .__setmode(fd, oldMode); + ._setmode(fd, oldMode); } } } @@ -1290,7 +1139,7 @@ Throws: `ErrnoException` if the file is not opened or if the call to `fwrite` fa } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/fseek.html, fseek) +Calls $(CSTDIO fseek) for the file handle to move its position indicator. Params: @@ -1355,9 +1204,6 @@ Throws: `Exception` if the file is not opened. f.seek(7); assert(f.readln() == "hijklmnopqrstuvwxyz"); - version (CRuntime_DigitalMars) - auto bigOffset = int.max - 100; - else version (CRuntime_Bionic) auto bigOffset = int.max - 100; else @@ -1374,7 +1220,7 @@ Throws: `Exception` if the file is not opened. } /** -Calls $(HTTP cplusplus.com/reference/cstdio/ftell.html, ftell) +Calls $(CSTDIO ftell) for the managed file handle, which returns the current value of the position indicator of the file handle. @@ -1420,8 +1266,7 @@ Throws: `Exception` if the file is not opened. } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/_rewind.html, _rewind) -for the file handle. +Calls $(CSTDIO rewind) for the file handle. Throws: `Exception` if the file is not opened. */ @@ -1434,8 +1279,7 @@ Throws: `Exception` if the file is not opened. } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/_setvbuf.html, _setvbuf) for -the file handle. +Calls $(CSTDIO setvbuf) for the file handle. Throws: `Exception` if the file is not opened. `ErrnoException` if the call to `setvbuf` fails. @@ -1450,8 +1294,7 @@ Throws: `Exception` if the file is not opened. } /** -Calls $(HTTP cplusplus.com/reference/clibrary/cstdio/_setvbuf.html, -_setvbuf) for the file handle. +Calls $(CSTDIO setvbuf) for the file handle. Throws: `Exception` if the file is not opened. `ErrnoException` if the call to `setvbuf` fails. @@ -2252,8 +2095,7 @@ $(CONSOLE } /** - Returns a temporary file by calling - $(HTTP cplusplus.com/reference/clibrary/cstdio/_tmpfile.html, _tmpfile). + Returns a temporary file by calling $(CSTDIO tmpfile). Note that the created file has no $(LREF name).*/ static File tmpfile() @safe { @@ -2297,7 +2139,7 @@ Returns the `FILE*` corresponding to this object. /** Returns the file number corresponding to this object. */ - @property int fileno() const @trusted + @property fileno_t fileno() const @trusted { import std.exception : enforce; @@ -2314,10 +2156,7 @@ Returns the underlying operating system `HANDLE` (Windows only). version (Windows) @property HANDLE windowsHandle() { - version (DIGITAL_MARS_STDIO) - return _fdToHandle(fileno); - else - return cast(HANDLE)_get_osfhandle(fileno); + return cast(HANDLE)_get_osfhandle(fileno); } @@ -2501,6 +2340,24 @@ void main() Notice that neither example accesses the line data returned by `front` after the corresponding `popFront` call is made (because the contents may well have changed). +---- + +Windows specific Example: +---- +import std.stdio; + +version (Windows) +void main() +{ + + foreach (line; File("file.txt").byLine(No.keepTerminator, "\r\n")) + { + writeln("|"~line~"|"); + if (line == "HelloWorld") + writeln("^This Line is here."); + } + +} */ auto byLine(Terminator = char, Char = char) (KeepTerminator keepTerminator = No.keepTerminator, @@ -3110,18 +2967,21 @@ is empty, throws an `Exception`. In case of an I/O error throws file_ = f; FILE* fps = f._p.handle; - version (MICROSOFT_STDIO) + version (CRuntime_Microsoft) { // Microsoft doesn't implement fwide. Instead, there's the // concept of ANSI/UNICODE mode. fputc doesn't work in UNICODE // mode; fputwc has to be used. So that essentially means // "wide-oriented" for us. - immutable int mode = __setmode(f.fileno, _O_TEXT); + immutable int mode = _setmode(f.fileno, _O_TEXT); // Set some arbitrary mode to obtain the previous one. - __setmode(f.fileno, mode); // Restore previous mode. - if (mode & (_O_WTEXT | _O_U16TEXT | _O_U8TEXT)) + if (mode != -1) // _setmode() succeeded { - orientation_ = 1; // wide + _setmode(f.fileno, mode); // Restore previous mode. + if (mode & (_O_WTEXT | _O_U16TEXT | _O_U8TEXT)) + { + orientation_ = 1; // wide + } } } else @@ -3346,9 +3206,8 @@ is empty, throws an `Exception`. In case of an I/O error throws version (Windows) { - int fd, oldMode; - version (DIGITAL_MARS_STDIO) - ubyte oldInfo; + fileno_t fd; + int oldMode; } public: @@ -3368,15 +3227,7 @@ is empty, throws an `Exception`. In case of an I/O error throws { .fflush(fps); // before changing translation mode fd = .fileno(fps); - oldMode = .__setmode(fd, _O_BINARY); - version (DIGITAL_MARS_STDIO) - { - import core.atomic : atomicOp; - - // https://issues.dlang.org/show_bug.cgi?id=4243 - oldInfo = __fhnd_info[fd]; - atomicOp!"&="(__fhnd_info[fd], ~FHND_TEXT); - } + oldMode = ._setmode(fd, _O_BINARY); } } @@ -3390,12 +3241,7 @@ is empty, throws an `Exception`. In case of an I/O error throws version (Windows) { .fflush(fps); // before restoring translation mode - version (DIGITAL_MARS_STDIO) - { - // https://issues.dlang.org/show_bug.cgi?id=4243 - __fhnd_info[fd] = oldInfo; - } - .__setmode(fd, oldMode); + ._setmode(fd, oldMode); } _FUNLOCK(fps); @@ -3805,7 +3651,7 @@ void main() assert(std.file.readText!string(deleteme) == "y"); } -@safe unittest // issue 18801 +@safe unittest // https://issues.dlang.org/show_bug.cgi?id=18801 { static import std.file; import std.string : stripLeft; @@ -3848,19 +3694,12 @@ void main() return setlocale(LC_CTYPE, loc.ptr).fromStringz.endsWith(loc); }); scope(exit) () @trusted { setlocale(LC_CTYPE, oldCt); } (); - version (DIGITAL_MARS_STDIO) // DM can't handle Unicode above U+07FF. - { - alias strs = AliasSeq!("xä\u07FE", "yö\u07FF"w); - } - else - { - alias strs = AliasSeq!("xä\U0001F607", "yö\U0001F608"w); - } + alias strs = AliasSeq!("xä\U0001F607", "yö\U0001F608"w); { auto f = File(deleteme, "w"); - version (MICROSOFT_STDIO) + version (CRuntime_Microsoft) { - () @trusted { __setmode(fileno(f.getFP()), _O_U8TEXT); } (); + () @trusted { _setmode(fileno(f.getFP()), _O_U8TEXT); } (); } else { @@ -4663,11 +4502,11 @@ if ((isSomeFiniteCharInputRange!R1 || isSomeString!R1) && { /* * The new opengroup large file support API is transparently - * included in the normal C bindings. http://opengroup.org/platform/lfs.html#1.0 + * included in the normal C bindings. https://www.opengroup.org/platform/lfs.html#1.0 * if _FILE_OFFSET_BITS in druntime is 64, off_t is 64 bit and * the normal functions work fine. If not, then large file support * probably isn't available. Do not use the old transitional API - * (the native extern(C) fopen64, http://www.unix.org/version2/whatsnew/lfs20mar.html#3.0) + * (the native extern(C) fopen64, https://unix.org/version2/whatsnew/lfs20mar.html#3.0) */ import core.sys.posix.stdio : fopen; return fopen(namez, modez); @@ -4716,6 +4555,13 @@ private auto trustedFwrite(T)(FILE* f, const T[] obj) @trusted * Convenience function that forwards to `core.stdc.stdio.fread` */ private auto trustedFread(T)(FILE* f, T[] obj) @trusted +if (!imported!"std.traits".hasIndirections!T) +{ + return fread(obj.ptr, T.sizeof, obj.length, f); +} + +private auto trustedFread(T)(FILE* f, T[] obj) @system +if (imported!"std.traits".hasIndirections!T) { return fread(obj.ptr, T.sizeof, obj.length, f); } @@ -5498,120 +5344,7 @@ private struct LockedFile // Private implementation of readln private size_t readlnImpl(FILE* fps, ref char[] buf, dchar terminator, File.Orientation orientation) @safe { - version (DIGITAL_MARS_STDIO) - return () @trusted { - auto lf = LockedFile(fps); - ReadlnAppender app; - app.initialize(buf); - - if (__fhnd_info[lf.fp._file] & FHND_WCHAR) - { /* Stream is in wide characters. - * Read them and convert to chars. - */ - static assert(wchar_t.sizeof == 2); - for (int c = void; (c = lf.fgetwc()) != -1; ) - { - if ((c & ~0x7F) == 0) - { - app.putchar(cast(char) c); - if (c == terminator) - break; - } - else - { - if (c >= 0xD800 && c <= 0xDBFF) - { - int c2 = void; - if ((c2 = lf.fgetwc()) != -1 || - c2 < 0xDC00 && c2 > 0xDFFF) - { - StdioException("unpaired UTF-16 surrogate"); - } - c = ((c - 0xD7C0) << 10) + (c2 - 0xDC00); - } - app.putdchar(cast(dchar) c); - } - } - if (ferror(fps)) - StdioException(); - } - else if (lf.fp._flag & _IONBF) - { - /* Use this for unbuffered I/O, when running - * across buffer boundaries, or for any but the common - * cases. - */ - L1: - int c; - while ((c = lf.fgetc()) != -1) - { - app.putchar(cast(char) c); - if (c == terminator) - { - buf = app.data; - return buf.length; - } - - } - - if (ferror(fps)) - StdioException(); - } - else - { - int u = lf.fp._cnt; - char* p = lf.fp._ptr; - int i; - if (lf.fp._flag & _IOTRAN) - { /* Translated mode ignores \r and treats ^Z as end-of-file - */ - char c; - while (1) - { - if (i == u) // if end of buffer - goto L1; // give up - c = p[i]; - i++; - if (c != '\r') - { - if (c == terminator) - break; - if (c != 0x1A) - continue; - goto L1; - } - else - { if (i != u && p[i] == terminator) - break; - goto L1; - } - } - app.putonly(p[0 .. i]); - app.buf[i - 1] = cast(char) terminator; - if (terminator == '\n' && c == '\r') - i++; - } - else - { - while (1) - { - if (i == u) // if end of buffer - goto L1; // give up - auto c = p[i]; - i++; - if (c == terminator) - break; - } - app.putonly(p[0 .. i]); - } - lf.fp._cnt -= i; - lf.fp._ptr += i; - } - - buf = app.data; - return buf.length; - }(); - else version (MICROSOFT_STDIO) + version (CRuntime_Microsoft) { auto lf = LockedFile(fps); diff --git a/std/string.d b/std/string.d index b1063ee0040..bcc9d7c13af 100644 --- a/std/string.d +++ b/std/string.d @@ -457,26 +457,26 @@ pure nothrow @system unittest // https://issues.dlang.org/show_bug.cgi?id=15136 alias CaseSensitive = Flag!"caseSensitive"; /++ - Searches for character in range. + Searches for a character in a string or range. Params: - s = string or InputRange of characters to search in correct UTF format - c = character to search for - startIdx = starting index to a well-formed code point - cs = `Yes.caseSensitive` or `No.caseSensitive` + s = string or InputRange of characters to search for `c` in + c = character to search for in `s` + startIdx = index to a well-formed code point in `s` to start + searching from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`). Returns: - the index of the first occurrence of `c` in `s` with - respect to the start index `startIdx`. If `c` - is not found, then `-1` is returned. - If `c` is found the value of the returned index is at least - `startIdx`. - If the parameters are not valid UTF, the result will still - be in the range [-1 .. s.length], but will not be reliable otherwise. + If `c` is found in `s`, then the index of its first occurrence is + returned. If `c` is not found or `startIdx` is greater than or equal to + `s.length`, then -1 is returned. If the parameters are not valid UTF, + the result will still be either -1 or in the range [`startIdx` .. + `s.length`], but will not be reliable otherwise. Throws: - If the sequence starting at `startIdx` does not represent a well - formed codepoint, then a $(REF UTFException, std,utf) may be thrown. + If the sequence starting at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. See_Also: $(REF countUntil, std,algorithm,searching) +/ @@ -901,30 +901,30 @@ private template _indexOfStr(CaseSensitive cs) } /++ - Searches for substring in `s`. + Searches for a substring in a string or range. Params: - s = string or ForwardRange of characters to search in correct UTF format - sub = substring to search for - startIdx = the index into s to start searching from - cs = `Yes.caseSensitive` (default) or `No.caseSensitive` + s = string or ForwardRange of characters to search for `sub` in + sub = substring to search for in `s` + startIdx = index to a well-formed code point in `s` to start + searching from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) Returns: - the index of the first occurrence of `sub` in `s` with - respect to the start index `startIdx`. If `sub` is not found, - then `-1` is returned. - If the arguments are not valid UTF, the result will still - be in the range [-1 .. s.length], but will not be reliable otherwise. - If `sub` is found the value of the returned index is at least - `startIdx`. + The index of the first occurrence of `sub` in `s`. If `sub` is not found + or `startIdx` is greater than or equal to `s.length`, then -1 is + returned. If the arguments are not valid UTF, the result will still be + either -1 or in the range [`startIdx` .. `s.length`], but will not be + reliable otherwise. Throws: - If the sequence starting at `startIdx` does not represent a well - formed codepoint, then a $(REF UTFException, std,utf) may be thrown. + If the sequence starting at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. Bugs: - Does not work with case insensitive strings where the mapping of - tolower and toupper is not 1:1. + Does not work with case-insensitive strings where the mapping of + $(REF toLower, std,uni) and $(REF toUpper, std,uni) is not 1:1. +/ ptrdiff_t indexOf(Range, Char)(Range s, const(Char)[] sub) if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && @@ -1156,23 +1156,26 @@ unittest } /++ + Searches for the last occurrence of a character in a string. + Params: - s = string to search - c = character to search for - startIdx = the index into s to start searching from - cs = `Yes.caseSensitive` or `No.caseSensitive` + s = string to search for `c` in + c = character to search for in `s` + startIdx = index of a well-formed code point in `s` to start searching + from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) Returns: - The index of the last occurrence of `c` in `s`. If `c` is not - found, then `-1` is returned. The `startIdx` slices `s` in - the following way $(D s[0 .. startIdx]). `startIdx` represents a - codeunit index in `s`. + If `c` is found in `s`, then the index of its last occurrence is + returned. If `c` is not found or `startIdx` is greater than or equal to + `s.length`, then -1 is returned. If the parameters are not valid UTF, + the result will still be either -1 or in the range [`startIdx` .. + `s.length`], but will not be reliable otherwise. Throws: - If the sequence ending at `startIdx` does not represent a well - formed codepoint, then a $(REF UTFException, std,utf) may be thrown. - - `cs` indicates whether the comparisons are case sensitive. + If the sequence ending at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. +/ ptrdiff_t lastIndexOf(Char)(const(Char)[] s, in dchar c, in CaseSensitive cs = Yes.caseSensitive) @safe pure @@ -1345,23 +1348,30 @@ if (isSomeChar!Char) } /++ + Searches for the last occurrence of a substring in a string. + Params: - s = string to search - sub = substring to search for - startIdx = the index into s to start searching from - cs = `Yes.caseSensitive` or `No.caseSensitive` + s = string to search for `sub` in + sub = substring to search for in `s` + startIdx = index to a well-formed code point in `s` to start + searching from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) Returns: - the index of the last occurrence of `sub` in `s`. If `sub` is - not found, then `-1` is returned. The `startIdx` slices `s` - in the following way $(D s[0 .. startIdx]). `startIdx` represents a - codeunit index in `s`. + The index of the last occurrence of `sub` in `s`. If `sub` is not found + or `startIdx` is greater than or equal to `s.length`, then -1 is + returned. If the parameters are not valid UTF, the result will still be + either -1 or in the range [`startIdx` .. `s.length`], but will not be + reliable otherwise. Throws: - If the sequence ending at `startIdx` does not represent a well - formed codepoint, then a $(REF UTFException, std,utf) may be thrown. + If the sequence starting at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. - `cs` indicates whether the comparisons are case sensitive. + Bugs: + Does not work with case-insensitive strings where the mapping of + $(REF toLower, std,uni) and $(REF toUpper, std,uni) is not 1:1. +/ ptrdiff_t lastIndexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, in CaseSensitive cs = Yes.caseSensitive) @safe pure @@ -1747,21 +1757,28 @@ if (isSomeChar!Char && isSomeChar!Char2) } /** - Returns the index of the first occurrence of any of the elements in $(D - needles) in `haystack`. If no element of `needles` is found, - then `-1` is returned. The `startIdx` slices `haystack` in the - following way $(D haystack[startIdx .. $]). `startIdx` represents a - codeunit index in `haystack`. If the sequence ending at `startIdx` - does not represent a well formed codepoint, then a $(REF UTFException, std,utf) - may be thrown. + Searches the string `haystack` for one of the characters in `needles` + starting at index `startIdx`. If `startIdx` is not given, it defaults to 0. Params: - haystack = String to search for needles in. - needles = Strings to search for in haystack. - startIdx = slices haystack like this $(D haystack[startIdx .. $]). If - the startIdx is greater than or equal to the length of haystack the - functions returns `-1`. - cs = Indicates whether the comparisons are case sensitive. + haystack = string to search for needles in + needles = characters to search for in `haystack` + startIdx = index of a well-formed code point in `haystack` to start + searching from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) + + Returns: + The index of the first occurrence of any of the elements of `needles` in + `haystack`. If no element of `needles` is found or `startIdx` is greater + than or equal to `haystack.length`, then -1 is returned. If the + parameters are not valid UTF, the result will still be either -1 or in + the range [`startIdx` .. `haystack.length`], but will not be reliable + otherwise. + + Throws: + If the sequence starting at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. */ ptrdiff_t indexOfAny(Char,Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive) @safe pure @@ -1914,21 +1931,23 @@ if (isSomeChar!Char && isSomeChar!Char2) } /** - Returns the index of the last occurrence of any of the elements in $(D - needles) in `haystack`. If no element of `needles` is found, - then `-1` is returned. The `stopIdx` slices `haystack` in the - following way $(D s[0 .. stopIdx]). `stopIdx` represents a codeunit - index in `haystack`. If the sequence ending at `startIdx` does not - represent a well formed codepoint, then a $(REF UTFException, std,utf) may be - thrown. + Searches `haystack` for the last occurrence of any of the + characters in `needles`. Params: - haystack = String to search for needles in. - needles = Strings to search for in haystack. - stopIdx = slices haystack like this $(D haystack[0 .. stopIdx]). If - the stopIdx is greater than or equal to the length of haystack the - functions returns `-1`. - cs = Indicates whether the comparisons are case sensitive. + haystack = string to search needles in + needles = characters to search for in `haystack` + stopIdx = index in `haystack` to stop searching at (exclusive); defaults + to `haystack.length` + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) + + Returns: + The index of the last occurrence of any of the characters of `needles` + in `haystack`. If no character of `needles` is found or `stopIdx` is 0, + then -1 is returned. If the parameters are not valid UTF, the result + will still be in the range [-1 .. `stopIdx`], but will not be reliable + otherwise. */ ptrdiff_t lastIndexOfAny(Char,Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive) @@ -2097,17 +2116,27 @@ if (isSomeChar!Char && isSomeChar!Char2) } /** - Returns the index of the first occurrence of any character not an elements - in `needles` in `haystack`. If all element of `haystack` are - element of `needles` `-1` is returned. + Searches `haystack` for a character not in `needles`. Params: - haystack = String to search for needles in. - needles = Strings to search for in haystack. - startIdx = slices haystack like this $(D haystack[startIdx .. $]). If - the startIdx is greater than or equal to the length of haystack the - functions returns `-1`. - cs = Indicates whether the comparisons are case sensitive. + haystack = string to search for needles in + needles = characters to search for in `haystack` + startIdx = index of a well-formed code point in `haystack` to start + searching from; defaults to 0 + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) + + Returns: + The index of the first character in `haystack` that is not an element of + `needles`. If all characters of `haystack` are elements of `needles` or + `startIdx` is greater than or equal to `haystack.length`, then -1 is + returned. If the parameters are not valid UTF, the result will still be + either -1 or in the range [`startIdx` .. `haystack.length`], but will + not be reliable otherwise. + + Throws: + If the sequence starting at `startIdx` does not represent a well-formed + code point, then a $(REF UTFException, std,utf) may be thrown. */ ptrdiff_t indexOfNeither(Char,Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive) @@ -2257,17 +2286,22 @@ if (isSomeChar!Char && isSomeChar!Char2) } /** - Returns the last index of the first occurence of any character that is not - an elements in `needles` in `haystack`. If all element of - `haystack` are element of `needles` `-1` is returned. + Searches for the last character in `haystack` that is not in `needles`. Params: - haystack = String to search for needles in. - needles = Strings to search for in haystack. - stopIdx = slices haystack like this $(D haystack[0 .. stopIdx]) If - the stopIdx is greater than or equal to the length of haystack the - functions returns `-1`. - cs = Indicates whether the comparisons are case sensitive. + haystack = string to search for needles in + needles = characters to search for in `haystack` + stopIdx = index in `haystack` to stop searching at (exclusive); + defaults to `haystack.length` + cs = specifies whether comparisons are case-sensitive + (`Yes.caseSensitive`) or not (`No.caseSensitive`) + + Returns: + The index of the last character in `haystack` that is not an element of + `needles`. If all characters of `haystack` are in `needles` or `stopIdx` + is 0, then -1 is returned. If the parameters are not valid UTF, the + result will still be in the range [-1 .. `stopIdx`], but will not be + reliable otherwise. */ ptrdiff_t lastIndexOfNeither(Char,Char2)(const(Char)[] haystack, const(Char2)[] needles, in CaseSensitive cs = Yes.caseSensitive) @@ -3815,6 +3849,7 @@ unittest assert(chomp(" hello world \n\n" ~ [lineSep]) == " hello world \n\n"); assert(chomp(" hello world \n\n" ~ [paraSep]) == " hello world \n\n"); assert(chomp(" hello world \n\n" ~ [ nelSep]) == " hello world \n\n"); + assert(chomp(" hello world ") == " hello world "); assert(chomp(" hello world") == " hello world"); assert(chomp("") == ""); @@ -5941,36 +5976,36 @@ C1[] tr(C1, C2, C3, C4 = immutable char) n = 0; // consider it 'found' at position 0 Lfound: - - // Find the nth character in to[] - dchar nextt; - for (size_t i = 0; i < to.length; ) - { - immutable t = decode(to, i); - if (t == '-' && lastt != dchar.init && i < to.length) + { // create a new scope so that gotos don't skip of declaration of nextt + // Find the nth character in to[] + dchar nextt; + for (size_t i = 0; i < to.length; ) { - nextt = decode(to, i); - n -= nextt - lastt; - if (n < 0) + immutable t = decode(to, i); + if (t == '-' && lastt != dchar.init && i < to.length) { - newc = nextt + n + 1; + nextt = decode(to, i); + n -= nextt - lastt; + if (n < 0) + { + newc = nextt + n + 1; + goto Lnewc; + } + lastt = dchar.init; + continue; + } + if (n == 0) + { newc = t; goto Lnewc; } - lastt = dchar.init; - continue; - } - if (n == 0) - { newc = t; - goto Lnewc; + lastt = t; + nextt = t; + n--; } - lastt = t; - nextt = t; - n--; + if (mod_d) + continue; + newc = nextt; } - if (mod_d) - continue; - newc = nextt; - Lnewc: if (mod_s && modified && newc == lastc) continue; @@ -6330,42 +6365,42 @@ if (isSomeString!S || assertCTFEable!( { // Test the isNumeric(in string) function - assert(isNumeric("1") == true ); - assert(isNumeric("1.0") == true ); - assert(isNumeric("1e-1") == true ); - assert(isNumeric("12345xxxx890") == false ); - assert(isNumeric("567L") == true ); - assert(isNumeric("23UL") == true ); - assert(isNumeric("-123..56f") == false ); - assert(isNumeric("12.3.5.6") == false ); - assert(isNumeric(" 12.356") == false ); - assert(isNumeric("123 5.6") == false ); - assert(isNumeric("1233E-1+1.0e-1i") == true ); - - assert(isNumeric("123.00E-5+1234.45E-12Li") == true); - assert(isNumeric("123.00e-5+1234.45E-12iL") == false); - assert(isNumeric("123.00e-5+1234.45e-12uL") == false); - assert(isNumeric("123.00E-5+1234.45e-12lu") == false); - - assert(isNumeric("123fi") == true); - assert(isNumeric("123li") == true); - assert(isNumeric("--123L") == false); - assert(isNumeric("+123.5UL") == false); - assert(isNumeric("123f") == true); - assert(isNumeric("123.u") == false); + assert(isNumeric("1")); + assert(isNumeric("1.0")); + assert(isNumeric("1e-1")); + assert(!isNumeric("12345xxxx890")); + assert(isNumeric("567L")); + assert(isNumeric("23UL")); + assert(!isNumeric("-123..56f")); + assert(!isNumeric("12.3.5.6")); + assert(!isNumeric(" 12.356")); + assert(!isNumeric("123 5.6")); + assert(isNumeric("1233E-1+1.0e-1i")); + + assert(isNumeric("123.00E-5+1234.45E-12Li")); + assert(!isNumeric("123.00e-5+1234.45E-12iL")); + assert(!isNumeric("123.00e-5+1234.45e-12uL")); + assert(!isNumeric("123.00E-5+1234.45e-12lu")); + + assert(isNumeric("123fi")); + assert(isNumeric("123li")); + assert(!isNumeric("--123L")); + assert(!isNumeric("+123.5UL")); + assert(isNumeric("123f")); + assert(!isNumeric("123.u")); // @@@BUG@@ to!string(float) is not CTFEable. // Related: formatValue(T) if (is(FloatingPointTypeOf!T)) if (!__ctfe) { - assert(isNumeric(to!string(real.nan)) == true); - assert(isNumeric(to!string(-real.infinity)) == true); + assert(isNumeric(to!string(real.nan))); + assert(isNumeric(to!string(-real.infinity))); } string s = "$250.99-"; - assert(isNumeric(s[1 .. s.length - 2]) == true); - assert(isNumeric(s) == false); - assert(isNumeric(s[0 .. s.length - 1]) == false); + assert(isNumeric(s[1 .. $ - 2])); + assert(!isNumeric(s)); + assert(!isNumeric(s[0 .. $ - 1])); }); assert(!isNumeric("-")); diff --git a/std/sumtype.d b/std/sumtype.d index 4e76156b1cb..69c2a49dd7f 100644 --- a/std/sumtype.d +++ b/std/sumtype.d @@ -11,6 +11,15 @@ include: * No dependency on runtime type information (`TypeInfo`). * Compatibility with BetterC. +$(H3 List of examples) + +* [Basic usage](#basic-usage) +* [Matching with an overload set](#matching-with-an-overload-set) +* [Recursive SumTypes](#recursive-sumtypes) +* [Memory corruption](#memory-corruption) (why assignment can be `@system`) +* [Avoiding unintentional matches](#avoiding-unintentional-matches) +* [Multiple dispatch](#multiple-dispatch) + License: Boost License 1.0 Authors: Paul Backus Source: $(PHOBOSSRC std/sumtype.d) @@ -77,52 +86,38 @@ version (D_BetterC) {} else assert(!isFahrenheit(t3)); } -/** $(DIVID introspection-based-matching, $(H3 Introspection-based matching)) +/** $(DIVID matching-with-an-overload-set, $(H3 Matching with an overload set)) + * + * Instead of writing `match` handlers inline as lambdas, you can write them as + * overloads of a function. An `alias` can be used to create an additional + * overload for the `SumType` itself. + * + * For example, with this overload set: * - * In the `length` and `horiz` functions below, the handlers for `match` do not - * specify the types of their arguments. Instead, matching is done based on how - * the argument is used in the body of the handler: any type with `x` and `y` - * properties will be matched by the `rect` handlers, and any type with `r` and - * `theta` properties will be matched by the `polar` handlers. + * --- + * string handle(int n) { return "got an int"; } + * string handle(string s) { return "got a string"; } + * string handle(double d) { return "got a double"; } + * alias handle = match!handle; + * --- + * + * Usage would look like this: */ version (D_BetterC) {} else @safe unittest { - import std.math.operations : isClose; - import std.math.trigonometry : cos; - import std.math.constants : PI; - import std.math.algebraic : sqrt; - - struct Rectangular { double x, y; } - struct Polar { double r, theta; } - alias Vector = SumType!(Rectangular, Polar); - - double length(Vector v) - { - return v.match!( - rect => sqrt(rect.x^^2 + rect.y^^2), - polar => polar.r - ); - } - - double horiz(Vector v) - { - return v.match!( - rect => rect.x, - polar => polar.r * cos(polar.theta) - ); - } + alias ExampleSumType = SumType!(int, string, double); - Vector u = Rectangular(1, 1); - Vector v = Polar(1, PI/4); + ExampleSumType a = 123; + ExampleSumType b = "hello"; + ExampleSumType c = 3.14; - assert(length(u).isClose(sqrt(2.0))); - assert(length(v).isClose(1)); - assert(horiz(u).isClose(1)); - assert(horiz(v).isClose(sqrt(0.5))); + assert(a.handle == "got an int"); + assert(b.handle == "got a string"); + assert(c.handle == "got a double"); } -/** $(DIVID arithmetic-expression-evaluator, $(H3 Arithmetic expression evaluator)) +/** $(DIVID recursive-sumtypes, $(H3 Recursive SumTypes)) * * This example makes use of the special placeholder type `This` to define a * [recursive data type](https://en.wikipedia.org/wiki/Recursive_data_type): an @@ -227,6 +222,10 @@ version (D_BetterC) {} else assert(pprint(*myExpr) == "(a + (2 * b))"); } +// For the "Matching with an overload set" example above +// Needs public import to work with `make publictests` +version (unittest) public import std.internal.test.sumtype_example_overloads; + import std.format.spec : FormatSpec, singleSpec; import std.meta : AliasSeq, Filter, IndexOf = staticIndexOf, Map = staticMap; import std.meta : NoDuplicates; @@ -266,8 +265,7 @@ private enum isInout(T) = is(T == inout); * * The special type `This` can be used as a placeholder to create * self-referential types, just like with `Algebraic`. See the - * ["Arithmetic expression evaluator" example](#arithmetic-expression-evaluator) for - * usage. + * ["Recursive SumTypes" example](#recursive-sumtypes) for usage. * * A `SumType` is initialized by default to hold the `.init` value of its * first member type, just like a regular union. The version identifier @@ -1619,9 +1617,9 @@ enum bool isSumType(T) = is(T : SumType!Args, Args...); * overloads are considered as potential matches. * * Templated handlers are also accepted, and will match any type for which they - * can be [implicitly instantiated](https://dlang.org/glossary.html#ifti). See - * ["Introspection-based matching"](#introspection-based-matching) for an - * example of templated handler usage. + * can be [implicitly instantiated](https://dlang.org/glossary.html#ifti). + * (Remember that a $(DDSUBLINK spec/expression,function_literals, function literal) + * without an explicit argument type is considered a template.) * * If multiple [SumType]s are passed to match, their values are passed to the * handlers as separate arguments, and matching is done for each possible @@ -1988,7 +1986,7 @@ private template matchImpl(Flag!"exhaustive" exhaustive, handlers...) ? "template" : typeof(handler).stringof ) ~ "` " ~ - "never matches" + "never matches. Perhaps the handler failed to compile" ); } diff --git a/std/system.d b/std/system.d index 55fcfd773b7..aa672a59dd3 100644 --- a/std/system.d +++ b/std/system.d @@ -82,5 +82,77 @@ immutable /// The endianness that the program was compiled for. version (LittleEndian) Endian endian = Endian.littleEndian; else Endian endian = Endian.bigEndian; + /++ + Instruction Set Architecture. + + Note: + This is intended for cases where you need a value representing the + instruction set architecture at runtime. If you're doing something + which should compile differently depending on instruction set + architecture, then please use `version (X86_64)`, `version (ARM)`, + etc. + + See_Also: + $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) + +/ + enum ISA + { + x86, /// Intel and AMD 32-bit processors + x86_64, /// Intel and AMD 64-bit processors + arm, /// The ARM architecture (32-bit) (AArch32 et al) + aarch64, /// The Advanced RISC Machine architecture (64-bit) + asmJS, /// The asm.js intermediate programming language + avr, /// 8-bit Atmel AVR Microcontrollers + epiphany, /// The Epiphany architecture + ppc, /// The PowerPC architecture, 32-bit + ppc64, /// The PowerPC architecture, 64-bit + ia64, /// The Itanium architecture (64-bit) + mips32, /// The MIPS architecture, 32-bit + mips64, /// The MIPS architecture, 64-bit + msp430, /// The MSP430 architecture + nvptx, /// The Nvidia Parallel Thread Execution (PTX) architecture, 32-bit + nvptx64, /// The Nvidia Parallel Thread Execution (PTX) architecture, 64-bit + riscv32, /// The RISC-V architecture, 32-bit + riscv64, /// The RISC-V architecture, 64-bit + sparc, /// The SPARC architecture, 32-bit + sparc64, /// The SPARC architecture, 64-bit + s390, /// The System/390 architecture, 32-bit + systemZ, /// The System Z architecture, 64-bit + hppa, /// The HP PA-RISC architecture, 32-bit + hppa64, /// The HP PA-RISC architecture, 64-bit + sh, /// The SuperH architecture, 32-bit + webAssembly, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit + alpha, /// The Alpha architecture + unknown, /// Unknown + } + + /// The instruction set architecture that the program was compiled for. + version (X86) ISA instructionSetArchitecture = ISA.x86; + else version (X86_64) ISA instructionSetArchitecture = ISA.x86_64; + else version (ARM) ISA instructionSetArchitecture = ISA.arm; + else version (AArch64) ISA instructionSetArchitecture = ISA.aarch64; + else version (AsmJS) ISA instructionSetArchitecture = ISA.asmJS; + else version (AVR) ISA instructionSetArchitecture = ISA.avr; + else version (Epiphany) ISA instructionSetArchitecture = ISA.epiphany; + else version (PPC) ISA instructionSetArchitecture = ISA.ppc; + else version (PPC64) ISA instructionSetArchitecture = ISA.ppc64; + else version (IA64) ISA instructionSetArchitecture = ISA.ia64; + else version (MIPS32) ISA instructionSetArchitecture = ISA.mips32; + else version (MIPS64) ISA instructionSetArchitecture = ISA.mips64; + else version (MSP430) ISA instructionSetArchitecture = ISA.msp430; + else version (NVPTX) ISA instructionSetArchitecture = ISA.nvptx; + else version (NVPTX64) ISA instructionSetArchitecture = ISA.nvptx64; + else version (RISCV32) ISA instructionSetArchitecture = ISA.riscv32; + else version (RISCV64) ISA instructionSetArchitecture = ISA.riscv64; + else version (SPARC) ISA instructionSetArchitecture = ISA.sparc; + else version (SPARC64) ISA instructionSetArchitecture = ISA.sparc64; + else version (S390) ISA instructionSetArchitecture = ISA.s390; + else version (SystemZ) ISA instructionSetArchitecture = ISA.systemZ; + else version (HPPA) ISA instructionSetArchitecture = ISA.hppa; + else version (HPPA64) ISA instructionSetArchitecture = ISA.hppa64; + else version (SH) ISA instructionSetArchitecture = ISA.sh; + else version (WebAssembly) ISA instructionSetArchitecture = ISA.webAssembly; + else version (Alpha) ISA instructionSetArchitecture = ISA.alpha; + else ISA instructionSetArchitecture = ISA.unknown; } diff --git a/std/traits.d b/std/traits.d index 52286b9a7ad..5ed37a1f418 100644 --- a/std/traits.d +++ b/std/traits.d @@ -67,6 +67,7 @@ * $(LREF isAssignable) * $(LREF isCovariantWith) * $(LREF isImplicitlyConvertible) + * $(LREF isQualifierConvertible) * )) * $(TR $(TD Type Constructors) $(TD * $(LREF InoutOf) @@ -131,6 +132,7 @@ * $(LREF PointerTarget) * $(LREF Signed) * $(LREF Unconst) + * $(LREF Unshared) * $(LREF Unqual) * $(LREF Unsigned) * $(LREF ValueType) @@ -1125,7 +1127,7 @@ if (isCallable!func && variadicFunctionStyle!func == Variadic.no) } /** -Get tuple, one per function parameter, of the storage classes of the parameters. +Get a tuple of the storage classes of a function's parameters. Params: func = function symbol or type of function, delegate, or pointer to function Returns: @@ -1154,22 +1156,16 @@ if (isCallable!func) static if (is(Func PT == __parameters)) { - template StorageClass(size_t i) + alias ParameterStorageClassTuple = AliasSeq!(); + static foreach (i; 0 .. PT.length) { - static if (i < PT.length) - { - alias StorageClass = AliasSeq!( - extractParameterStorageClassFlags!(__traits(getParameterStorageClasses, Func, i)), - StorageClass!(i + 1)); - } - else - alias StorageClass = AliasSeq!(); + ParameterStorageClassTuple = AliasSeq!(ParameterStorageClassTuple, + extractParameterStorageClassFlags!(__traits(getParameterStorageClasses, Func, i))); } - alias ParameterStorageClassTuple = StorageClass!0; } else { - static assert(0, func[0].stringof ~ " is not a function"); + static assert(0, func.stringof, " is not a function"); alias ParameterStorageClassTuple = AliasSeq!(); } } @@ -1317,7 +1313,8 @@ if (isCallable!func) { static if (is(FunctionTypeOf!func PT == __parameters)) { - template Get(size_t i) + alias ParameterIdentifierTuple = AliasSeq!(); + static foreach (i; 0 .. PT.length) { static if (!isFunctionPointer!func && !isDelegate!func // Unnamed parameters yield CT error. @@ -1325,32 +1322,21 @@ if (isCallable!func) // Filter out unnamed args, which look like (Type) instead of (Type name). && PT[i].stringof != PT[i .. i+1].stringof[1..$-1]) { - enum Get = __traits(identifier, PT[i .. i+1]); + ParameterIdentifierTuple = AliasSeq!(ParameterIdentifierTuple, + __traits(identifier, PT[i .. i+1])); } else { - enum Get = ""; + ParameterIdentifierTuple = AliasSeq!(ParameterIdentifierTuple, ""); } } } else { static assert(0, func.stringof ~ " is not a function"); - - // Define dummy entities to avoid pointless errors - template Get(size_t i) { enum Get = ""; } - alias PT = AliasSeq!(); - } - - template Impl(size_t i = 0) - { - static if (i == PT.length) - alias Impl = AliasSeq!(); - else - alias Impl = AliasSeq!(Get!i, Impl!(i+1)); + // avoid pointless errors + alias ParameterIdentifierTuple = AliasSeq!(); } - - alias ParameterIdentifierTuple = Impl!(); } /// @@ -1408,7 +1394,7 @@ if (isCallable!func) /** -Get, as a tuple, the default value of the parameters to a function symbol. +Get, as a tuple, the default values of the parameters to a function symbol. If a parameter doesn't have the default value, `void` is returned instead. */ template ParameterDefaults(alias func) @@ -1426,48 +1412,36 @@ if (isCallable!func) enum args = "args" ~ (name == "args" ? "_" : ""); enum val = "val" ~ (name == "val" ? "_" : ""); enum ptr = "ptr" ~ (name == "ptr" ? "_" : ""); - mixin(" - enum hasDefaultArg = (PT[i .. i+1] " ~ args ~ ") { return true; }; - "); + enum hasDefaultArg = mixin("(PT[i .. i+1] ", args, ") => true"); static if (is(typeof(hasDefaultArg()))) { - mixin(" - // workaround scope escape check, see - // https://issues.dlang.org/show_bug.cgi?id=16582 - // should use return scope once available - enum get = (PT[i .. i+1] " ~ args ~ ") @trusted + enum get = mixin("(return scope PT[i .. i+1] ", args, ") { // If the parameter is lazy, we force it to be evaluated // like this. - auto " ~ val ~ " = " ~ args ~ "[0]; - auto " ~ ptr ~ " = &" ~ val ~ "; - return *" ~ ptr ~ "; - };"); + auto ", val, " = ", args, "[0]; + auto ", ptr, " = &", val, "; + return *", ptr, "; + }"); enum Get = get(); } else alias Get = void; // If default arg doesn't exist, returns void instead. } + alias ParameterDefaults = AliasSeq!(); + static foreach (i; 0 .. PT.length) + { + ParameterDefaults = AliasSeq!(ParameterDefaults, + Get!i); + } } else { static assert(0, func.stringof ~ " is not a function"); - - // Define dummy entities to avoid pointless errors - template Get(size_t i) { enum Get = ""; } - alias PT = AliasSeq!(); + // avoid pointless errors + alias ParameterDefaults = AliasSeq!(); } - - template Impl(size_t i = 0) - { - static if (i == PT.length) - alias Impl = AliasSeq!(); - else - alias Impl = AliasSeq!(Get!i, Impl!(i+1)); - } - - alias ParameterDefaults = Impl!(); } /// @@ -2207,7 +2181,7 @@ if (isCallable!func) /** -Get the function type from a callable object `func`. +Get the function type from a callable object `func`, or from a function pointer/delegate type. Using builtin `typeof` on a property function yields the types of the property value, not of the property function itself. Still, @@ -2255,10 +2229,17 @@ if (isCallable!func) { class C { - int value() @property { return 0; } + int value() @property => 0; + static string opCall() => "hi"; } static assert(is( typeof(C.value) == int )); static assert(is( FunctionTypeOf!(C.value) == function )); + static assert(is( FunctionTypeOf!C == typeof(C.opCall) )); + + int function() fp; + alias IntFn = int(); + static assert(is( typeof(fp) == IntFn* )); + static assert(is( FunctionTypeOf!fp == IntFn )); } @system unittest @@ -5194,6 +5175,62 @@ enum bool isImplicitlyConvertible(From, To) = is(From : To); static assert( isImplicitlyConvertible!(string, const(char)[])); } +/** +Is `From` $(DDSUBLINK spec/const3, implicit_qualifier_conversions, qualifier-convertible) to `To`? +*/ +enum bool isQualifierConvertible(From, To) = + is(immutable From == immutable To) && is(From* : To*); + +/// +@safe unittest +{ + // Mutable and immmutable both convert to const... + static assert( isQualifierConvertible!(char, const(char))); + static assert( isQualifierConvertible!(immutable(char), const(char))); + // ...but const does not convert back to mutable or immutable + static assert(!isQualifierConvertible!(const(char), char)); + static assert(!isQualifierConvertible!(const(char), immutable(char))); +} + +@safe unittest +{ + import std.meta : AliasSeq; + + alias Ts = AliasSeq!(int, const int, shared int, inout int, const shared int, + const inout int, inout shared int, const inout shared int, immutable int); + + // https://dlang.org/spec/const3.html#implicit_qualifier_conversions + enum _ = 0; + static immutable bool[Ts.length][Ts.length] conversions = [ + // m c s i cs ci is cis im + [1, 1, _, _, _, _, _, _, _], // mutable + [_, 1, _, _, _, _, _, _, _], // const + [_, _, 1, _, 1, _, _, _, _], // shared + [_, 1, _, 1, _, 1, _, _, _], // inout + [_, _, _, _, 1, _, _, _, _], // const shared + [_, 1, _, _, _, 1, _, _, _], // const inout + [_, _, _, _, 1, _, 1, 1, _], // inout shared + [_, _, _, _, 1, _, _, 1, _], // const inout shared + [_, 1, _, _, 1, 1, _, 1, 1], // immutable + ]; + + static foreach (i, From; Ts) + { + static foreach (j, To; Ts) + { + static assert(isQualifierConvertible!(From, To) == conversions[i][j], + "`isQualifierConvertible!(" ~ From.stringof ~ ", " ~ To.stringof ~ ")`" + ~ " should be `" ~ (conversions[i][j] ? "true" : "false") ~ "`"); + } + } +} + +@safe unittest +{ + // int* -> void* is not a qualifier conversion + static assert(!isQualifierConvertible!(int, void)); +} + /** Returns `true` iff a value of type `Rhs` can be assigned to a variable of type `Lhs`. @@ -5337,7 +5374,7 @@ package template isBlitAssignable(T) enum isBlitAssignable = isBlitAssignable!(OriginalType!T); } else static if (isStaticArray!T && is(T == E[n], E, size_t n)) - // Workaround for issue 11499 : isStaticArray!T should not be necessary. + // Workaround for https://issues.dlang.org/show_bug.cgi?id=11499 : isStaticArray!T should not be necessary. { enum isBlitAssignable = isBlitAssignable!E; } @@ -6202,8 +6239,15 @@ enum bool isBoolean(T) = __traits(isUnsigned, T) && is(T : bool); } /** - * Detect whether `T` is a built-in integral type. Types `bool`, - * `char`, `wchar`, and `dchar` are not considered integral. + * Detect whether `T` is a built-in integral type. + * Integral types are `byte`, `ubyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `cent`, `ucent`, + * and enums with an integral type as its base type. + * Params: + * T = type to test + * Returns: + * `true` if `T` is an integral type + * Note: + * this is not the same as $(LINK2 https://dlang.org/spec/traits.html#isIntegral, `__traits(isIntegral)`) */ template isIntegral(T) { @@ -7812,6 +7856,46 @@ else static assert(is(Unconst!ImmIntArr == immutable(int)[])); } +/++ + Removes `shared` qualifier, if any, from type `T`. + + Note that while `immutable` is implicitly `shared`, it is unaffected by + Unshared. Only explict `shared` is removed. + +/ +template Unshared(T) +{ + static if (is(T == shared U, U)) + alias Unshared = U; + else + alias Unshared = T; +} + +/// +@safe unittest +{ + static assert(is(Unshared!int == int)); + static assert(is(Unshared!(const int) == const int)); + static assert(is(Unshared!(immutable int) == immutable int)); + + static assert(is(Unshared!(shared int) == int)); + static assert(is(Unshared!(shared(const int)) == const int)); + + static assert(is(Unshared!(shared(int[])) == shared(int)[])); +} + +@safe unittest +{ + static assert(is(Unshared!( int) == int)); + static assert(is(Unshared!( const int) == const int)); + static assert(is(Unshared!( inout int) == inout int)); + static assert(is(Unshared!( inout const int) == inout const int)); + static assert(is(Unshared!(shared int) == int)); + static assert(is(Unshared!(shared const int) == const int)); + static assert(is(Unshared!(shared inout int) == inout int)); + static assert(is(Unshared!(shared inout const int) == inout const int)); + static assert(is(Unshared!( immutable int) == immutable int)); +} + version (StdDdoc) { /** @@ -8833,6 +8917,30 @@ template getSymbolsByUDA(alias symbol, alias attribute) static assert(is(getSymbolsByUDA!(X, X) == AliasSeq!())); } +// https://issues.dlang.org/show_bug.cgi?id=23776 +@safe pure nothrow @nogc unittest +{ + struct T + { + struct Tag {} + @Tag struct MyStructA {} + @Tag struct MyStructB {} + @Tag struct MyStructC {} + } + alias tcomponents = getSymbolsByUDA!(T, T.Tag); + static assert(tcomponents.length > 0); + + struct X + { + struct Tag {} + @Tag enum MyEnumA; + @Tag enum MyEnumB; + @Tag enum MyEnumC; + } + alias xcomponents = getSymbolsByUDA!(X, X.Tag); + static assert(xcomponents.length > 0); +} + // getSymbolsByUDA produces wrong result if one of the symbols having the UDA is a function // https://issues.dlang.org/show_bug.cgi?id=18624 @safe unittest @@ -8846,7 +8954,9 @@ template getSymbolsByUDA(alias symbol, alias attribute) @Attr void c(); } - static assert(getSymbolsByUDA!(A, Attr).stringof == "tuple(a, a, c)"); + alias ola = __traits(getOverloads, A, "a"); + static assert(__traits(isSame, getSymbolsByUDA!(A, Attr), + AliasSeq!(ola[0], ola[1], A.c))); } // getSymbolsByUDA no longer works on modules @@ -8887,7 +8997,8 @@ private template getSymbolsByUDAImpl(alias symbol, alias attribute, names...) alias member = __traits(getMember, symbol, names[0]); // Filtering not compiled members such as alias of basic types. - static if (isAliasSeq!member || isType!member) + static if (isAliasSeq!member || + (isType!member && !isAggregateType!member && !is(member == enum))) { alias getSymbolsByUDAImpl = tail; } diff --git a/std/typecons.d b/std/typecons.d index bde8439a5fc..aceb2878d49 100644 --- a/std/typecons.d +++ b/std/typecons.d @@ -559,6 +559,14 @@ private template isBuildableFrom(U) enum isBuildableFrom(T) = isBuildable!(T, U); } +private enum hasCopyCtor(T) = __traits(hasCopyConstructor, T); + +// T is expected to be an instantiation of Tuple. +private template noMemberHasCopyCtor(T) +{ + import std.meta : anySatisfy; + enum noMemberHasCopyCtor = !anySatisfy!(hasCopyCtor, T.Types); +} /** _Tuple of values, for example $(D Tuple!(int, string)) is a record that @@ -745,7 +753,8 @@ if (distinctFieldNames!(Specs)) * compatible with the target `Tuple`'s type. */ this(U)(U another) - if (areBuildCompatibleTuples!(typeof(this), U)) + if (areBuildCompatibleTuples!(typeof(this), U) && + (noMemberHasCopyCtor!(typeof(this)) || !is(Unqual!U == Unqual!(typeof(this))))) { field[] = another.field[]; } @@ -971,7 +980,7 @@ if (distinctFieldNames!(Specs)) { import std.algorithm.mutation : swap; - static if (is(R : Tuple!Types) && !__traits(isRef, rhs) && isTuple!R) + static if (is(R == Tuple!Types) && !__traits(isRef, rhs) && isTuple!R) { if (__ctfe) { @@ -1655,6 +1664,42 @@ if (distinctFieldNames!(Specs)) Tuple!(MyStruct) t; } +// https://issues.dlang.org/show_bug.cgi?id=24465 +@safe unittest +{ + { + static struct S + { + this(ref return scope inout(S) rhs) scope @trusted inout pure nothrow {} + } + + static void foo(Tuple!S) + { + } + + Tuple!S t; + foo(t); + + auto t2 = Tuple!S(t); + } + + { + static struct S {} + Tuple!S t; + auto t2 = Tuple!S(t); + + // This can't be done if Tuple has a copy constructor, because it's not + // allowed to have an rvalue constructor at that point, and the + // compiler doesn't to something intelligent like transform it into a + // move instead. However, it has been legal with Tuple for a while + // (maybe even since it was first added) when the type doesn't have a + // copy constructor, so this is testing to make sure that the fix to + // make copy constructors work doesn't mess up the rvalue constructor + // when none of the Tuple's members have copy constructors. + auto t3 = Tuple!S(Tuple!S.init); + } +} + /** Creates a copy of a $(LREF Tuple) with its fields in _reverse order. @@ -2332,7 +2377,7 @@ break the soundness of D's type system and does not incur any of the risks usually associated with `cast`. Params: - T = An object, interface, array slice type, or associative array type. + T = Any type. */ template Rebindable(T) if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArray!T) @@ -2395,15 +2440,155 @@ if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArr static assert(!__traits(compiles, &r.get())); } +/// ditto +struct Rebindable(T) +if (!is(T == class) && !is(T == interface) && !isDynamicArray!T && !isAssociativeArray!T) +{ +private: + static if (isAssignable!(typeof(cast() T.init))) + { + enum useQualifierCast = true; + + typeof(cast() T.init) data; + } + else + { + enum useQualifierCast = false; + + align(T.alignof) + static struct Payload + { + static if (hasIndirections!T) + { + void[T.sizeof] data; + } + else + { + ubyte[T.sizeof] data; + } + } + + Payload data; + } + +public: + + static if (!__traits(compiles, { T value; })) + { + @disable this(); + } + + /** + * Constructs a `Rebindable` from a given value. + */ + this(T value) @trusted + { + static if (useQualifierCast) + { + this.data = cast() value; + } + else + { + set(value); + } + } + + /** + * Overwrites the currently stored value with `value`. + */ + void opAssign(this This)(T value) @trusted + { + clear; + set(value); + } + + /** + * Returns the value currently stored in the `Rebindable`. + */ + T get(this This)() @property @trusted + { + static if (useQualifierCast) + { + return cast(T) this.data; + } + else + { + return *cast(T*) &this.data; + } + } + + static if (!useQualifierCast) + { + ~this() @trusted + { + clear; + } + } + + /// + alias get this; + +private: + + void set(this This)(T value) + { + static if (useQualifierCast) + { + this.data = cast() value; + } + else + { + // As we're escaping a copy of `value`, deliberately leak a copy: + static union DontCallDestructor + { + T value; + } + DontCallDestructor copy = DontCallDestructor(value); + this.data = *cast(Payload*) © + } + } + + void clear(this This)() + { + // work around reinterpreting cast being impossible in CTFE + if (__ctfe) + { + return; + } + + // call possible struct destructors + .destroy!(No.initialize)(*cast(T*) &this.data); + } +} + +/// Using Rebindable in a generic algorithm: @safe unittest { - class CustomToHash + import std.range.primitives : front, popFront; + + // simple version of std.algorithm.searching.maxElement + typeof(R.init.front) maxElement(R)(R r) { - override size_t toHash() const nothrow @trusted { return 42; } + auto max = rebindable(r.front); + r.popFront; + foreach (e; r) + if (e > max) + max = e; // Rebindable allows const-correct reassignment + return max; } - Rebindable!(immutable(CustomToHash)) a = new immutable CustomToHash(); - assert(a.toHash() == 42, "Rebindable!A should offer toHash()" - ~ " by forwarding to A.toHash()."); + struct S + { + char[] arr; + alias arr this; // for comparison + } + // can't convert to mutable + const S cs; + static assert(!__traits(compiles, { S s = cs; })); + + alias CS = const S; + CS[] arr = [CS("harp"), CS("apple"), CS("pot")]; + CS ms = maxElement(arr); + assert(ms.arr == "pot"); } // https://issues.dlang.org/show_bug.cgi?id=18615 @@ -2453,6 +2638,34 @@ if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArr ~ " comparable against Object itself and use Object.opEquals."); } +/// +@system unittest +{ + static struct S + { + int* ptr; + } + S s = S(new int); + + const cs = s; + // Can't assign s.ptr to cs.ptr + static assert(!__traits(compiles, {s = cs;})); + + Rebindable!(const S) rs = s; + assert(rs.ptr is s.ptr); + // rs.ptr is const + static assert(!__traits(compiles, {rs.ptr = null;})); + + // Can't assign s.ptr to rs.ptr + static assert(!__traits(compiles, {s = rs;})); + + const S cs2 = rs; + // Rebind rs + rs = cs2; + rs = S(); + assert(rs.ptr is null); +} + // https://issues.dlang.org/show_bug.cgi?id=18755 @safe unittest { @@ -2473,13 +2686,145 @@ if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArr })); } +@safe unittest +{ + class CustomToHash + { + override size_t toHash() const nothrow @trusted { return 42; } + } + Rebindable!(immutable(CustomToHash)) a = new immutable CustomToHash(); + assert(a.toHash() == 42, "Rebindable!A should offer toHash()" + ~ " by forwarding to A.toHash()."); +} + +// Test Rebindable!immutable +@safe unittest +{ + static struct S + { + int* ptr; + } + S s = S(new int); + + Rebindable!(immutable S) ri = S(new int); + assert(ri.ptr !is null); + static assert(!__traits(compiles, {ri.ptr = null;})); + + // ri is not compatible with mutable S + static assert(!__traits(compiles, {s = ri;})); + static assert(!__traits(compiles, {ri = s;})); + + auto ri2 = ri; + assert(ri2.ptr == ri.ptr); + + const S cs3 = ri; + static assert(!__traits(compiles, {ri = cs3;})); + + immutable S si = ri; + // Rebind ri + ri = si; + ri = S(); + assert(ri.ptr is null); + + // Test RB!immutable -> RB!const + Rebindable!(const S) rc = ri; + assert(rc.ptr is null); + ri = S(new int); + rc = ri; + assert(rc.ptr !is null); + + // test rebindable, opAssign + rc.destroy; + assert(rc.ptr is null); + rc = rebindable(cs3); + rc = rebindable(si); + assert(rc.ptr !is null); + + ri.destroy; + assert(ri.ptr is null); + ri = rebindable(si); + assert(ri.ptr !is null); +} + +// Test disabled default ctor +@safe unittest +{ + static struct ND + { + int i; + @disable this(); + this(int i) inout {this.i = i;} + } + static assert(!__traits(compiles, Rebindable!ND())); + + Rebindable!(const ND) rb = const ND(1); + assert(rb.i == 1); + rb = immutable ND(2); + assert(rb.i == 2); + rb = rebindable(const ND(3)); + assert(rb.i == 3); + static assert(!__traits(compiles, rb.i++)); +} + +// Test copying +@safe unittest +{ + int del; + int post; + struct S + { + int* ptr; + int level; + this(this) + { + post++; + level++; + } + ~this() + { + del++; + } + } + + // test ref count + { + Rebindable!S rc = S(new int); + } + assert(post == del - 1); +} + +@safe unittest +{ + int del; + int post; + struct S + { + immutable int x; + int level; + this(this) + { + post++; + level++; + } + ~this() + { + del++; + } + } + + // test ref count + { + Rebindable!S rc = S(0); + } + assert(post == del - 1); +} + /** Convenience function for creating a `Rebindable` using automatic type inference. Params: - obj = A reference to an object, interface, associative array, or an array slice - to initialize the `Rebindable` with. + obj = A reference to a value to initialize the `Rebindable` with. Returns: A newly constructed `Rebindable` initialized with the given reference. @@ -2514,6 +2859,26 @@ if (is(T == class) || is(T == interface) || isDynamicArray!T || isAssociativeArr assert(c3.payload == 2); } +/// ditto +Rebindable!T rebindable(T)(T value) +if (!is(T == class) && !is(T == interface) && !isDynamicArray!T && !isAssociativeArray!T + && !is(T : Rebindable!U, U)) +{ + return Rebindable!T(value); +} + +/// +@safe unittest +{ + immutable struct S + { + int[] array; + } + auto s1 = [3].idup.rebindable; + s1 = [4].idup.rebindable; + assert(s1 == [4]); +} + /** This function simply returns the `Rebindable` object passed in. It's useful in generic programming cases when a given object may be either a regular @@ -2626,10 +2991,6 @@ Rebindable!T rebindable(T)(Rebindable!T obj) static assert(is(Rebindable!(T[]) == T[])); } - // https://issues.dlang.org/show_bug.cgi?id=12046 - static assert(!__traits(compiles, Rebindable!(int[1]))); - static assert(!__traits(compiles, Rebindable!(const int[1]))); - // Pull request 3341 Rebindable!(immutable int[int]) pr3341 = [123:345]; assert(pr3341[123] == 345); @@ -2639,6 +3000,143 @@ Rebindable!T rebindable(T)(Rebindable!T obj) assert(rebindable(pr3341_aa)[321] == 543); } +package(std) struct Rebindable2(T) +{ +private: + static if (isAssignable!(typeof(cast() T.init))) + { + enum useQualifierCast = true; + + typeof(cast() T.init) data; + } + else + { + enum useQualifierCast = false; + + align(T.alignof) + static struct Payload + { + static if (hasIndirections!T) + { + void[T.sizeof] data; + } + else + { + ubyte[T.sizeof] data; + } + } + + Payload data; + } + +public: + + static if (!__traits(compiles, { T value; })) + { + @disable this(); + } + + /** + * Constructs a `Rebindable2` from a given value. + */ + this(T value) @trusted + { + static if (useQualifierCast) + { + this.data = cast() value; + } + else + { + set(value); + } + } + + /** + * Overwrites the currently stored value with `value`. + */ + void opAssign(this This)(T value) @trusted + { + clear; + set(value); + } + + /** + * Returns the value currently stored in the `Rebindable2`. + */ + T get(this This)() @property @trusted + { + static if (useQualifierCast) + { + return cast(T) this.data; + } + else + { + return *cast(T*) &this.data; + } + } + + /// Ditto + inout(T) get() inout @property @trusted + { + static if (useQualifierCast) + { + return cast(inout(T)) this.data; + } + else + { + return *cast(inout(T)*) &this.data; + } + } + + static if (!useQualifierCast) + { + ~this() @trusted + { + clear; + } + } + +private: + + void set(this This)(T value) + { + static if (useQualifierCast) + { + this.data = cast() value; + } + else + { + // As we're escaping a copy of `value`, deliberately leak a copy: + static union DontCallDestructor + { + T value; + } + DontCallDestructor copy = DontCallDestructor(value); + this.data = *cast(Payload*) © + } + } + + void clear(this This)() + { + // work around reinterpreting cast being impossible in CTFE + if (__ctfe) + { + return; + } + + // call possible struct destructors + static if (is(T == struct)) + { + .destroy!(No.initialize)(*cast(T*) &this.data); + } + } +} + +package(std) Rebindable2!T rebindable2(T)(T value) +{ + return Rebindable2!T(value); +} + /** Similar to `Rebindable!(T)` but strips all qualifiers from the reference as opposed to just constness / immutability. Primary intended use case is with @@ -2806,11 +3304,19 @@ struct Nullable(T) * Params: * value = The value to initialize this `Nullable` with. */ - this(inout T value) inout - { - _value.payload = value; - _isNull = false; - } + static if (isCopyable!T) + this(inout T value) inout + { + _value.payload = value; + _isNull = false; + } + else + this(T value) inout + { + import std.algorithm.mutation : move; + _value.payload = move(value); + _isNull = false; + } static if (hasElaborateDestructor!T) { @@ -2818,11 +3324,16 @@ struct Nullable(T) { if (!_isNull) { - destroy(_value.payload); + import std.traits : Unqual; + auto ptr = () @trusted { return cast(Unqual!T*) &_value.payload; }(); + destroy!false(*ptr); } } } + static if (!isCopyable!T) + @disable this(this); + else static if (__traits(hasPostblit, T)) { this(this) @@ -3032,6 +3543,35 @@ struct Nullable(T) format!"%s"(a); } + /** + * Returns true if `this` has a value, otherwise false. + * + * Allows a `Nullable` to be used as the condition in an `if` statement: + * + * --- + * if (auto result = functionReturningNullable()) + * { + * doSomethingWith(result.get); + * } + * --- + */ + bool opCast(T : bool)() const + { + return !isNull; + } + + /// Prevents `opCast` from disabling built-in conversions. + auto ref T opCast(T, this This)() + if (is(This : T) || This.sizeof == T.sizeof) + { + static if (is(This : T)) + // Convert implicitly + return this; + else + // Reinterpret + return *cast(T*) &this; + } + /** * Forces `this` to the null state. */ @@ -3061,22 +3601,18 @@ struct Nullable(T) * Params: * value = A value of type `T` to assign to this `Nullable`. */ - Nullable opAssign()(T value) + ref Nullable opAssign()(T value) return { import std.algorithm.mutation : moveEmplace, move; - // the lifetime of the value in copy shall be managed by - // this Nullable, so we must avoid calling its destructor. - auto copy = DontCallDestructorT(value); - if (_isNull) { // trusted since payload is known to be uninitialized. - () @trusted { moveEmplace(copy.payload, _value.payload); }(); + () @trusted { moveEmplace(value, _value.payload); }(); } else { - move(copy.payload, _value.payload); + move(value, _value.payload); } _isNull = false; return this; @@ -3154,12 +3690,14 @@ struct Nullable(T) alias back = front; /// ditto + static if (isCopyable!T) @property inout(typeof(this)) save() inout { return this; } /// ditto + static if (isCopyable!T) inout(typeof(this)) opIndex(size_t[2] dim) inout in (dim[0] <= length && dim[1] <= length && dim[1] >= dim[0]) { @@ -3638,16 +4176,12 @@ auto nullable(T)(T t) struct Test { - bool b; - - nothrow invariant { assert(b == true); } - SysTime _st; static bool destroyed; @disable this(); - this(bool b) { this.b = b; } + this(int _dummy) {} ~this() @safe { destroyed = true; } // mustn't call opAssign on Test.init in Nullable!Test, because the invariant @@ -3659,7 +4193,7 @@ auto nullable(T)(T t) { Nullable!Test nt; - nt = Test(true); + nt = Test(1); // destroy value Test.destroyed = false; @@ -3864,6 +4398,57 @@ auto nullable(T)(T t) assert(b.empty); } +// https://issues.dlang.org/show_bug.cgi?id=24403 +@safe unittest +{ + static bool destroyed; + static struct S { ~this() { destroyed = true; } } + + { + Nullable!S s = S.init; + destroyed = false; + } + assert(destroyed); + + { + Nullable!(const S) s = S.init; + destroyed = false; + } + assert(destroyed); + + { + Nullable!(immutable S) s = S.init; + destroyed = false; + } + assert(destroyed); + + { + Nullable!(shared S) s = S.init; + destroyed = false; + } + assert(destroyed); +} + +// https://issues.dlang.org/show_bug.cgi?id=22293 +@safe unittest +{ + Nullable!int empty; + Nullable!int full = 123; + + assert(cast(bool) empty == false); + assert(cast(bool) full == true); + + if (empty) assert(0); + if (!full) assert(0); +} + +// check that opCast doesn't break unsafe casts +@system unittest +{ + Nullable!(const(int*)) a; + auto result = cast(immutable(Nullable!(int*))) a; +} + /** Just like `Nullable!T`, except that the null state is defined as a particular value. For example, $(D Nullable!(uint, uint.max)) is an @@ -7090,11 +7675,11 @@ pure @system unittest foreach (MyRefCounted; AliasSeq!(SafeRefCounted, RefCounted)) { MyRefCounted!int* p; + auto rc1 = MyRefCounted!int(5); + p = &rc1; + assert(rc1 == 5); + assert(rc1._refCounted._store._count == 1); { - auto rc1 = MyRefCounted!int(5); - p = &rc1; - assert(rc1 == 5); - assert(rc1._refCounted._store._count == 1); auto rc2 = rc1; assert(rc1._refCounted._store._count == 2); // Reference semantics @@ -7105,6 +7690,8 @@ pure @system unittest rc1 = rc2; assert(rc1._refCounted._store._count == 2); } + // Artificially end scope of rc1 by calling ~this() explicitly + rc1.__xdtor(); assert(p._refCounted._store == null); // [Safe]RefCounted as a member @@ -10224,6 +10811,21 @@ unittest assert(s2.get().b == 3); } +// https://issues.dlang.org/show_bug.cgi?id=24318 +@system unittest +{ + static struct S + { + @disable this(this); + int i; + } + + Nullable!S s = S(1); + assert(s.get().i == 1); + s = S(2); + assert(s.get().i == 2); +} + /// The old version of $(LREF SafeRefCounted), before $(LREF borrow) existed. /// Old code may be relying on `@safe`ty of some of the member functions which /// cannot be safe in the new scheme, and @@ -10375,19 +10977,22 @@ struct RefCounted(T, RefCountedAutoInitialize autoInit = swap(_refCounted._store, rhs._refCounted._store); } - void opAssign(T rhs) + static if (__traits(compiles, lvalueOf!T = T.init)) { - import std.algorithm.mutation : move; - - static if (autoInit == RefCountedAutoInitialize.yes) + void opAssign(T rhs) { - _refCounted.ensureInitialized(); - } - else - { - assert(_refCounted.isInitialized); + import std.algorithm.mutation : move; + + static if (autoInit == RefCountedAutoInitialize.yes) + { + _refCounted.ensureInitialized(); + } + else + { + assert(_refCounted.isInitialized); + } + move(rhs, _refCounted._store._payload); } - move(rhs, _refCounted._store._payload); } static if (autoInit == RefCountedAutoInitialize.yes) diff --git a/std/uni/package.d b/std/uni/package.d index e2a0de73535..bb18ac6d5a9 100644 --- a/std/uni/package.d +++ b/std/uni/package.d @@ -16,6 +16,7 @@ $(TR $(TD Decode) $(TD $(LREF byGrapheme) $(LREF decodeGrapheme) $(LREF graphemeStride) + $(LREF popGrapheme) )) $(TR $(TD Comparison) $(TD $(LREF icmp) @@ -708,8 +709,8 @@ import std.meta : AliasSeq; import std.range.primitives : back, ElementEncodingType, ElementType, empty, front, hasLength, hasSlicing, isForwardRange, isInputRange, isRandomAccessRange, popFront, put, save; -import std.traits : isConvertibleToString, isIntegral, isSomeChar, - isSomeString, Unqual, isDynamicArray; +import std.traits : isAutodecodableString, isConvertibleToString, isIntegral, + isSomeChar, isSomeString, Unqual, isDynamicArray; // debug = std_uni; import std.internal.unicode_tables; // generated file @@ -3349,7 +3350,7 @@ struct CowArray(SP=GcPolicy) data[$-val.length-1 .. $-1] = val[]; } - bool opEquals()(auto const ref CowArray rhs)const + bool opEquals()(auto ref const CowArray rhs) const { if (empty ^ rhs.empty) return false; // one is empty and the other isn't @@ -7005,7 +7006,7 @@ private enum TransformRes // Note, getting GB1 (break at start of text, unless text is empty) right // relies on the user starting grapheme walking from beginning of the text, and // not attempting to walk an empty text. -private enum TransformRes +private immutable TransformRes function(ref GraphemeState, dchar) @safe pure nothrow @nogc [] graphemeTransforms = [ GraphemeState.Start: (ref state, ch) @@ -7148,17 +7149,25 @@ private enum TransformRes TransformRes.goOn ]; -template genericDecodeGrapheme(bool getValue) -{ - static if (getValue) +enum GraphemeRet { none, step, value } + +template genericDecodeGrapheme(GraphemeRet retType) +{ alias Ret = GraphemeRet; + + static if (retType == Ret.value) alias Value = Grapheme; - else + else static if (retType == Ret.step) + alias Value = size_t; + else static if (retType == Ret.none) alias Value = void; Value genericDecodeGrapheme(Input)(ref Input range) { - static if (getValue) - Grapheme grapheme; + static if (retType == Ret.value) + Grapheme result; + else static if (retType == Ret.step) + size_t result = 0; + auto state = GraphemeState.Start; dchar ch; @@ -7173,8 +7182,10 @@ template genericDecodeGrapheme(bool getValue) with(TransformRes) { case goOn: - static if (getValue) - grapheme ~= ch; + static if (retType == Ret.value) + result ~= ch; + else static if (retType == Ret.step) + result++; range.popFront(); continue; @@ -7182,8 +7193,10 @@ template genericDecodeGrapheme(bool getValue) goto rerun; case retInclude: - static if (getValue) - grapheme ~= ch; + static if (retType == Ret.value) + result ~= ch; + else static if (retType == Ret.step) + result++; range.popFront(); break outer; @@ -7192,8 +7205,8 @@ template genericDecodeGrapheme(bool getValue) } } - static if (getValue) - return grapheme; + static if (retType != Ret.none) + return result; } } @@ -7217,7 +7230,7 @@ if (is(C : dchar)) { auto src = input[index..$]; auto n = src.length; - genericDecodeGrapheme!(false)(src); + genericDecodeGrapheme!(GraphemeRet.none)(src); return n - src.length; } @@ -7243,9 +7256,7 @@ if (is(C : dchar)) static assert(c2 == 3); // \u0301 has 2 UTF-8 code units } -// TODO: make this @nogc. Probably no big deal since the state machine is -// already GC-free. -@safe pure nothrow unittest +@safe pure nothrow @nogc unittest { // grinning face ~ emoji modifier fitzpatrick type-5 ~ grinning face assert(graphemeStride("\U0001F600\U0001f3FE\U0001F600"d, 0) == 2); @@ -7281,7 +7292,7 @@ if (is(C : dchar)) Grapheme decodeGrapheme(Input)(ref Input inp) if (isInputRange!Input && is(immutable ElementType!Input == immutable dchar)) { - return genericDecodeGrapheme!true(inp); + return genericDecodeGrapheme!(GraphemeRet.value)(inp); } @safe unittest @@ -7306,6 +7317,73 @@ if (isInputRange!Input && is(immutable ElementType!Input == immutable dchar)) assert(equal(decodeGrapheme(s)[], "\U0001F1EC\U0001F1E7")); } +/++ + Reads one full grapheme cluster from an + $(REF_ALTTEXT input range, isInputRange, std,range,primitives) of dchar `inp`, + but doesn't return it. Instead returns the number of code units read. + This differs from number of code points read only if `input` is an + autodecodable string. + + Note: + This function modifies `inp` and thus `inp` + must be an L-value. ++/ +size_t popGrapheme(Input)(ref Input inp) +if (isInputRange!Input && is(immutable ElementType!Input == immutable dchar)) +{ + static if (isAutodecodableString!Input || hasLength!Input) + { + // Why count each step in the decoder when you can just + // measure the grapheme in one go? + auto n = inp.length; + genericDecodeGrapheme!(GraphemeRet.none)(inp); + return n - inp.length; + } + else return genericDecodeGrapheme!(GraphemeRet.step)(inp); +} + +/// +@safe pure unittest +{ + // Two Union Jacks of the Great Britain in each + string s = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; + wstring ws = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; + dstring ds = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7"; + + // String pop length in code units, not points. + assert(s.popGrapheme() == 8); + assert(ws.popGrapheme() == 4); + assert(ds.popGrapheme() == 2); + + assert(s == "\U0001F1EC\U0001F1E7"); + assert(ws == "\U0001F1EC\U0001F1E7"); + assert(ds == "\U0001F1EC\U0001F1E7"); + + import std.algorithm.comparison : equal; + import std.algorithm.iteration : filter; + + // Also works for non-random access ranges as long as the + // character type is 32-bit. + auto testPiece = "\r\nhello!"d.filter!(x => !x.isAlpha); + // Windows-style line ending is two code points in a single grapheme. + assert(testPiece.popGrapheme() == 2); + assert(testPiece.equal("!"d)); +} + +// Attribute compliance test. Should be nothrow `@nogc` when +// no autodecoding needed. +@safe pure nothrow @nogc unittest +{ + import std.algorithm.iteration : filter; + + auto str = "abcdef"d; + assert(str.popGrapheme() == 1); + + // also test with non-random access + auto filtered = "abcdef"d.filter!(x => x%2); + assert(filtered.popGrapheme() == 1); +} + /++ $(P Iterate a string by $(LREF Grapheme).) @@ -7697,6 +7775,21 @@ public: static assert(false, "No operation "~op~" defined for Grapheme"); } + // This is not a good `opEquals`, but formerly the automatically generated + // opEquals was used, which was inferred `@safe` because of bugzilla 20655: + // https://issues.dlang.org/show_bug.cgi?id=20655 + // This `@trusted opEquals` is only here to prevent breakage. + bool opEquals(R)(const auto ref R other) const @trusted + { + return this.tupleof == other.tupleof; + } + + // Define a default toHash to allow AA usage + size_t toHash() const @trusted + { + return hashOf(slen_, hashOf(small_)); + } + /++ True if this object contains valid extended grapheme cluster. Decoding primitives of this module always return a valid `Grapheme`. @@ -7709,7 +7802,7 @@ public: @property bool valid()() /*const*/ { auto r = this[]; - genericDecodeGrapheme!false(r); + genericDecodeGrapheme!(GraphemeRet.none)(r); return r.length == 0; } @@ -7898,6 +7991,12 @@ static assert(Grapheme.sizeof == size_t.sizeof*4); assert(equal(h[], iota(cast(int)'A', cast(int)'Z'+1))); } +// ensure Grapheme can be used as an AA key. +@safe unittest +{ + int[Grapheme] aa; +} + /++ $(P Does basic case-insensitive comparison of `r1` and `r2`. This function uses simpler comparison rule thus achieving better performance @@ -7995,19 +8094,19 @@ if (isInputRange!S1 && isSomeChar!(ElementEncodingType!S1) if (idx2 != EMPTY_CASE_TRIE) {// both cased chars // adjust idx --> start of bucket - idx = idx - sTable[idx].n; - idx2 = idx2 - sTable[idx2].n; + idx = idx - sTable(idx).n; + idx2 = idx2 - sTable(idx2).n; if (idx == idx2)// one bucket, equivalent chars continue; else// not the same bucket - diff = sTable[idx].ch - sTable[idx2].ch; + diff = sTable(idx).ch - sTable(idx2).ch; } else - diff = sTable[idx - sTable[idx].n].ch - rhs; + diff = sTable(idx - sTable(idx).n).ch - rhs; } else if (idx2 != EMPTY_CASE_TRIE) { - diff = lhs - sTable[idx2 - sTable[idx2].n].ch; + diff = lhs - sTable(idx2 - sTable(idx2).n).ch; } // one of chars is not cased at all return diff; @@ -8052,22 +8151,23 @@ private int fullCasedCmp(Range)(dchar lhs, dchar rhs, ref Range rtail) // fullCaseTrie is packed index table if (idx == EMPTY_CASE_TRIE) return lhs; - immutable start = idx - fTable[idx].n; - immutable end = fTable[idx].size + start; - assert(fTable[start].entry_len == 1); + immutable start = idx - fTable(idx).n; + immutable end = fTable(idx).size + start; + assert(fTable(start).entry_len == 1); for (idx=start; idx> composeCntShift; // TODO: optimize this micro binary search (no more then 4-5 steps) - auto r = compositionTable[idx .. idx+cnt].map!"a.rhs"().assumeSorted(); + auto r = compositionTable.stride(2)[idx .. idx+cnt].assumeSorted(); immutable target = r.lowerBound(second).length; if (target == cnt) return dchar.init; - immutable entry = compositionTable[idx+target]; - if (entry.rhs != second) + immutable entry = compositionTable[(idx+target)*2]; + if (entry != second) return dchar.init; - return entry.composed; + return compositionTable[(idx+target)*2 + 1]; } /// @@ -8592,7 +8692,7 @@ public: Decomposes a Hangul syllable. If `ch` is not a composed syllable then this function returns $(LREF Grapheme) containing only `ch` as is. */ -Grapheme decomposeHangul(dchar ch) @safe +Grapheme decomposeHangul(dchar ch) nothrow pure @safe { immutable idxS = cast(int) ch - jamoSBase; if (idxS < 0 || idxS >= jamoSCount) return Grapheme(ch); @@ -8709,7 +8809,15 @@ enum { In cases where the string in question is already normalized, it is returned unmodified and no memory allocation happens. +/ -inout(C)[] normalize(NormalizationForm norm=NFC, C)(return scope inout(C)[] input) +/* + WARNING: @trusted lambda inside - handle with same care as @trusted + functions + + Despite being a template, the attributes do no harm since this doesn't work + with user-defined range or character types anyway. +*/ +pure @safe inout(C)[] normalize(NormalizationForm norm=NFC, C) + (return scope inout(C)[] input) { import std.algorithm.mutation : SwapStrategy; import std.algorithm.sorting : sort; @@ -8790,20 +8898,24 @@ inout(C)[] normalize(NormalizationForm norm=NFC, C)(return scope inout(C)[] inpu // reset variables decomposed.length = 0; () @trusted { - decomposed.assumeSafeAppend(); + // assumeSafeAppend isn't considered pure as of writing, hence the + // cast. It isn't pure in the sense that the elements after + // the array in question are affected, but we don't use those + // making the call pure for our purposes. + (cast(void delegate() pure nothrow) {decomposed.assumeSafeAppend();})(); ccc.length = 0; - ccc.assumeSafeAppend(); + (cast(void delegate() pure nothrow) {ccc.assumeSafeAppend();})(); } (); input = input[anchors[1]..$]; // and move on anchors = splitNormalized!norm(input); - }while (anchors[0] != input.length); + } while (anchors[0] != input.length); app.put(input[0 .. anchors[0]]); return () @trusted inout { return cast(inout(C)[]) app.data; } (); } /// -@safe unittest +@safe pure unittest { // any encoding works wstring greet = "Hello world"; @@ -8817,7 +8929,7 @@ inout(C)[] normalize(NormalizationForm norm=NFC, C)(return scope inout(C)[] inpu assert(normalize!NFKD("ϓ") == "\u03A5\u0301"); } -@safe unittest +@safe pure unittest { import std.conv : text; @@ -8825,18 +8937,9 @@ inout(C)[] normalize(NormalizationForm norm=NFC, C)(return scope inout(C)[] inpu assert(normalize!NFKD("2¹⁰") == "210", normalize!NFKD("2¹⁰")); assert(normalize!NFD("Äffin") == "A\u0308ffin"); - // check example - - // any encoding works - wstring greet = "Hello world"; + // test with dstring + dstring greet = "Hello world"; assert(normalize(greet) is greet); // the same exact slice - - // An example of a character with all 4 forms being different: - // Greek upsilon with acute and hook symbol (code point 0x03D3) - assert(normalize!NFC("ϓ") == "\u03D3"); - assert(normalize!NFD("ϓ") == "\u03D2\u0301"); - assert(normalize!NFKC("ϓ") == "\u038E"); - assert(normalize!NFKD("ϓ") == "\u03A5\u0301"); } // canonically recompose given slice of code points, works in-place and mutates data diff --git a/std/utf.d b/std/utf.d index 3eef5cbcc03..9a326a5ac3a 100644 --- a/std/utf.d +++ b/std/utf.d @@ -53,7 +53,7 @@ $(TR $(TD Miscellaneous) $(TD See_Also: $(LINK2 http://en.wikipedia.org/wiki/Unicode, Wikipedia)
$(LINK http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8)
- $(LINK http://anubis.dkuug.dk/JTC1/SC2/WG2/docs/n1335) + $(LINK https://web.archive.org/web/20100113043530/https://anubis.dkuug.dk/JTC1/SC2/WG2/docs/n1335) Copyright: Copyright The D Language Foundation 2000 - 2012. License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). Authors: $(HTTP digitalmars.com, Walter Bright) and @@ -328,7 +328,7 @@ Returns: bool isValidCodepoint(Char)(Char c) if (isSomeChar!Char) { - alias UChar = Unqual!Char; + alias UChar = typeof(cast() c); static if (is(UChar == char)) { return c <= 0x7F; @@ -1418,8 +1418,8 @@ do } else { - alias Char = Unqual!(ElementType!S); - Char[4] codeUnits; + alias Char = typeof(cast() ElementType!S.init); + Char[4] codeUnits = void; S tmp = str.save; for (size_t i = numCodeUnits; i > 0; ) { @@ -2528,8 +2528,8 @@ size_t encode(UseReplacementDchar useReplacementDchar = No.useReplacementDchar)( encode(buf, '\u0000'); assert(buf[0] == '\u0000'); encode(buf, '\uD7FF'); assert(buf[0] == '\uD7FF'); encode(buf, '\uE000'); assert(buf[0] == '\uE000'); - encode(buf, 0xFFFE ); assert(buf[0] == 0xFFFE); - encode(buf, 0xFFFF ); assert(buf[0] == 0xFFFF); + encode(buf, 0xFFFE); assert(buf[0] == 0xFFFE); + encode(buf, 0xFFFF); assert(buf[0] == 0xFFFF); encode(buf, '\U0010FFFF'); assert(buf[0] == '\U0010FFFF'); assertThrown!UTFException(encode(buf, cast(dchar) 0xD800)); @@ -2749,8 +2749,8 @@ void encode(UseReplacementDchar useReplacementDchar = No.useReplacementDchar)( encode(buf, '\u0000'); assert(buf[0] == '\u0000'); encode(buf, '\uD7FF'); assert(buf[1] == '\uD7FF'); encode(buf, '\uE000'); assert(buf[2] == '\uE000'); - encode(buf, 0xFFFE ); assert(buf[3] == 0xFFFE); - encode(buf, 0xFFFF ); assert(buf[4] == 0xFFFF); + encode(buf, 0xFFFE); assert(buf[3] == 0xFFFE); + encode(buf, 0xFFFF); assert(buf[4] == 0xFFFF); encode(buf, '\U0010FFFF'); assert(buf[5] == '\U0010FFFF'); assertThrown!UTFException(encode(buf, cast(dchar) 0xD800)); @@ -2821,7 +2821,7 @@ if (isSomeChar!C) size_t codeLength(C, InputRange)(InputRange input) if (isSomeFiniteCharInputRange!InputRange) { - alias EncType = Unqual!(ElementEncodingType!InputRange); + alias EncType = typeof(cast() ElementEncodingType!InputRange.init); static if (isSomeString!InputRange && is(EncType == C) && is(typeof(input.length))) return input.length; else @@ -3089,7 +3089,8 @@ private T toUTFImpl(T, S)(scope S s) static if (is(S == C[], C) || hasLength!S) app.reserve(s.length); - foreach (c; s.byUTF!(Unqual!(ElementEncodingType!T))) + ElementEncodingType!T e = void; + foreach (c; s.byUTF!(typeof(cast() ElementEncodingType!T.init))) app.put(c); return app.data; @@ -3168,10 +3169,10 @@ if (is(immutable typeof(*P.init) == typeof(str[0]))) return trustedPtr(); } - alias C = Unqual!(ElementEncodingType!S); + alias C = typeof(cast() ElementEncodingType!S.init); //If the P is mutable, then we have to make a copy. - static if (is(Unqual!(typeof(*P.init)) == typeof(*P.init))) + static if (is(typeof(cast() *P.init) == typeof(*P.init))) { return toUTFzImpl!(P, const(C)[])(cast(const(C)[])str); } @@ -3203,13 +3204,15 @@ private P toUTFzImpl(P, S)(return scope S str) @safe pure if (is(typeof(str[0]) C) && is(immutable typeof(*P.init) == immutable C) && !is(C == immutable)) //C[] or const(C)[] -> C*, const(C)*, or immutable(C)* { - alias InChar = typeof(str[0]); - alias OutChar = typeof(*P.init); + alias InChar = typeof(str[0]); + alias UInChar = typeof(cast() str[0]); // unqualified version of InChar + alias OutChar = typeof(*P.init); + alias UOutChar = typeof(cast() *P.init); // unqualified version //const(C)[] -> const(C)* or //C[] -> C* or const(C)* - static if (( is(const(Unqual!InChar) == InChar) && is(const(Unqual!OutChar) == OutChar)) || - (!is(const(Unqual!InChar) == InChar) && !is(immutable(Unqual!OutChar) == OutChar))) + static if (( is(const(UInChar) == InChar) && is( const(UOutChar) == OutChar)) || + (!is(const(UInChar) == InChar) && !is(immutable(UOutChar) == OutChar))) { if (!__ctfe) { @@ -3228,7 +3231,7 @@ if (is(typeof(str[0]) C) && is(immutable typeof(*P.init) == immutable C) && !is( else { import std.array : uninitializedArray; - auto copy = uninitializedArray!(Unqual!OutChar[])(str.length + 1); + auto copy = uninitializedArray!(UOutChar[])(str.length + 1); copy[0 .. $ - 1] = str[]; copy[$ - 1] = '\0'; diff --git a/std/uuid.d b/std/uuid.d index dec2a1c276d..b8cac6ecdd7 100644 --- a/std/uuid.d +++ b/std/uuid.d @@ -1207,7 +1207,7 @@ public struct UUID * randomGen = uniform RNG * See_Also: $(REF isUniformRNG, std,random) */ -@safe UUID randomUUID() +@nogc nothrow @safe UUID randomUUID() { import std.random : rndGen; // A PRNG with fewer than `n` bytes of state cannot produce diff --git a/std/variant.d b/std/variant.d index 41cd4848b12..f7832104d70 100644 --- a/std/variant.d +++ b/std/variant.d @@ -382,7 +382,7 @@ private: static if (isStaticArray!A && isDynamicArray!T) { auto this_ = (*src)[]; - emplaceRef(*cast(Unqual!T*) zat, cast(Unqual!T) this_); + emplaceRef(*cast(Unqual!T*) zat, cast() cast(T) this_); } else { diff --git a/tools/unicode_table_generator.d b/tools/unicode_table_generator.d index 0545a876418..ec75d9a1ce3 100644 --- a/tools/unicode_table_generator.d +++ b/tools/unicode_table_generator.d @@ -1,27 +1,47 @@ -//Written in the D programming language /** - gen_uni is a tool to automatically generate source code for unicode data structures. +This is a tool to automatically generate source code for unicode data structures. - To generate the tables use: - ``` - $ rdmd -m32 unicode_table_generator.d - $ rdmd -m64 unicode_table_generator.d --min - ``` +If not present, the script will automatically try to download the files from: https://www.unicode.org/Public - See the global ``UnicodeDatabaseDirectory`` for the latest version of the Unicode database that was used to generate the tables. +Make sure the current working directory is the /tools folder. - TODO: Support emitting of Turkic casefolding mappings +To update `std.internal.unicode*.d` files, run: +``` +rdmd -m32 unicode_table_generator.d +rdmd -m64 unicode_table_generator.d --min +``` - Authors: Dmitry Olshansky +The -m32 run will replace the files, while the -m64 run with --min will append 64-bit specific parts. +The 32-bit compilation of the generator is needed because it depends on 32-bit data structures defined in `std.uni`. +To make -m32 work on linux, you may need to grab a 32-bit `libphobos2.a` from `dmd2/linux/lib32` and pass it as argument: - License: Boost +``` +rdmd -m32 -Llibphobos2.a -defaultlib= unicode_table_generator.d +``` + +Pull Requests to untangle this complex bootstrap process are welcome! :) + +TODO: Support emitting of Turkic casefolding mappings + +Authors: Dmitry Olshansky + +License: Boost */ module std.unicode_table_generator; // this shouldn't be in std package, but stuff is package'd as that in std.uni. +/// Directory in which unicode files are downloaded +enum unicodeDir = "ucd-16-0-0/"; + +/// Url from which unicode files are downloaded +enum unicodeBaseUrl = "https://www.unicode.org/Public/16.0.0/ucd/"; + +/// Where to put generated files +enum outputDir = "../std/internal/"; + import std.uni, std.stdio, std.traits, std.typetuple, - std.exception, std.format, std.algorithm, std.typecons, - std.regex, std.range, std.conv, std.getopt; + std.exception, std.format, std.algorithm, std.typecons, + std.regex, std.range, std.conv, std.getopt, std.path; import std.file : exists; static import std.ascii, std.string; @@ -84,43 +104,73 @@ CodepointSet compExclusions; //property names to discard string[] blacklist = []; -enum mixedCCEntry = ` +struct FullCaseEntry +{ + dchar[3] seq = 0; + ubyte n; /// number in batch + ubyte size; /// size - size of batch + ubyte entry_len; + + auto value() const @safe pure nothrow @nogc return + { + return seq[0 .. entry_len]; + } +} + +/// 8 byte easy SimpleCaseEntry, will be compressed to SCE which bit packs values to 4 bytes struct SimpleCaseEntry { uint ch; - ubyte n, bucket;// n - number in bucket + ubyte n; // number in bucket + ubyte size; + bool isLower; + bool isUpper; +} -pure nothrow @nogc: +enum mixedCCEntry = ` +/// Simple Case Entry, wrapper around uint to extract bit fields from simpleCaseTable() +struct SCE +{ + uint x; - @property ubyte size() const - { - return bucket & 0x3F; - } - @property auto isLower() const + nothrow @nogc pure @safe: + + this(uint x) { - return bucket & 0x40; + this.x = x; } - @property auto isUpper() const + + this(uint ch, ubyte n, ubyte size) { - return bucket & 0x80; + this.x = ch | n << 20 | size << 24; } + + int ch() const { return this.x & 0x1FFFF; } + int n() const { return (this.x >> 20) & 0xF; } + int size() const { return this.x >> 24; } } -struct FullCaseEntry +/// Bit backed FullCaseEntry +struct FCE { - dchar[3] seq; - ubyte n, size;// n number in batch, size - size of batch - ubyte entry_len; + ulong x; // bit field sizes: 18, 12, 12, 4, 4, 4 + +nothrow @nogc pure @safe: - @property auto value() const @trusted pure nothrow @nogc return + this(ulong x) { - return seq[0 .. entry_len]; + this.x = x; } -} -struct CompEntry -{ - dchar rhs, composed; + this(dchar[3] seq, ubyte n, ubyte size, ubyte entry_len) + { + this.x = ulong(seq[0]) << 36 | ulong(seq[1]) << 24 | seq[2] << 12 | n << 8 | size << 4 | entry_len << 0; + } + + dchar[3] seq() const { return [(x >> 36) & 0x1FFFF, (x >> 24) & 0xFFF, (x >> 12) & 0xFFF]; } + ubyte n() const { return (x >> 8) & 0xF; } + ubyte size() const { return (x >> 4) & 0xF; } + ubyte entry_len() const { return (x >> 0) & 0xF; } } struct UnicodeProperty @@ -131,35 +181,71 @@ struct UnicodeProperty struct TrieEntry(T...) { - size_t[] offsets; - size_t[] sizes; - size_t[] data; + immutable(size_t)[] offsets; + immutable(size_t)[] sizes; + immutable(size_t)[] data; } `; auto fullCaseEntry(dstring value, ubyte num, ubyte batch_size) { - dchar[3] val; + dchar[3] val = 0; val[0 .. value.length] = value[]; return FullCaseEntry(val, num, batch_size, cast(ubyte) value.length); } enum { - UnicodeDatabaseDirectory = "ucd-15/", - caseFoldingSrc = UnicodeDatabaseDirectory ~ "CaseFolding.txt", - blocksSrc = UnicodeDatabaseDirectory ~ "Blocks.txt", - propListSrc = UnicodeDatabaseDirectory ~ "PropList.txt", - graphemeSrc = UnicodeDatabaseDirectory ~ "auxiliary/GraphemeBreakProperty.txt", - emojiDataSrc = UnicodeDatabaseDirectory ~ "emoji/emoji-data.txt", - propertyValueAliases = UnicodeDatabaseDirectory ~ "PropertyValueAliases.txt", - corePropSrc = UnicodeDatabaseDirectory ~ "DerivedCoreProperties.txt", - normalizationPropSrc = UnicodeDatabaseDirectory ~ "DerivedNormalizationProps.txt", - scriptsSrc = UnicodeDatabaseDirectory ~ "Scripts.txt", - hangulSyllableSrc = UnicodeDatabaseDirectory ~ "HangulSyllableType.txt", - unicodeDataSrc = UnicodeDatabaseDirectory ~ "UnicodeData.txt", - compositionExclusionsSrc = UnicodeDatabaseDirectory ~ "CompositionExclusions.txt", - specialCasingSrc = UnicodeDatabaseDirectory ~ "SpecialCasing.txt" + caseFoldingSrc = "CaseFolding.txt", + blocksSrc = "Blocks.txt", + propListSrc = "PropList.txt", + graphemeSrc = "auxiliary/GraphemeBreakProperty.txt", + emojiDataSrc = "emoji/emoji-data.txt", + propertyValueAliases = "PropertyValueAliases.txt", + corePropSrc = "DerivedCoreProperties.txt", + normalizationPropSrc = "DerivedNormalizationProps.txt", + scriptsSrc = "Scripts.txt", + hangulSyllableSrc = "HangulSyllableType.txt", + unicodeDataSrc = "UnicodeData.txt", + compositionExclusionsSrc = "CompositionExclusions.txt", + specialCasingSrc = "SpecialCasing.txt" +} + +void ensureFilesAreDownloaded() +{ + import std.file : write, mkdirRecurse; + import std.net.curl : download; + import std.path : dirName, buildPath; + + string[] files = [ + caseFoldingSrc, + blocksSrc, + propListSrc, + graphemeSrc, + emojiDataSrc, + propertyValueAliases, + corePropSrc, + normalizationPropSrc, + scriptsSrc, + hangulSyllableSrc, + unicodeDataSrc, + compositionExclusionsSrc, + specialCasingSrc + ]; + + mkdirRecurse(unicodeDir); + foreach (string file; files) + { + string dest = unicodeDir.buildPath(file); + if (exists(dest)) + continue; + if (file.canFind("/")) + { + mkdirRecurse(dest.dirName); + } + writeln("downloading ", unicodeBaseUrl ~ file); + download(unicodeBaseUrl ~ file, dest); + } } enum HeaderComment = `//Written in the D programming language @@ -189,21 +275,13 @@ void main(string[] argv) if (minimal) mode = "a"; + ensureFilesAreDownloaded(); - if (!exists(UnicodeDatabaseDirectory)) - { - writeln("Did you forget to download the Unicode database tables?"); - writeln("Looking for them in: ", UnicodeDatabaseDirectory); - return; - } - - enum UnicodeTableDirectory = "../std/internal/"; - - auto baseSink = File(UnicodeTableDirectory ~ "unicode_tables.d", mode); - auto compSink = File(UnicodeTableDirectory ~ "unicode_comp.d", mode); - auto decompSink = File(UnicodeTableDirectory ~ "unicode_decomp.d", mode); - auto normSink = File(UnicodeTableDirectory ~ "unicode_norm.d", mode); - auto graphSink = File(UnicodeTableDirectory ~ "unicode_grapheme.d", mode); + auto baseSink = File(outputDir.buildPath("unicode_tables.d"), mode); + auto compSink = File(outputDir.buildPath("unicode_comp.d"), mode); + auto decompSink = File(outputDir.buildPath("unicode_decomp.d"), mode); + auto normSink = File(outputDir.buildPath("unicode_norm.d"), mode); + auto graphSink = File(outputDir.buildPath("unicode_grapheme.d"), mode); if (!minimal) { baseSink.writeln(HeaderComment); @@ -230,20 +308,20 @@ void main(string[] argv) graphSink.writeln("\npackage(std):\n"); } - loadBlocks(blocksSrc, blocks); - loadProperties(propListSrc, general); - loadProperties(corePropSrc, general); - loadProperties(scriptsSrc, scripts); - loadProperties(hangulSyllableSrc, hangul); - loadProperties(graphemeSrc, graphemeBreaks); - loadProperties(emojiDataSrc, emojiData); - loadPropertyAliases(propertyValueAliases); - - loadUnicodeData(unicodeDataSrc); - loadSpecialCasing(specialCasingSrc); - loadExclusions(compositionExclusionsSrc); - loadCaseFolding(caseFoldingSrc); - loadNormalization(normalizationPropSrc); + loadBlocks(unicodeDir.buildPath(blocksSrc), blocks); + loadProperties(unicodeDir.buildPath(propListSrc), general); + loadProperties(unicodeDir.buildPath(corePropSrc), general); + loadProperties(unicodeDir.buildPath(scriptsSrc), scripts); + loadProperties(unicodeDir.buildPath(hangulSyllableSrc), hangul); + loadProperties(unicodeDir.buildPath(graphemeSrc), graphemeBreaks); + loadProperties(unicodeDir.buildPath(emojiDataSrc), emojiData); + loadPropertyAliases(unicodeDir.buildPath(propertyValueAliases)); + + loadUnicodeData(unicodeDir.buildPath(unicodeDataSrc)); + loadSpecialCasing(unicodeDir.buildPath(specialCasingSrc)); + loadExclusions(unicodeDir.buildPath(compositionExclusionsSrc)); + loadCaseFolding(unicodeDir.buildPath(caseFoldingSrc)); + loadNormalization(unicodeDir.buildPath(normalizationPropSrc)); static void writeTableOfSets(File sink, string prefix, PropertyTable tab) { @@ -365,10 +443,13 @@ void loadCaseFolding(string f) sort(entry[0 .. size]); foreach (i, value; entry[0 .. size]) { - auto withFlags = cast(ubyte) size | (value in lowerCaseSet ? 0x40 : 0) - | (value in upperCaseSet ? 0x80 : 0); - simpleTable ~= SimpleCaseEntry(value, cast(ubyte) i, - cast(ubyte) withFlags); + simpleTable ~= SimpleCaseEntry( + value, + cast(ubyte) i, + cast(ubyte) size, + cast(bool) (value in lowerCaseSet), + cast(bool) (value in upperCaseSet) + ); } } @@ -724,7 +805,7 @@ string charsetString(CodepointSet set, string sep=";\n") auto app = appender!(char[])(); ubyte[] data = compressIntervals(set.byInterval); assert(CodepointSet(decompressIntervals(data)) == set); - formattedWrite(app, "[%(0x%x, %)];", data); + formattedWrite(app, "x\"%(%02X%)\";", data); return cast(string) app.data; } @@ -815,37 +896,47 @@ void writeCaseFolding(File sink) { write(mixedCCEntry); - writeln("@property immutable(SimpleCaseEntry[]) simpleCaseTable()"); + writeln("SCE simpleCaseTable(size_t i)"); writeln("{"); - writeln("alias SCE = SimpleCaseEntry;"); - writeln("static immutable SCE[] t = ["); + writef("static immutable uint[] t = x\""); foreach (i, v; simpleTable) { - writef("SCE(0x%04x, %s, 0x%0x),", v.ch, v.n, v.bucket); - if (i % 4 == 0) writeln(); + if (i % 12 == 0) writeln(); + writef("%08X", SCE(v.ch, v.n, v.size).x); } - writeln("];"); - writeln("return t;"); + + // Inspect max integer size, so efficient bit packing can be found: + stderr.writefln("max n: %X", simpleTable.maxElement!(x => x.n).n); // n: 2-bit + stderr.writefln("max ch: %X", simpleTable.maxElement!(x => x.ch).ch); // ch: 17-bit + stderr.writefln("max size: %X", simpleTable.maxElement!(x => x.size).size); // size: 3-bit + + writeln("\";"); + writeln("return SCE(t[i]);"); writeln("}"); - static uint maxLen = 0; - writeln("@property immutable(FullCaseEntry[]) fullCaseTable() nothrow @nogc @safe pure"); + writeln("@property FCE fullCaseTable(size_t index) nothrow @nogc @safe pure"); writeln("{"); - writeln("alias FCE = FullCaseEntry;"); - writeln("static immutable FCE[] t = ["); + writef("static immutable ulong[] t = x\""); + int[4] maxS = 0; foreach (i, v; fullTable) { - maxLen = max(maxLen, v.entry_len); + foreach (j; 0 .. v.entry_len) + maxS[j] = max(maxS[j], v.value[j]); + if (v.entry_len > 1) { assert(v.n >= 1); // meaning that start of bucket is always single char } - writef("FCE(\"%s\", %s, %s, %s),", v.value, v.n, v.size, v.entry_len); - if (i % 4 == 0) writeln(); + if (i % 6 == 0) writeln(); + writef("%016X", FCE(v.seq, v.n, v.size, v.entry_len).x); } - writeln("];"); - writeln("return t;"); + writeln("\";"); + writeln("return FCE(t[index]);"); writeln("}"); - stderr.writefln("MAX FCF len = %d", maxLen); + import core.bitop : bsr; + stderr.writefln("max seq bits: [%d, %d, %d]", 1 + bsr(maxS[0]), 1 + bsr(maxS[1]), 1 + bsr(maxS[2])); //[17, 11, 10] + stderr.writefln("max n = %d", fullTable.map!(x => x.n).maxElement); // 3 + stderr.writefln("max size = %d", fullTable.map!(x => x.size).maxElement); // 4 + stderr.writefln("max entry_len = %d", fullTable.map!(x => x.entry_len).maxElement); // 3 } } @@ -940,15 +1031,22 @@ void writeGraphemeTries(File sink) // emoji related data writeBest3Level(sink, "Extended_Pictographic", emojiData.table["Extended_Pictographic"]); +} - sink.writeln(); +/// Write a function that returns a dchar[] with data stored in `table` +void writeDstringTable(File sink, string name, const dchar[] table) +{ + sink.writefln("dstring %s() nothrow @nogc pure @safe {\nstatic immutable dchar[%d] t =", name, table.length); + sink.writeDstring(table); + sink.writeln(";\nreturn t[];\n}"); +} - writeBest3Level - ( - sink, - "Extended_Pictographic", - emojiData.table["Extended_Pictographic"] - ); +/// Write a function that returns a uint[] with data stored in `table` +void writeUintTable(File sink, string name, const uint[] table) +{ + sink.writefln("immutable(uint)[] %s() nothrow @nogc pure @safe {\nstatic immutable uint[] t =", name, ); + sink.writeUintArray(table); + sink.writeln(";\nreturn t;\n}"); } void writeCaseCoversion(File sink) @@ -973,16 +1071,9 @@ void writeCaseCoversion(File sink) writeBest3Level(sink, "toTitleSimpleIndex", toTitleSimpleIndex, ushort.max); } - with(sink) - { - writeln("@property"); - writeln("{"); - writeln("private alias _IUA = immutable(uint[]);"); - writefln("_IUA toUpperTable() nothrow @nogc @safe pure { static _IUA t = [%( 0x%x, %)]; return t; }", toUpperTab); - writefln("_IUA toLowerTable() nothrow @nogc @safe pure { static _IUA t = [%( 0x%x, %)]; return t; }", toLowerTab); - writefln("_IUA toTitleTable() nothrow @nogc @safe pure { static _IUA t = [%( 0x%x, %)]; return t; }", toTitleTab); - writeln("}"); - } + writeUintTable(sink, "toUpperTable", toUpperTab); + writeUintTable(sink, "toLowerTable", toLowerTab); + writeUintTable(sink, "toTitleTable", toTitleTab); } void writeDecomposition(File sink) @@ -1039,15 +1130,9 @@ void writeDecomposition(File sink) writeBest3Level(sink, "compatMapping", mappingCompat, cast(ushort) 0); writeBest3Level(sink, "canonMapping", mappingCanon, cast(ushort) 0); - with(sink) - { - writeln("@property"); - writeln("{"); - writeln("private alias _IDCA = immutable(dchar[]);"); - writefln("_IDCA decompCanonTable() @safe pure nothrow { static _IDCA t = [%( 0x%x, %)]; return t; }", decompCanonFlat); - writefln("_IDCA decompCompatTable() @safe pure nothrow { static _IDCA t = [%( 0x%x, %)]; return t; }", decompCompatFlat); - writeln("}"); - } + + writeDstringTable(sink, "decompCanonTable", decompCanonFlat); + writeDstringTable(sink, "decompCompatTable", decompCompatFlat); } void writeFunctions(File sink) @@ -1073,6 +1158,53 @@ void writeFunctions(File sink) } } +/// Write a `dchar[]` as hex string +void writeUintArray(T:dchar)(File sink, const T[] tab) +{ + size_t lineCount = 1; + sink.write("x\""); + foreach (i, elem; tab) + { + if ((i % 12) == 0) + sink.write("\n"); + + sink.writef("%08X", elem); + } + sink.write("\""); +} + +/// Write a `dchar[]` as a dstring ""d +void writeDstring(T:dchar)(File sink, const T[] tab) +{ + size_t lineCount = 1; + sink.write("\""); + foreach (elem; tab) + { + if (lineCount >= 110) + { + sink.write("\"d~\n\""); + lineCount = 1; + } + if (elem >= 0x10FFFF) + { + // invalid dchar, but might have extra info bit-packed in upper bits + sink.writef("\"d~cast(dchar) 0x%08X~\"", elem); + lineCount += 25; + } + else if (elem <= 0xFFFF) + { + sink.writef("\\u%04X", elem); + lineCount += 6; + } + else + { + sink.writef("\\U%08X", elem); + lineCount += 10; + } + } + sink.write("\"d"); +} + void writeCompositionTable(File sink) { @@ -1130,17 +1262,9 @@ void writeCompositionTable(File sink) { writeln("enum composeIdxMask = (1 << 11) - 1, composeCntShift = 11;"); write("enum compositionJumpTrieEntries = TrieEntry!(ushort, 12, 9)("); - triT.store(sink.lockingTextWriter()); + triT.storeTrie(sink.lockingTextWriter()); writeln(");"); - writeln("@property immutable(CompEntry[]) compositionTable() nothrow pure @nogc @safe"); - writeln("{"); - writeln("alias CE = CompEntry;"); - write("static immutable CE[] t = ["); - foreach (pair; dupletes) - writef("CE(0x%05x, 0x%05x),", pair[0], pair[1]); - writeln("];"); - writeln("return t;"); - writeln("}"); + writeDstringTable(sink, "compositionTable", dupletes.map!(x => only(x.expand)).joiner.array); } } @@ -1326,8 +1450,36 @@ template createPrinter(Params...) foreach (lvl; Params[0..$]) sink.writef(", %d", lvl); sink.write(")("); - trie.store(sink.lockingTextWriter()); + trie.storeTrie(sink.lockingTextWriter()); sink.writeln(");"); }; } } + +void storeTrie(T, O)(T trie, O sink) +{ + import std.format.write : formattedWrite; + void store(size_t[] arr) + { + formattedWrite(sink, "x\""); + foreach (i; 0 .. arr.length) + { + static if (size_t.sizeof == 8) + { + formattedWrite(sink, (i % 6) == 0 ? "\n" : ""); + formattedWrite(sink, "%016X", arr[i]); + } + else + { + formattedWrite(sink, (i % 12) == 0 ? "\n" : ""); + formattedWrite(sink, "%08X", arr[i]); + } + } + formattedWrite(sink, "\",\n"); + } + // Access private members + auto table = __traits(getMember, trie, "_table"); + store(__traits(getMember, table, "offsets")); + store(__traits(getMember, table, "sz")); + store(__traits(getMember, table, "storage")); +} diff --git a/win32.mak b/win32.mak deleted file mode 100644 index b29fad7589e..00000000000 --- a/win32.mak +++ /dev/null @@ -1,574 +0,0 @@ -# Makefile to build D runtime library phobos.lib for Win32 OMF -# MS COFF builds use win64.mak for 32 and 64 bit -# -# Prerequisites: -# Digital Mars dmc, lib, and make that are unzipped from Digital Mars C: -# http://ftp.digitalmars.com/Digital_Mars_C++/Patch/dm850c.zip -# and are in the \dm\bin directory. -# Targets: -# make -# Same as make unittest -# make phobos.lib -# Build phobos.lib -# make clean -# Delete unneeded files created by build process -# make unittest -# Build phobos.lib, build and run unit tests -# make cov -# Build for coverage tests, run coverage tests -# Notes: -# minit.obj requires Microsoft MASM386.EXE to build from minit.asm, -# or just use the supplied minit.obj - -# Ignored, only the default value is supported -# MODEL=32omf - -## Copy command - -CP=cp - -## Directory where dmd has been installed - -DIR=\dmd2 - -## Flags for dmc C compiler - -CFLAGS=-mn -6 -r -#CFLAGS=-g -mn -6 -r - -## Location of druntime tree - -DRUNTIME=../dmd/druntime -DRUNTIMELIB=$(DRUNTIME)/lib/druntime.lib - -## Flags for dmd D compiler - -DFLAGS=-m32omf -conf= -O -release -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise -I$(DRUNTIME)\import -#DFLAGS=-unittest -g -#DFLAGS=-unittest -cov -g - -## Flags for compiling unittests - -UDFLAGS=-m32omf -unittest -version=StdUnittest -version=CoreUnittest -conf= -O -w -preview=dip1000 -preview=fieldwise -I$(DRUNTIME)\import - -## C compiler - -CC=dmc -AR=lib -MAKE=make - -## D compiler - -DMD_DIR=../dmd -BUILD=release -OS=windows -DMD=$(DMD_DIR)/generated/$(OS)/$(BUILD)/32/dmd - -## Zlib library - -ZLIB=etc\c\zlib\zlib.lib - -.c.obj: -# $(CC) -c $(CFLAGS) $* - $(DMD) -c $(DFLAGS) -I. -v $* - -.cpp.obj: - $(CC) -c $(CFLAGS) $* - -.d.obj: - $(DMD) -c $(DFLAGS) $* - -.asm.obj: - $(CC) -c $* - -LIB=phobos.lib - -targets : $(LIB) - -test : test.exe - -test.obj : test.d - $(DMD) -conf= -c test -g $(UDFLAGS) - -test.exe : test.obj $(LIB) - $(DMD) -conf= test.obj -g -L/map - -# ti_bit.obj ti_Abit.obj - -SRC= \ - unittest.d \ - index.dd - -# The separation is a workaround for bug 4904 (optlink bug 3372). -SRC_STD_1= \ - std\stdio.d \ - std\string.d \ - std\file.d - -SRC_STD_2a= \ - std\array.d \ - std\functional.d \ - std\path.d \ - std\outbuffer.d \ - std\utf.d - -SRC_STD_3= \ - std\csv.d \ - std\complex.d \ - std\numeric.d \ - std\bigint.d \ - std\bitmanip.d \ - std\typecons.d \ - std\base64.d \ - std\ascii.d \ - std\demangle.d \ - std\uri.d \ - std\mmfile.d \ - std\getopt.d - -SRC_STD_3a= \ - std\signals.d \ - std\meta.d \ - std\typetuple.d \ - std\traits.d \ - std\encoding.d \ - std\random.d \ - std\exception.d \ - std\compiler.d \ - std\system.d \ - std\concurrency.d - -SRC_STD_4= \ - std\int128.d \ - std\uuid.d - -SRC_STD_6= \ - std\variant.d \ - std\zlib.d \ - std\socket.d \ - std\conv.d \ - std\zip.d - -SRC_STD_7= \ - std\stdint.d \ - std\json.d \ - std\parallelism.d \ - std\mathspecial.d \ - std\process.d \ - std\package.d - -SRC_STD_7a= \ - std\sumtype.d - -SRC_STD= \ - $(SRC_STD_1) \ - $(SRC_STD_2a) \ - $(SRC_STD_3) \ - $(SRC_STD_3a) \ - $(SRC_STD_4) \ - $(SRC_STD_6) \ - $(SRC_STD_7) \ - $(SRC_STD_7a) - -SRC_STD_ALGO= \ - std\algorithm\package.d \ - std\algorithm\comparison.d \ - std\algorithm\iteration.d \ - std\algorithm\mutation.d \ - std\algorithm\searching.d \ - std\algorithm\setops.d \ - std\algorithm\sorting.d \ - std\algorithm\internal.d - -SRC_STD_CONTAINER= \ - std\container\array.d \ - std\container\binaryheap.d \ - std\container\dlist.d \ - std\container\rbtree.d \ - std\container\slist.d \ - std\container\util.d \ - std\container\package.d - -SRC_STD_DATETIME= \ - std\datetime\date.d \ - std\datetime\interval.d \ - std\datetime\package.d \ - std\datetime\stopwatch.d \ - std\datetime\systime.d \ - std\datetime\timezone.d - -SRC_STD_DIGEST= \ - std\digest\crc.d \ - std\digest\sha.d \ - std\digest\md.d \ - std\digest\ripemd.d \ - std\digest\hmac.d \ - std\digest\murmurhash.d \ - std\digest\package.d - -SRC_STD_FORMAT= \ - std\format\package.d \ - std\format\read.d \ - std\format\spec.d \ - std\format\write.d \ - std\format\internal\floats.d \ - std\format\internal\read.d \ - std\format\internal\write.d - -SRC_STD_MATH= \ - std\math\algebraic.d \ - std\math\constants.d \ - std\math\exponential.d \ - std\math\operations.d \ - std\math\hardware.d \ - std\math\package.d \ - std\math\remainder.d \ - std\math\rounding.d \ - std\math\traits.d \ - std\math\trigonometry.d - -SRC_STD_NET= \ - std\net\isemail.d \ - std\net\curl.d - -SRC_STD_RANGE= \ - std\range\package.d \ - std\range\primitives.d \ - std\range\interfaces.d - -SRC_STD_REGEX= \ - std\regex\internal\ir.d \ - std\regex\package.d \ - std\regex\internal\parser.d \ - std\regex\internal\tests.d \ - std\regex\internal\tests2.d \ - std\regex\internal\backtracking.d \ - std\regex\internal\thompson.d \ - std\regex\internal\kickstart.d \ - std\regex\internal\generator.d - -SRC_STD_WIN= \ - std\windows\registry.d \ - std\windows\syserror.d \ - std\windows\charset.d - -SRC_STD_INTERNAL= \ - std\internal\cstring.d \ - std\internal\memory.d \ - std\internal\unicode_tables.d \ - std\internal\unicode_comp.d \ - std\internal\unicode_decomp.d \ - std\internal\unicode_grapheme.d \ - std\internal\unicode_norm.d \ - std\internal\scopebuffer.d \ - std\internal\test\dummyrange.d \ - std\internal\test\range.d - -SRC_STD_INTERNAL_DIGEST= \ - std\internal\digest\sha_SSSE3.d - -SRC_STD_INTERNAL_MATH= \ - std\internal\math\biguintcore.d \ - std\internal\math\biguintnoasm.d \ - std\internal\math\biguintx86.d \ - std\internal\math\gammafunction.d \ - std\internal\math\errorfunction.d - -SRC_STD_INTERNAL_WINDOWS= \ - std\internal\windows\advapi32.d - -SRC_STD_EXP= \ - std\checkedint.d std\experimental\checkedint.d - -SRC_STD_UNI = std\uni\package.d \ - -SRC_STD_EXP_ALLOC_BB= \ - std\experimental\allocator\building_blocks\affix_allocator.d \ - std\experimental\allocator\building_blocks\aligned_block_list.d \ - std\experimental\allocator\building_blocks\allocator_list.d \ - std\experimental\allocator\building_blocks\ascending_page_allocator.d \ - std\experimental\allocator\building_blocks\bitmapped_block.d \ - std\experimental\allocator\building_blocks\bucketizer.d \ - std\experimental\allocator\building_blocks\fallback_allocator.d \ - std\experimental\allocator\building_blocks\free_list.d \ - std\experimental\allocator\building_blocks\free_tree.d \ - std\experimental\allocator\building_blocks\kernighan_ritchie.d \ - std\experimental\allocator\building_blocks\null_allocator.d \ - std\experimental\allocator\building_blocks\quantizer.d \ - std\experimental\allocator\building_blocks\region.d \ - std\experimental\allocator\building_blocks\scoped_allocator.d \ - std\experimental\allocator\building_blocks\segregator.d \ - std\experimental\allocator\building_blocks\stats_collector.d \ - std\experimental\allocator\building_blocks\package.d - -SRC_STD_EXP_ALLOC= \ - std\experimental\allocator\common.d \ - std\experimental\allocator\gc_allocator.d \ - std\experimental\allocator\mallocator.d \ - std\experimental\allocator\mmap_allocator.d \ - std\experimental\allocator\showcase.d \ - std\experimental\allocator\typed.d \ - std\experimental\allocator\package.d \ - $(SRC_STD_EXP_ALLOC_BB) - -SRC_STD_EXP_LOGGER= \ - std\experimental\logger\core.d \ - std\experimental\logger\filelogger.d \ - std\experimental\logger\multilogger.d \ - std\experimental\logger\nulllogger.d \ - std\experimental\logger\package.d - -SRC_STD_LOGGER= \ - std\logger\core.d \ - std\logger\filelogger.d \ - std\logger\multilogger.d \ - std\logger\nulllogger.d \ - std\logger\package.d - -SRC_ETC= - -SRC_ETC_C= \ - etc\c\zlib.d \ - etc\c\curl.d \ - etc\c\sqlite3.d \ - etc\c\odbc\sql.d \ - etc\c\odbc\sqlext.d \ - etc\c\odbc\sqltypes.d \ - etc\c\odbc\sqlucode.d - -SRC_TO_COMPILE= \ - $(SRC_STD) \ - $(SRC_STD_ALGO) \ - $(SRC_STD_CONTAINER) \ - $(SRC_STD_DATETIME) \ - $(SRC_STD_DIGEST) \ - $(SRC_STD_FORMAT) \ - $(SRC_STD_MATH) \ - $(SRC_STD_NET) \ - $(SRC_STD_RANGE) \ - $(SRC_STD_REGEX) \ - $(SRC_STD_C) \ - $(SRC_STD_WIN) \ - $(SRC_STD_C_WIN) \ - $(SRC_STD_INTERNAL) \ - $(SRC_STD_INTERNAL_DIGEST) \ - $(SRC_STD_INTERNAL_MATH) \ - $(SRC_STD_INTERNAL_WINDOWS) \ - $(SRC_STD_EXP) \ - $(SRC_STD_UNI) \ - $(SRC_STD_EXP_ALLOC) \ - $(SRC_STD_EXP_LOGGER) \ - $(SRC_STD_LOGGER) \ - $(SRC_ETC) \ - $(SRC_ETC_C) - -SRC_ZLIB= \ - etc\c\zlib\crc32.h \ - etc\c\zlib\deflate.h \ - etc\c\zlib\gzguts.h \ - etc\c\zlib\inffixed.h \ - etc\c\zlib\inffast.h \ - etc\c\zlib\inftrees.h \ - etc\c\zlib\inflate.h \ - etc\c\zlib\trees.h \ - etc\c\zlib\zconf.h \ - etc\c\zlib\zlib.h \ - etc\c\zlib\zutil.h \ - etc\c\zlib\adler32.c \ - etc\c\zlib\compress.c \ - etc\c\zlib\crc32.c \ - etc\c\zlib\deflate.c \ - etc\c\zlib\gzclose.c \ - etc\c\zlib\gzlib.c \ - etc\c\zlib\gzread.c \ - etc\c\zlib\gzwrite.c \ - etc\c\zlib\infback.c \ - etc\c\zlib\inffast.c \ - etc\c\zlib\inflate.c \ - etc\c\zlib\inftrees.c \ - etc\c\zlib\trees.c \ - etc\c\zlib\uncompr.c \ - etc\c\zlib\zutil.c - -$(LIB) : $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) win32.mak win64.mak - $(DMD) -lib -of$(LIB) -Xfphobos.json $(DFLAGS) $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) - -UNITTEST_OBJS= \ - unittest1.obj \ - unittest2.obj \ - unittest2a.obj \ - unittest3.obj \ - unittest3a.obj \ - unittest3b.obj \ - unittest4.obj \ - unittest5.obj \ - unittest5a.obj \ - unittest5b.obj \ - unittest6.obj \ - unittest6a.obj \ - unittest6b.obj \ - unittest7.obj \ - unittest7a.obj \ - unittest8a.obj \ - unittest8b.obj \ - unittest8c.obj \ - unittest8d.obj \ - unittest8e.obj \ - unittest8f.obj - -unittest : $(LIB) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest1.obj $(SRC_STD_1) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest2.obj $(SRC_STD_RANGE) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest2a.obj $(SRC_STD_2a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3.obj $(SRC_STD_3) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3a.obj $(SRC_STD_3a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest3b.obj $(SRC_STD_DATETIME) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest4.obj $(SRC_STD_4) $(SRC_STD_DIGEST) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5.obj $(SRC_STD_ALGO) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5a.obj $(SRC_STD_FORMAT) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest5b.obj $(SRC_STD_MATH) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6.obj $(SRC_STD_6) $(SRC_STD_CONTAINER) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6a.obj $(SRC_STD_EXP_ALLOC) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest6b.obj $(SRC_STD_LOGGER) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest7.obj $(SRC_STD_7) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest7a.obj $(SRC_STD_7a) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8a.obj $(SRC_STD_REGEX) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8b.obj $(SRC_STD_NET) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8c.obj $(SRC_STD_C) $(SRC_STD_WIN) $(SRC_STD_C_WIN) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8d.obj $(SRC_STD_INTERNAL) $(SRC_STD_INTERNAL_DIGEST) $(SRC_STD_INTERNAL_MATH) $(SRC_STD_INTERNAL_WINDOWS) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8e.obj $(SRC_ETC) $(SRC_ETC_C) - $(DMD) $(UDFLAGS) -L/co -c -ofunittest8f.obj $(SRC_STD_EXP) - $(DMD) $(UDFLAGS) -L/co unittest.d $(UNITTEST_OBJS) \ - $(ZLIB) $(DRUNTIMELIB) - .\unittest.exe - -#unittest : unittest.exe -# unittest -# -#unittest.exe : unittest.d $(LIB) -# $(DMD) -conf= unittest -g -# dmc unittest.obj -g - -cov : $(SRC_TO_COMPILE) $(LIB) -# $(DMD) -conf= -cov=ctfe -cov $(UDFLAGS) -ofcov.exe -main $(SRC_TO_COMPILE) $(LIB) -# cov - del *.lst - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\stdio.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\string.d - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\file.d - $(DMD) -conf= -cov=ctfe -cov=86 $(UDFLAGS) -main -run std\range\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\array.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\functional.d - $(DMD) -conf= -cov=ctfe -cov=96 $(UDFLAGS) -main -run std\path.d - $(DMD) -conf= -cov=ctfe -cov=41 $(UDFLAGS) -main -run std\outbuffer.d - $(DMD) -conf= -cov=ctfe -cov=89 $(UDFLAGS) -main -run std\utf.d - $(DMD) -conf= -cov=ctfe -cov=93 $(UDFLAGS) -main -run std\csv.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\complex.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\int128.d - $(DMD) -conf= -cov=ctfe -cov=70 $(UDFLAGS) -main -run std\numeric.d - $(DMD) -conf= -cov=ctfe -cov=94 $(UDFLAGS) -main -run std\bigint.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\bitmanip.d - $(DMD) -conf= -cov=ctfe -cov=82 $(UDFLAGS) -main -run std\typecons.d - $(DMD) -conf= -cov=ctfe -cov=44 $(UDFLAGS) -main -run std\uni\package.d - $(DMD) -conf= -cov=ctfe -cov=91 $(UDFLAGS) -main -run std\base64.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\ascii.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\demangle.d - $(DMD) -conf= -cov=ctfe -cov=57 $(UDFLAGS) -main -run std\uri.d - $(DMD) -conf= -cov=ctfe -cov=51 $(UDFLAGS) -main -run std\mmfile.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\getopt.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\signals.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\meta.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\typetuple.d - $(DMD) -conf= -cov=ctfe -cov=85 $(UDFLAGS) -main -run std\traits.d - $(DMD) -conf= -cov=ctfe -cov=62 $(UDFLAGS) -main -run std\encoding.d - $(DMD) -conf= -cov=ctfe -cov=79 $(UDFLAGS) -main -run std\random.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\exception.d - $(DMD) -conf= -cov=ctfe -cov=73 $(UDFLAGS) -main -run std\concurrency.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\date.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\interval.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\stopwatch.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\systime.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\datetime\timezone.d - $(DMD) -conf= -cov=ctfe -cov=96 $(UDFLAGS) -main -run std\uuid.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\crc.d - $(DMD) -conf= -cov=ctfe -cov=55 $(UDFLAGS) -main -run std\digest\sha.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\md.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\ripemd.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\digest\hmac.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\package.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\comparison.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\iteration.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\mutation.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\searching.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\setops.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\algorithm\sorting.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\format\package.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\math\package.d - $(DMD) -conf= -cov=ctfe -cov=83 $(UDFLAGS) -main -run std\variant.d - $(DMD) -conf= -cov=ctfe -cov=58 $(UDFLAGS) -main -run std\zlib.d - $(DMD) -conf= -cov=ctfe -cov=53 $(UDFLAGS) -main -run std\socket.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\container\array.d - $(DMD) -conf= -cov=ctfe -cov=68 $(UDFLAGS) -main -run std\container\binaryheap.d - $(DMD) -conf= -cov=ctfe -cov=91 $(UDFLAGS) -main -run std\container\dlist.d - $(DMD) -conf= -cov=ctfe -cov=93 $(UDFLAGS) -main -run std\container\rbtree.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\container\slist.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\container\util.d - $(DMD) -conf= -cov=ctfe -cov=100 $(UDFLAGS) -main -run std\container\package.d - $(DMD) -conf= -cov=ctfe -cov=90 $(UDFLAGS) -main -run std\conv.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\zip.d - $(DMD) -conf= -cov=ctfe -cov=77 $(UDFLAGS) -main -run std\regex\tests.d - $(DMD) -conf= -cov=ctfe -cov=77 $(UDFLAGS) -main -run std\regex\tests2.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\json.d - $(DMD) -conf= -cov=ctfe -cov=87 $(UDFLAGS) -main -run std\parallelism.d - $(DMD) -conf= -cov=ctfe -cov=50 $(UDFLAGS) -main -run std\mathspecial.d - $(DMD) -conf= -cov=ctfe -cov=71 $(UDFLAGS) -main -run std\process.d - $(DMD) -conf= -cov=ctfe -cov=70 $(UDFLAGS) -main -run std\net\isemail.d - $(DMD) -conf= -cov=ctfe -cov=2 $(UDFLAGS) -main -run std\net\curl.d - $(DMD) -conf= -cov=ctfe -cov=60 $(UDFLAGS) -main -run std\windows\registry.d - $(DMD) -conf= -cov=ctfe -cov=0 $(UDFLAGS) -main -run std\internal\digest\sha_SSSE3.d - $(DMD) -conf= -cov=ctfe -cov=50 $(UDFLAGS) -main -run std\internal\math\biguintcore.d - $(DMD) -conf= -cov=ctfe -cov=75 $(UDFLAGS) -main -run std\internal\math\biguintnoasm.d -# $(DMD) -conf= -cov=ctfe -cov $(UDFLAGS) -main -run std\internal\math\biguintx86.d - $(DMD) -conf= -cov=ctfe -cov=94 $(UDFLAGS) -main -run std\internal\math\gammafunction.d - $(DMD) -conf= -cov=ctfe -cov=92 $(UDFLAGS) -main -run std\internal\math\errorfunction.d - $(DMD) -conf= -cov=ctfe -cov=31 $(UDFLAGS) -main -run std\internal\windows\advapi32.d - $(DMD) -conf= -cov=ctfe -cov=58 $(UDFLAGS) -main -run etc\c\zlib.d - $(DMD) -conf= -cov=ctfe -cov=95 $(UDFLAGS) -main -run std\sumtype.d - -###################################################### - -$(ZLIB): $(SRC_ZLIB) - cd etc\c\zlib - $(MAKE) -f win32.mak zlib.lib CC=$(CC) LIB=$(AR) - cd ..\..\.. - -###################################################### - -zip: - del phobos.zip - zip32 -r phobos.zip . -x .git\* -x \*.lib -x \*.obj - -phobos.zip : zip - -clean: - cd etc\c\zlib - $(MAKE) -f win32.mak clean - cd ..\..\.. - del $(DOCS) - del $(UNITTEST_OBJS) unittest.obj unittest.exe - del $(LIB) - del phobos.json - -install: phobos.zip - $(CP) phobos.lib phobos64.lib $(DIR)\windows\lib - +rd/s/q $(DIR)\src\phobos - unzip -o phobos.zip -d $(DIR)\src\phobos - -auto-tester-build: - echo "Auto-Tester has been disabled" - -auto-tester-test: - echo "Auto-Tester has been disabled" diff --git a/win64.mak b/win64.mak deleted file mode 100644 index f094ab12170..00000000000 --- a/win64.mak +++ /dev/null @@ -1,516 +0,0 @@ -# Makefile to build D runtime library phobos{64,32mscoff}.lib for Windows MSVC -# Prerequisites: -# Microsoft Visual Studio -# Targets: -# make -# Same as make unittest -# make phobos64.lib -# Build phobos64.lib -# make clean -# Delete unneeded files created by build process -# make unittest -# Build phobos64.lib, build and run unit tests -# make cov -# Build for coverage tests, run coverage tests -# make MODEL=32mscoff phobos32mscoff.lib -# Build phobos32mscoff.lib (with x86 cl.exe in PATH, otherwise set CC & AR manually) - -## Memory model (32mscoff or 64) -MODEL=64 - -## Assume MSVC cl.exe & lib.exe in PATH are set up for the target MODEL. -## Otherwise set them explicitly, e.g., to `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x86\cl.exe`. -CC=cl -AR=lib - -MAKE=make - -## Directory where dmd has been installed - -DIR=\dmd2 - -## Flags for VC compiler - -CFLAGS=/O2 /nologo - -## Location of druntime tree - -DRUNTIME=../dmd/druntime -DRUNTIMELIB=$(DRUNTIME)/lib/druntime$(MODEL).lib - -## Flags for dmd D compiler - -DFLAGS=-conf= -m$(MODEL) -O -release -w -de -preview=dip1000 -preview=dtorfields -preview=fieldwise -I$(DRUNTIME)\import - -## Flags for compiling unittests - -UDFLAGS=-conf= -g -m$(MODEL) -O -w -preview=dip1000 -preview=fieldwise -I$(DRUNTIME)\import -unittest -version=StdUnittest -version=CoreUnittest - -## D compiler - -DMD_DIR=../dmd -BUILD=release -OS=windows -DMD=$(DMD_DIR)/generated/$(OS)/$(BUILD)/$(MODEL)/dmd - -## Zlib library - -ZLIB=etc\c\zlib\zlib$(MODEL).lib - -.c.obj: -# "$(CC)" -c $(CFLAGS) $*.c - $(DMD) -c $(DFLAGS) -I. -v $*.c - -.cpp.obj: - "$(CC)" -c $(CFLAGS) $*.cpp - -.d.obj: - "$(DMD)" -c $(DFLAGS) $* - -.asm.obj: - "$(CC)" -c $* - -LIB=phobos$(MODEL).lib - -targets : $(LIB) - -test : test.exe - -test.obj : test.d - "$(DMD)" -conf= -c -m$(MODEL) test -g $(UDFLAGS) - -test.exe : test.obj $(LIB) - "$(DMD)" -conf= test.obj -m$(MODEL) -g -L/map - -# ti_bit.obj ti_Abit.obj - -SRC= \ - unittest.d \ - index.dd - -# The separation is a workaround for bug 4904 (optlink bug 3372). -SRC_STD_1= \ - std\stdio.d \ - std\string.d \ - std\file.d - -SRC_STD_2a= \ - std\array.d \ - std\functional.d \ - std\path.d \ - std\outbuffer.d \ - std\utf.d - -SRC_STD_3= \ - std\csv.d \ - std\complex.d \ - std\numeric.d \ - std\bigint.d - -SRC_STD_3b= \ - std\base64.d \ - std\ascii.d \ - std\demangle.d \ - std\uri.d \ - std\mmfile.d \ - std\getopt.d - -SRC_STD_3c= \ - std\signals.d \ - std\meta.d \ - std\typetuple.d \ - std\traits.d \ - std\encoding.d \ - std\random.d \ - std\exception.d \ - std\compiler.d \ - std\system.d \ - std\concurrency.d - -SRC_STD_3d= \ - std\bitmanip.d \ - std\typecons.d - -SRC_STD_4= \ - std\int128.d \ - std\uuid.d - -SRC_STD_6a=std\variant.d -SRC_STD_6c=std\zlib.d -SRC_STD_6e=std\socket.d -SRC_STD_6h=std\conv.d -SRC_STD_6i=std\zip.d - -SRC_STD_7= \ - std\stdint.d \ - std\json.d \ - std\parallelism.d \ - std\mathspecial.d \ - std\process.d \ - std\package.d - -SRC_STD_7a= \ - std\sumtype.d - -SRC_STD= \ - $(SRC_STD_1) \ - $(SRC_STD_2a) \ - $(SRC_STD_3) \ - $(SRC_STD_3a) \ - $(SRC_STD_3b) \ - $(SRC_STD_3c) \ - $(SRC_STD_3d) \ - $(SRC_STD_4) \ - $(SRC_STD_6a) \ - $(SRC_STD_6c) \ - $(SRC_STD_6e) \ - $(SRC_STD_6h) \ - $(SRC_STD_6i) \ - $(SRC_STD_7) \ - $(SRC_STD_7a) - -SRC_STD_ALGO_1= \ - std\algorithm\package.d \ - std\algorithm\comparison.d \ - std\algorithm\iteration.d \ - std\algorithm\mutation.d - -SRC_STD_ALGO_2= \ - std\algorithm\searching.d \ - std\algorithm\setops.d - -SRC_STD_ALGO_3= \ - std\algorithm\sorting.d \ - std\algorithm\internal.d - -SRC_STD_ALGO= \ - $(SRC_STD_ALGO_1) \ - $(SRC_STD_ALGO_2) \ - $(SRC_STD_ALGO_3) - -SRC_STD_FORMAT= \ - std\format\package.d \ - std\format\read.d \ - std\format\spec.d \ - std\format\write.d \ - std\format\internal\floats.d \ - std\format\internal\read.d \ - std\format\internal\write.d - -SRC_STD_MATH = \ - std\math\algebraic.d \ - std\math\constants.d \ - std\math\exponential.d \ - std\math\operations.d \ - std\math\hardware.d \ - std\math\package.d \ - std\math\remainder.d \ - std\math\rounding.d \ - std\math\traits.d \ - std\math\trigonometry.d - -SRC_STD_CONTAINER= \ - std\container\array.d \ - std\container\binaryheap.d \ - std\container\dlist.d \ - std\container\rbtree.d \ - std\container\slist.d \ - std\container\util.d \ - std\container\package.d - -SRC_STD_DATETIME= \ - std\datetime\date.d \ - std\datetime\interval.d \ - std\datetime\package.d \ - std\datetime\stopwatch.d \ - std\datetime\systime.d \ - std\datetime\timezone.d - -SRC_STD_DIGEST= \ - std\digest\crc.d \ - std\digest\sha.d \ - std\digest\md.d \ - std\digest\ripemd.d \ - std\digest\hmac.d \ - std\digest\murmurhash.d \ - std\digest\package.d - -SRC_STD_NET= \ - std\net\isemail.d \ - std\net\curl.d - -SRC_STD_RANGE= \ - std\range\package.d \ - std\range\primitives.d \ - std\range\interfaces.d - -SRC_STD_REGEX= \ - std\regex\internal\ir.d \ - std\regex\package.d \ - std\regex\internal\parser.d \ - std\regex\internal\tests.d \ - std\regex\internal\tests2.d \ - std\regex\internal\backtracking.d \ - std\regex\internal\thompson.d \ - std\regex\internal\kickstart.d \ - std\regex\internal\generator.d - -SRC_STD_WIN= \ - std\windows\registry.d \ - std\windows\syserror.d \ - std\windows\charset.d - -SRC_STD_INTERNAL= \ - std\internal\cstring.d \ - std\internal\memory.d \ - std\internal\unicode_tables.d \ - std\internal\unicode_comp.d \ - std\internal\unicode_decomp.d \ - std\internal\unicode_grapheme.d \ - std\internal\unicode_norm.d \ - std\internal\scopebuffer.d \ - std\internal\test\dummyrange.d \ - std\internal\test\range.d - -SRC_STD_INTERNAL_DIGEST= \ - std\internal\digest\sha_SSSE3.d - -SRC_STD_INTERNAL_MATH= \ - std\internal\math\biguintcore.d \ - std\internal\math\biguintnoasm.d \ - std\internal\math\biguintx86.d \ - std\internal\math\gammafunction.d \ - std\internal\math\errorfunction.d - -SRC_STD_INTERNAL_WINDOWS= \ - std\internal\windows\advapi32.d - -SRC_STD_EXP= \ - std\checkedint.d std\experimental\checkedint.d - -SRC_STD_UNI = std\uni\package.d - -SRC_STD_EXP_ALLOC_BB= \ - std\experimental\allocator\building_blocks\affix_allocator.d \ - std\experimental\allocator\building_blocks\aligned_block_list.d \ - std\experimental\allocator\building_blocks\allocator_list.d \ - std\experimental\allocator\building_blocks\ascending_page_allocator.d \ - std\experimental\allocator\building_blocks\bitmapped_block.d \ - std\experimental\allocator\building_blocks\bucketizer.d \ - std\experimental\allocator\building_blocks\fallback_allocator.d \ - std\experimental\allocator\building_blocks\free_list.d \ - std\experimental\allocator\building_blocks\free_tree.d \ - std\experimental\allocator\building_blocks\kernighan_ritchie.d \ - std\experimental\allocator\building_blocks\null_allocator.d \ - std\experimental\allocator\building_blocks\quantizer.d \ - std\experimental\allocator\building_blocks\region.d \ - std\experimental\allocator\building_blocks\scoped_allocator.d \ - std\experimental\allocator\building_blocks\segregator.d \ - std\experimental\allocator\building_blocks\stats_collector.d \ - std\experimental\allocator\building_blocks\package.d - -SRC_STD_EXP_ALLOC= \ - std\experimental\allocator\common.d \ - std\experimental\allocator\gc_allocator.d \ - std\experimental\allocator\mallocator.d \ - std\experimental\allocator\mmap_allocator.d \ - std\experimental\allocator\showcase.d \ - std\experimental\allocator\typed.d \ - std\experimental\allocator\package.d \ - $(SRC_STD_EXP_ALLOC_BB) - -SRC_STD_EXP_LOGGER= \ - std\experimental\logger\core.d \ - std\experimental\logger\filelogger.d \ - std\experimental\logger\multilogger.d \ - std\experimental\logger\nulllogger.d \ - std\experimental\logger\package.d - -SRC_STD_LOGGER= \ - std\logger\core.d \ - std\logger\filelogger.d \ - std\logger\multilogger.d \ - std\logger\nulllogger.d \ - std\logger\package.d - -SRC_ETC= - -SRC_ETC_C= \ - etc\c\zlib.d \ - etc\c\curl.d \ - etc\c\sqlite3.d \ - etc\c\odbc\sql.d \ - etc\c\odbc\sqlext.d \ - etc\c\odbc\sqltypes.d \ - etc\c\odbc\sqlucode.d - -SRC_TO_COMPILE= \ - $(SRC_STD) \ - $(SRC_STD_ALGO) \ - $(SRC_STD_CONTAINER) \ - $(SRC_STD_DATETIME) \ - $(SRC_STD_DIGEST) \ - $(SRC_STD_FORMAT) \ - $(SRC_STD_MATH) \ - $(SRC_STD_NET) \ - $(SRC_STD_RANGE) \ - $(SRC_STD_REGEX) \ - $(SRC_STD_C) \ - $(SRC_STD_WIN) \ - $(SRC_STD_C_WIN) \ - $(SRC_STD_INTERNAL) \ - $(SRC_STD_INTERNAL_DIGEST) \ - $(SRC_STD_INTERNAL_MATH) \ - $(SRC_STD_INTERNAL_WINDOWS) \ - $(SRC_STD_UNI) \ - $(SRC_STD_EXP) \ - $(SRC_STD_EXP_ALLOC) \ - $(SRC_STD_EXP_LOGGER) \ - $(SRC_STD_LOGGER) \ - $(SRC_ETC) \ - $(SRC_ETC_C) - -SRC_ZLIB= \ - etc\c\zlib\crc32.h \ - etc\c\zlib\deflate.h \ - etc\c\zlib\gzguts.h \ - etc\c\zlib\inffixed.h \ - etc\c\zlib\inffast.h \ - etc\c\zlib\inftrees.h \ - etc\c\zlib\inflate.h \ - etc\c\zlib\trees.h \ - etc\c\zlib\zconf.h \ - etc\c\zlib\zlib.h \ - etc\c\zlib\zutil.h \ - etc\c\zlib\adler32.c \ - etc\c\zlib\compress.c \ - etc\c\zlib\crc32.c \ - etc\c\zlib\deflate.c \ - etc\c\zlib\gzclose.c \ - etc\c\zlib\gzlib.c \ - etc\c\zlib\gzread.c \ - etc\c\zlib\gzwrite.c \ - etc\c\zlib\infback.c \ - etc\c\zlib\inffast.c \ - etc\c\zlib\inflate.c \ - etc\c\zlib\inftrees.c \ - etc\c\zlib\trees.c \ - etc\c\zlib\uncompr.c \ - etc\c\zlib\zutil.c - -$(LIB) : $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) win32.mak win64.mak - "$(DMD)" -lib -of$(LIB) -Xfphobos.json $(DFLAGS) $(SRC_TO_COMPILE) \ - $(ZLIB) $(DRUNTIMELIB) - -UNITTEST_OBJS= \ - unittest1.obj \ - unittest2.obj \ - unittest2a.obj \ - unittest3.obj \ - unittest3b.obj \ - unittest3c.obj \ - unittest3d.obj \ - unittest4.obj \ - unittest5a.obj \ - unittest5b.obj \ - unittest5c.obj \ - unittest5d.obj \ - unittest5e.obj \ - unittest6a.obj \ - unittest6c.obj \ - unittest6e.obj \ - unittest6g.obj \ - unittest6h.obj \ - unittest6i.obj \ - unittest7.obj \ - unittest7a.obj \ - unittest8a.obj \ - unittest8b.obj \ - unittest8c.obj \ - unittest8d.obj \ - unittest8e.obj \ - unittest8f.obj \ - unittest9.obj - -unittest : $(LIB) - "$(DMD)" $(UDFLAGS) -c -ofunittest1.obj $(SRC_STD_1) - "$(DMD)" $(UDFLAGS) -c -ofunittest2.obj $(SRC_STD_RANGE) - "$(DMD)" $(UDFLAGS) -c -ofunittest2a.obj $(SRC_STD_2a) - "$(DMD)" $(UDFLAGS) -c -ofunittest3.obj $(SRC_STD_3) - "$(DMD)" $(UDFLAGS) -c -ofunittest3b.obj $(SRC_STD_3b) - "$(DMD)" $(UDFLAGS) -c -ofunittest3c.obj $(SRC_STD_3c) - "$(DMD)" $(UDFLAGS) -c -ofunittest3d.obj $(SRC_STD_3d) $(SRC_STD_DATETIME) - "$(DMD)" $(UDFLAGS) -c -ofunittest4.obj $(SRC_STD_4) $(SRC_STD_DIGEST) - "$(DMD)" $(UDFLAGS) -c -ofunittest5a.obj $(SRC_STD_ALGO_1) - "$(DMD)" $(UDFLAGS) -c -ofunittest5b.obj $(SRC_STD_ALGO_2) - "$(DMD)" $(UDFLAGS) -c -ofunittest5c.obj $(SRC_STD_ALGO_3) - "$(DMD)" $(UDFLAGS) -c -ofunittest5d.obj $(SRC_STD_FORMAT) - "$(DMD)" $(UDFLAGS) -c -ofunittest5e.obj $(SRC_STD_MATH) - "$(DMD)" $(UDFLAGS) -c -ofunittest6a.obj $(SRC_STD_6a) - "$(DMD)" $(UDFLAGS) -c -ofunittest6c.obj $(SRC_STD_6c) - "$(DMD)" $(UDFLAGS) -c -ofunittest6e.obj $(SRC_STD_6e) - "$(DMD)" $(UDFLAGS) -c -ofunittest6g.obj $(SRC_STD_CONTAINER) - "$(DMD)" $(UDFLAGS) -c -ofunittest6h.obj $(SRC_STD_6h) - "$(DMD)" $(UDFLAGS) -c -ofunittest6i.obj $(SRC_STD_6i) - "$(DMD)" $(UDFLAGS) -c -ofunittest7.obj $(SRC_STD_7) $(SRC_STD_LOGGER) - "$(DMD)" $(UDFLAGS) -c -ofunittest7a.obj $(SRC_STD_7a) - "$(DMD)" $(UDFLAGS) -c -ofunittest8a.obj $(SRC_STD_REGEX) - "$(DMD)" $(UDFLAGS) -c -ofunittest8b.obj $(SRC_STD_NET) - "$(DMD)" $(UDFLAGS) -c -ofunittest8c.obj $(SRC_STD_C) $(SRC_STD_WIN) $(SRC_STD_C_WIN) - "$(DMD)" $(UDFLAGS) -c -ofunittest8d.obj $(SRC_STD_INTERNAL) $(SRC_STD_INTERNAL_DIGEST) $(SRC_STD_INTERNAL_MATH) $(SRC_STD_INTERNAL_WINDOWS) - "$(DMD)" $(UDFLAGS) -c -ofunittest8e.obj $(SRC_ETC) $(SRC_ETC_C) - "$(DMD)" $(UDFLAGS) -c -ofunittest8f.obj $(SRC_STD_EXP) - "$(DMD)" $(UDFLAGS) -c -ofunittest9.obj $(SRC_STD_EXP_ALLOC) - "$(DMD)" $(UDFLAGS) unittest.d $(UNITTEST_OBJS) \ - $(ZLIB) $(DRUNTIMELIB) - .\unittest.exe - -#unittest : unittest.exe -# unittest -# -#unittest.exe : unittest.d $(LIB) -# $(DMD) -conf= unittest -g -# dmc unittest.obj -g - -cov : $(SRC_TO_COMPILE) $(LIB) - "$(DMD)" -conf= -m$(MODEL) -cov $(UDFLAGS) -ofcov.exe unittest.d $(SRC_TO_COMPILE) $(LIB) - cov - -###################################################### - -$(ZLIB): $(SRC_ZLIB) - cd etc\c\zlib - "$(MAKE)" -f win64.mak MODEL=$(MODEL) "CC=$(CC)" "AR=$(AR)" zlib$(MODEL).lib - cd ..\..\.. - -###################################################### - -zip: - del phobos.zip - zip32 -r phobos.zip . -x .git\* -x \*.lib -x \*.obj - -phobos.zip : zip - -clean: - cd etc\c\zlib - "$(MAKE)" -f win64.mak MODEL=$(MODEL) clean - cd ..\..\.. - del $(DOCS) - del $(UNITTEST_OBJS) unittest.obj unittest.exe - del $(LIB) - del phobos.json - -install: phobos.zip $(LIB) - copy /y /b $(LIB) $(DIR)\windows\lib - +rd/s/q $(DIR)\src\phobos - unzip -o phobos.zip -d $(DIR)\src\phobos - -auto-tester-build: - echo "Auto-Tester has been disabled" - -JOBS=$(NUMBER_OF_PROCESSORS) -GMAKE=gmake - -auto-tester-test: - echo "Auto-Tester has been disabled"